{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: sasquatchcc719-pixel/Sasquatch-sightings", "shortDescription": {"text": "Foundry mined unresolved feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 24\nEdge"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: sasquatchcc719-pixel/Sasquatch-sightings", "shortDescription": {"text": "Foundry mined blueprint gap alignment: sasquatchcc719-pixel/Sasquatch-sightings"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 24\n"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: sasquatchcc719-pixel/Sasquatch-sightings", "shortDescription": {"text": "Foundry mined test ci gap after feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 32\nEdges: 75\nNode types: {'pr_file': 15, 'link_quality': 6, 'comment': 2, '"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: sasquatchcc719-pixel/Sasquatch-sightings", "shortDescription": {"text": "Foundry mined bad chains: sasquatchcc719-pixel/Sasquatch-sightings"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 15\nLabels: {'test_ci_gap': 1, 'api_integration_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 8, 'api_or_backend': 6, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-c"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-11d539252da0f9b0", "name": "Stray `console.log` in TS/JS \u2014 test_estimate.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_estimate.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4dbc51afd12e546", "name": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-manual.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-manual.js:7"}, "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-998e981bf0501045", "name": "Stray `console.log` in TS/JS \u2014 fix_db.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 fix_db.js:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3c76762dfbace0d", "name": "Stray `console.log` in TS/JS \u2014 test-ringcentral-webhook.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-ringcentral-webhook.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-582553a91bd28418", "name": "Stray `console.log` in TS/JS \u2014 test_insert_appointment.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_insert_appointment.js:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-491bf79459c13dd9", "name": "Stray `console.log` in TS/JS \u2014 test_post.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_post.js:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcd52ba9d953db5d", "name": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook.js:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cd35b12558142b4", "name": "Stray `console.log` in TS/JS \u2014 check-partner-data.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-partner-data.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-120000410dc12b62", "name": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-jwt.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-jwt.js:14"}, "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-a6926e075f96bc17", "name": "Stray `console.log` in TS/JS \u2014 docs/TWILIO-FUNCTION-CODE.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/TWILIO-FUNCTION-CODE.js:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afa70084b34a6994", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-harry-knowledge.ts:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-harry-knowledge.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-83049e2469151e81", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-logs.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-logs.ts:13"}, "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-f69fbbfcbc91307d", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-mariahs-booking.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-mariahs-booking.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9db3b5e3aa3d4d3", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-sectional-pricing.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-sectional-pricing.ts:13"}, "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-0b363f5cc93a79d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-job-cities.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-job-cities.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-372270dffa308d52", "name": "Stray `console.log` in TS/JS \u2014 scripts/gbp-reviews-sync-once.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gbp-reviews-sync-once.ts:10"}, "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-dca94ede7d360faf", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-kelly-matice-may-11-2026.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-kelly-matice-may-11-2026.ts:57"}, "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-5d26b550c9708f40", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-google-tokens.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-google-tokens.js:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46fa5ce2022db950", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-pending.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pending.ts:42"}, "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-4a0ff35f8fa76f71", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-hcp-jobs-week-of-2026-04-13.ts:980", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-hcp-jobs-week-of-2026-04-13.ts:980"}, "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-c1ab82a6a3c1f295", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-anne-messages.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-anne-messages.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a66c197cb55c7545", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-telegram-tools-integration.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-telegram-tools-integration.ts:142"}, "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-284e8ada9c7456db", "name": "Stray `console.log` in TS/JS \u2014 scripts/trigger-harry-for-sally.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trigger-harry-for-sally.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-93fc9243ffe32e0f", "name": "Stray `console.log` in TS/JS \u2014 scripts/book-ann-biebel.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/book-ann-biebel.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea999a6d9c55ca74", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-scenarios.ts:627", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-scenarios.ts:627"}, "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-6a355e5aa65d1ff7", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-drip-enrollments.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-drip-enrollments.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e9162ec99689db9", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-google-apis.js:2", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-google-apis.js:2"}, "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-f29a2267548acfb0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-evan-booking-source.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-evan-booking-source.ts:41"}, "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-7cae075d59ae0e16", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-on-my-way-status.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-on-my-way-status.ts:32"}, "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-411b787b88bf6ae5", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-harry-activity.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-harry-activity.ts:15"}, "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-e12835382b797db3", "name": "Stray `console.log` in TS/JS \u2014 scripts/radar-scan-once.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/radar-scan-once.ts:8"}, "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-9f430634711a3630", "name": "Stray `console.log` in TS/JS \u2014 scripts/gsc-watch-once.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gsc-watch-once.ts:10"}, "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-fa7fe9a61d9220a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-larkspur-ranking.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-larkspur-ranking.ts:14"}, "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-5aed0785057c2331", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-google-ids.js:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-google-ids.js:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61447c4959089c0f", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-matt-back.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-matt-back.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49e054e58d515a4b", "name": "Stray `console.log` in TS/JS \u2014 scripts/trigger-confirmation.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trigger-confirmation.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd34ae6bf5500d8a", "name": "Stray `console.log` in TS/JS \u2014 scripts/move-kelly-matice-to-noon.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/move-kelly-matice-to-noon.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f76a40eb02c98037", "name": "Stray `console.log` in TS/JS \u2014 scripts/send-booking-confirmation.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-booking-confirmation.ts:13"}, "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-f7d077106dd1cd92", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-tools-integration.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-tools-integration.ts:126"}, "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-55b593d533628e8e", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-8x5-rug.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-8x5-rug.js:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d967b25b31fac2e1", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-telegram-chat-id.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-telegram-chat-id.ts:13"}, "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-f02ee5cfe2d4b753", "name": "Stray `console.log` in TS/JS \u2014 scripts/geocode-service-addresses.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-service-addresses.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63ed71edaac26a3", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-ops-customers.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-ops-customers.ts:22"}, "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-f9481f810f11db11", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-recovery-village-recurring.ts:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-recovery-village-recurring.ts:211"}, "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-529709d6bc7a04b8", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-reschedule-slot-token.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-reschedule-slot-token.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fb47bf4d54fb880", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-errors.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-errors.ts:13"}, "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-e8e85c5c727d5684", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-lsa-bookings.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-lsa-bookings.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05ad876cad0699e6", "name": "Stray `console.log` in TS/JS \u2014 scripts/create-conversation-for-sally.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-conversation-for-sally.ts:25"}, "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-869260e1bc0f1f0e", "name": "Stray `console.log` in TS/JS \u2014 scripts/setup-harry-command-webhook.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-harry-command-webhook.ts:18"}, "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-79c5d6b44238e944", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-infogating.ts:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-infogating.ts:160"}, "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-e24691f159debe0b", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-todd-status.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-todd-status.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-358609f14771ffb1", "name": "Stray `console.log` in TS/JS \u2014 scripts/approve-appointment.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/approve-appointment.ts:13"}, "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-024058146db52d4e", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-activity.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-activity.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-738249fa03904e15", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-completed-job-stats.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-completed-job-stats.js:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4e63f1001599857", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-radar-status.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-radar-status.ts:12"}, "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-83d3ad6121d6abd9", "name": "Stray `console.log` in TS/JS \u2014 scripts/add-flood-restoration.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-flood-restoration.ts:25"}, "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-cc4c0c091b29cc96", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-evan.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-evan.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df449d55406feb7c", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-sectional.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-sectional.ts:23"}, "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-ea068108bf542a18", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-sighting-locations.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-sighting-locations.ts:22"}, "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-378ce3cc3ed4e255", "name": "Stray `console.log` in TS/JS \u2014 ARCHIVE_TEMP_FILES/check-twilio-setup.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ARCHIVE_TEMP_FILES/check-twilio-setup.js:8"}, "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-abacb3a0ec1caa84", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth-button.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth-button.tsx:16"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-381167d2203837cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/tech/tech-day-schedule.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tech/tech-day-schedule.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82d8beaca6b95f0e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/reactivation-control-center.tsx:679", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/reactivation-control-center.tsx:679"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09b6b052076dc2bb", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/upload-form.tsx:443", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/upload-form.tsx:443"}, "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-58596d2553f972ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/conversations-view.tsx:974", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/conversations-view.tsx:974"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-400ec942bd645b0f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/mobile-header.tsx:409", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/mobile-header.tsx:409"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57d609780b8742f2", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/softphone.tsx:228", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/softphone.tsx:228"}, "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-f3da0ccd6b5eddd7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ranger-dashboard.tsx:733", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ranger-dashboard.tsx:733"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd66e790f6a18830", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/admin-partners-view.tsx:191", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/admin-partners-view.tsx:191"}, "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-5c01f85eebfdf97d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/operations-dashboard.tsx:998", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/operations-dashboard.tsx:998"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afddefca817a4f47", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/drip-campaigns-tab.tsx:488", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/drip-campaigns-tab.tsx:488"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-646b7f7ffab2d905", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/TimesheetsView.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/TimesheetsView.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-0ebba28a14a49d4d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/MyDayView.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/MyDayView.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-3e2c8b6e4cc08306", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/recurring-manager.tsx:326", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/recurring-manager.tsx:326"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-daf9621c74467deb", "name": "Stray `console.log` in TS/JS \u2014 src/components/admin/ops/recurring-manager.tsx:602", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/ops/recurring-manager.tsx:602"}, "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-c45be62b84da85bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/estimate-detail.tsx:1655", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/estimate-detail.tsx:1655"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94a8b31e9e652c5d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/operations-schedule.tsx:2437", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/operations-schedule.tsx:2437"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0262dcd6adce3ce0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/nfc/NfcBookingWidget.tsx:1788", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nfc/NfcBookingWidget.tsx:1788"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb53d38a21d64623", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/nfc/NfcBookingWidget.tsx:198", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/nfc/NfcBookingWidget.tsx:198"}, "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-68bbef9aee44f1c7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/upload/route.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/upload/route.ts:192"}, "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-170d9a980ca1ccf6", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/generate/route.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/generate/route.ts:11"}, "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-7ea0f5ccf10d54b0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/leads/route.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/leads/route.ts:97"}, "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-249c71c3bc6687dc", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/conversations/[id]/reply/route.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/conversations/[id]/reply/route.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30bac4a43b8d8de0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/sightings/route.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sightings/route.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1406828294e0baa", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/tap/track/route.ts:166", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tap/track/route.ts:166"}, "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-3621ef0c3197b146", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/referrals/route.ts:213", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/referrals/route.ts:213"}, "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-5c3faa973118541c", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ops/recurring/add-batch-job/route.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ops/recurring/add-batch-job/route.ts:109"}, "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-ce75fef8847c565b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voice-twiml/route.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voice-twiml/route.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ced9f247c5fcd1d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-after-hours/route.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-after-hours/route.ts:56"}, "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-00a59142aee39ff7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/ivr-menu/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/ivr-menu/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27e905bb34664457", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-router/route.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-router/route.ts:51"}, "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-60493a5819a6befd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voicemail/route.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voicemail/route.ts:142"}, "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-3b53e353263888db", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/sms-incoming/route.ts:888", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/sms-incoming/route.ts:888"}, "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-7213eeab1291fc53", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/dial-failover/route.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/dial-failover/route.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-21686e7dbf61a958", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/nurture-leads/route.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/nurture-leads/route.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fcd8606cc35a61f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/quickbooks-sync/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/quickbooks-sync/route.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42cc127396785c0d", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/gps-cleanup/route.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/gps-cleanup/route.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-cce57f7bcc6404ac", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/station-health/route.ts:191", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/station-health/route.ts:191"}, "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-eb1fc3a1129ec29f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/recurring-jobs/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/recurring-jobs/route.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fafa0bf3b58dd486", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/job-reminders/route.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/job-reminders/route.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3168bbac97168103", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/appointment-booked/route.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/appointment-booked/route.ts:57"}, "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-f2fde69580a9f815", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sightings/share/[id]/page.tsx:149", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sightings/share/[id]/page.tsx:149"}, "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-67261c00d2339caa", "name": "Stray `console.log` in TS/JS \u2014 src/app/admin/layout.tsx:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/layout.tsx:23"}, "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-55285646e518243a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/radar/page.tsx:653", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/radar/page.tsx:653"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-659b446824883a43", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/comms/page.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/comms/page.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e834b37ebaea9f2", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/comms/page.tsx:146", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/comms/page.tsx:146"}, "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-2e1897f953126311", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/email-outbox/page.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/email-outbox/page.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-590769d97968f54e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/operations/estimates/page.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/operations/estimates/page.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59d0516b18d3dd6b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/page.tsx:1219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/page.tsx:1219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc7f437cb7d64ec0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/promo-codes/page.tsx:646", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/promo-codes/page.tsx:646"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4662ff730fb3898", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/sightings/page.tsx:593", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/sightings/page.tsx:593"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ce3ba9adbf3b584", "name": "Stray `console.log` in TS/JS \u2014 src/app/admin/tools/combine/page.tsx:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/tools/combine/page.tsx:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf26f32e6377d8fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/blacklist/page.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/blacklist/page.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac038273fcefba22", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/stats/page.tsx:1240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/stats/page.tsx:1240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89b8204c7b41511a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/phone/page.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/phone/page.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c14c485fc4eaae8f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/work/[city]/[slug]/page.tsx:189", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/work/[city]/[slug]/page.tsx:189"}, "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-7551a6b43dae8481", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/book/page.tsx:80", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/book/page.tsx:80"}, "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-2dc2202e70d8af7b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ai.ts:200", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai.ts:200"}, "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-22a9c2935909665e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/twilio.ts:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/twilio.ts:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af69ee52783e7ab8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/google-indexing.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-indexing.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd0c83962b1cd0e0", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ringcentral.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ringcentral.ts:110"}, "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-88ea35051f16553d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/openai-chat.ts:272", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/openai-chat.ts:272"}, "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-eb7c03f943c97fef", "name": "Stray `console.log` in TS/JS \u2014 src/lib/quickbooks-api.ts:728", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/quickbooks-api.ts:728"}, "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-024c936fd9acdd41", "name": "Stray `console.log` in TS/JS \u2014 src/lib/google-business.ts:215", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-business.ts:215"}, "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-c91b20716b3c05d6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/onesignal.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/onesignal.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-4ff6a19ac8662b79", "name": "Stray `console.log` in TS/JS \u2014 src/lib/blacklist.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/blacklist.ts:14"}, "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-df48bdef0f2b1569", "name": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.ts:63"}, "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-8a1eff6429121b12", "name": "Stray `console.log` in TS/JS \u2014 src/lib/ops/sms-harry-tools.ts:1756", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ops/sms-harry-tools.ts:1756"}, "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-ac94503a5f3594ef", "name": "Insecure pattern 'node_child_process' in scripts/ranger-gmail-auth.mjs:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/ranger-gmail-auth.mjs:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01efacfea28a75cf", "name": "Insecure pattern 'cors_wildcard' in src/app/api/agent/availability/route.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/availability/route.ts:12"}, "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-c0fa168ef0dd4373", "name": "Insecure pattern 'cors_wildcard' in src/app/api/agent/estimate/route.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/estimate/route.ts:11"}, "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-b20b18d93b780fa7", "name": "Insecure pattern 'cors_wildcard' in src/app/api/agent/services/route.ts:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/services/route.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e0b59599a5123a8", "name": "Insecure pattern 'cors_wildcard' in src/app/api/agent/book/route.ts:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/book/route.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47a6be6432696753", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/lead-sources/route.ts:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/lead-sources/route.ts:7"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44cf04d243619a01", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/promo-preview/route.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/promo-preview/route.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c36060f4e6d46013", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/availability/route.ts:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/availability/route.ts:7"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0e8ee9cc9e3088ee", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/reviews/route.ts:22", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/reviews/route.ts:22"}, "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-fe592a7b3b6c5310", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/appointments/route.ts:34", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/appointments/route.ts:34"}, "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-92b77d16c786a94b", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/services/route.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/services/route.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-499c1b001335554f", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/review-stats/route.ts:52", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/review-stats/route.ts:52"}, "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-d9bd4122d62f03da", "name": "Insecure pattern 'cors_wildcard' in src/app/api/public/jobs/route.ts:123", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/jobs/route.ts:123"}, "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-e1737c2289ab3fda", "name": "Insecure pattern 'cors_wildcard' in src/app/api/stats/public/route.ts:171", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/stats/public/route.ts:171"}, "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-217a4475d59f2655", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/sightings/share/[id]/page.tsx:149", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sightings/share/[id]/page.tsx:149"}, "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-2cd9076841ae42b6", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/work/[city]/[slug]/page.tsx:189", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/work/[city]/[slug]/page.tsx:189"}, "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-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0130e61a40ab9a8", "name": "Very large file: scripts/retell-test-bridge.mjs (1988 lines)", "shortDescription": {"text": "Very large file: scripts/retell-test-bridge.mjs (1988 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-a020effd5ec8fa81", "name": "Very large file: scripts/retell-bridge.mjs (2281 lines)", "shortDescription": {"text": "Very large file: scripts/retell-bridge.mjs (2281 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-27d3bf052250a0a8", "name": "Very large file: src/components/admin/admin-partners-view.tsx (1412 lines)", "shortDescription": {"text": "Very large file: src/components/admin/admin-partners-view.tsx (1412 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-368b6e0f93855b44", "name": "Very large file: src/components/admin/operations-dashboard.tsx (2078 lines)", "shortDescription": {"text": "Very large file: src/components/admin/operations-dashboard.tsx (2078 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-97740a5adfa77aec", "name": "Very large file: src/components/admin/ops/invoice-detail.tsx (2697 lines)", "shortDescription": {"text": "Very large file: src/components/admin/ops/invoice-detail.tsx (2697 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-ee7b3c56f7c67b37", "name": "Very large file: src/components/admin/ops/recurring-manager.tsx (3174 lines)", "shortDescription": {"text": "Very large file: src/components/admin/ops/recurring-manager.tsx (3174 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-8e0eb40be7032384", "name": "Very large file: src/components/admin/ops/estimate-detail.tsx (1713 lines)", "shortDescription": {"text": "Very large file: src/components/admin/ops/estimate-detail.tsx (1713 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-0df7d994a5076c99", "name": "Very large file: src/components/admin/ops/operations-schedule.tsx (4109 lines)", "shortDescription": {"text": "Very large file: src/components/admin/ops/operations-schedule.tsx (4109 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-25f454dd7534b20b", "name": "Very large file: src/components/admin/ops/new-job-workspace.tsx (1851 lines)", "shortDescription": {"text": "Very large file: src/components/admin/ops/new-job-workspace.tsx (1851 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-c269baf937e7b0f2", "name": "Very large file: src/components/nfc/NfcBookingWidget.tsx (1814 lines)", "shortDescription": {"text": "Very large file: src/components/nfc/NfcBookingWidget.tsx (1814 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-bdf897f4a5625828", "name": "Very large file: src/app/api/telegram/harry-command/route.ts (4684 lines)", "shortDescription": {"text": "Very large file: src/app/api/telegram/harry-command/route.ts (4684 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-681c022105b560eb", "name": "Very large file: src/app/api/twilio/sms-incoming/route.ts (2028 lines)", "shortDescription": {"text": "Very large file: src/app/api/twilio/sms-incoming/route.ts (2028 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-41c869c73ecaca02", "name": "Very large file: src/app/admin/radar/page.tsx (1917 lines)", "shortDescription": {"text": "Very large file: src/app/admin/radar/page.tsx (1917 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-d1d246fcade54dba", "name": "Very large file: src/app/admin/vendors/page.tsx (1558 lines)", "shortDescription": {"text": "Very large file: src/app/admin/vendors/page.tsx (1558 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-d3658d9bb8bf0759", "name": "Very large file: src/app/admin/stats/page.tsx (1748 lines)", "shortDescription": {"text": "Very large file: src/app/admin/stats/page.tsx (1748 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-b1293273032812e5", "name": "Very large file: src/app/book/page.tsx (1421 lines)", "shortDescription": {"text": "Very large file: src/app/book/page.tsx (1421 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-834ac47e1982e75a", "name": "Very large file: src/lib/ops/sms-harry-tools.ts (2134 lines)", "shortDescription": {"text": "Very large file: src/lib/ops/sms-harry-tools.ts (2134 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-4026e214b2bfcd7d", "name": "Very large file: src/lib/retell/rebecca-tools.ts (3096 lines)", "shortDescription": {"text": "Very large file: src/lib/retell/rebecca-tools.ts (3096 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": "47 test file(s) for 607 source file(s) (ratio 0.08). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 1062 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 240 placeholder/mock markers across 58 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d5c21cabc8e63e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test_post.js:3", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test_post.js:3"}, "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-ca6824f7c8d3030a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retell-test-bridge.mjs:191", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retell-test-bridge.mjs:191"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8cfbe5f3ab033cc5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-ann-biebel.ts:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-ann-biebel.ts: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-014bf6982ea4cba4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-katie-correct.mjs:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-katie-correct.mjs:47"}, "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-7baa8b99832a3d12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-booking-confirmation.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-booking-confirmation.ts:15"}, "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-bf5e2cf13fb625b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-telegram-chat-id.ts:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-telegram-chat-id.ts:61"}, "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-309e699b0a192927", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/geocode-service-addresses.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/geocode-service-addresses.ts:54"}, "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-96473d8c6fe51456", "name": "Commented-code block (5 lines) in scripts/test-reschedule-slot-token.ts:2", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/test-reschedule-slot-token.ts:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fb96b61b5d57a98", "name": "Commented-code block (7 lines) in scripts/repair-four-invoices.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/repair-four-invoices.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a84ebd389a1c5990", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gsc-bulk-inspect.mjs:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gsc-bulk-inspect.mjs:14"}, "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-783d45f69cf72c7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/setup-harry-command-webhook.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/setup-harry-command-webhook.ts:24"}, "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-3ff471d9f0c2058f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:238", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:238"}, "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-d96e970a0d86be2a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tech/tech-job-detail.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tech/tech-job-detail.tsx:90"}, "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-9d78a1038e8af21c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/reactivation-control-center.tsx:212", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/reactivation-control-center.tsx:212"}, "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-3293edee24b78967", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/upload-form.tsx:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/upload-form.tsx:143"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f5d757f5b129eebd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/job-editor.tsx:109", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/job-editor.tsx:109"}, "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-e24b1abee0bc3d24", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/before-after-combiner.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/before-after-combiner.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-e060e80ea4bc7a25", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/mobile-bottom-nav.tsx:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/mobile-bottom-nav.tsx:25"}, "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-30a980a4b3f62647", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/harry-control-dashboard.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/harry-control-dashboard.tsx:80"}, "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-d7b55f884b83c9db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/admin-partners-view.tsx:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/admin-partners-view.tsx:146"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-909504519260bbc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/operations-dashboard.tsx:493", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/operations-dashboard.tsx:493"}, "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-eb144deeb50e5f18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/agent-api-settings.tsx:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/agent-api-settings.tsx:90"}, "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-4cbed91bf8fe22be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/invoice-detail.tsx:321", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/invoice-detail.tsx:321"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31285787f44ed2b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-settings.tsx:272", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-settings.tsx:272"}, "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-6dbb5a0396ae6c9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/TimesheetsView.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/TimesheetsView.tsx:71"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3292caa884450956", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-manager.tsx:518", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-manager.tsx:518"}, "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-e8b6aa7a6de8b438", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/appointment-detail.tsx:485", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/appointment-detail.tsx:485"}, "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-2849e2ff6028de10", "name": "Commented-code block (5 lines) in src/components/admin/ops/operations-schedule.tsx:793", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/admin/ops/operations-schedule.tsx:793"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-12821d01b1773c7d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-schedule.tsx:844", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-schedule.tsx:844"}, "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-07e886318acd83e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-visit-detail.tsx:256", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-visit-detail.tsx: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-a36a2e53d6bb777d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/new-job-workspace.tsx:352", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/new-job-workspace.tsx:352"}, "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-ef409999c207e125", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/PayrollTimesheetsView.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/PayrollTimesheetsView.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-74547b7d8aca7276", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/nfc/NfcBookingWidget.tsx:510", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/nfc/NfcBookingWidget.tsx:510"}, "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-f4ed20f45fcdf967", "name": "Commented-code block (5 lines) in src/app/sitemap.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/sitemap.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2afde6412690da69", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/posts/promotional/route.ts:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/posts/promotional/route.ts:190"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a830320b98774523", "name": "Commented-code block (6 lines) in src/app/api/telegram/harry-command/route.ts:1199", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/telegram/harry-command/route.ts:1199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74e1dab2e00378b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ops/address-suggest/route.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ops/address-suggest/route.ts:54"}, "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-d641905f5f9eacfe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/george/route.ts:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/george/route.ts:156"}, "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-ebb5b410346713d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/call-logs/recording/route.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/call-logs/recording/route.ts:33"}, "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-f732bf04eaedbdb2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/streetview/route.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/streetview/route.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-3a68a331fc4eeed1", "name": "Commented-code block (9 lines) in src/app/api/twilio/sms-incoming/route.ts:372", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/twilio/sms-incoming/route.ts:372"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1adcc5775fe99a9c", "name": "Commented-code block (5 lines) in src/app/api/public/chat/route.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/public/chat/route.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc04c819e5ba2719", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/book/route.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/book/route.ts:34"}, "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-077cff1d9f9e4ae8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sightings/page.tsx:281", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sightings/page.tsx:281"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd41ad88e6da0bca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/radar/page.tsx:448", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/radar/page.tsx:448"}, "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-e2deadcfa56062dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/email-outbox/page.tsx:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/email-outbox/page.tsx:192"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be4088c0828cd463", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/sms-outbox/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/sms-outbox/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-c5803bfbfd2817b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/promo-codes/page.tsx:199", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/promo-codes/page.tsx:199"}, "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-be9823809c45006c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/vendors/page.tsx:380", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/vendors/page.tsx:380"}, "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-3882b63e78d44faa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tools/combine/page.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tools/combine/page.tsx:108"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1942106e54233335", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rabecca/page.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rabecca/page.tsx:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d29bb619bd8802a7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/social-posts/page.tsx:1127", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/social-posts/page.tsx:1127"}, "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-e1b2cd0a0231e5e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/stats/lead-sources/page.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/stats/lead-sources/page.tsx:61"}, "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-f3fcbe6ac8604cf0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/location/[partnerId]/contest/page.tsx:287", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/location/[partnerId]/contest/page.tsx:287"}, "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-8375300be058e423", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/book/page.tsx:260", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/book/page.tsx:260"}, "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-3918a879fb30eec6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/harry-command-bot.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/harry-command-bot.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-744b859ac694cdfd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/web-search.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/web-search.ts:17"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd0fc37e515ee06f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gbp-reviews.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gbp-reviews.ts:54"}, "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-2e4802e9000d8fe2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/serpApi.ts:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/serpApi.ts:120"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01fbe22e88921a52", "name": "Commented-code block (6 lines) in src/lib/openai-chat.ts:665", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/openai-chat.ts:665"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b00394bdcb3a503", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-api.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-api.ts:20"}, "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-e816c230afb1f095", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-auth.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-auth.ts: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-fe0af9fd8e27e19f", "name": "Legacy-named symbol `searchconsole_v1` in src/lib/gsc.ts:9", "shortDescription": {"text": "Legacy-named symbol `searchconsole_v1` in src/lib/gsc.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-4003f9f2c3ab862e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gsc.ts:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gsc.ts:105"}, "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-d386f1b90e5a7d40", "name": "Legacy-named symbol `was_legacy` in src/lib/lead-sources.ts:54", "shortDescription": {"text": "Legacy-named symbol `was_legacy` in src/lib/lead-sources.ts:54"}, "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-5a94382b81eea16a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-business.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-business.ts:137"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e883287d19a94d6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/onesignal.ts:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/onesignal.ts: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-9fa7ac53135fe3aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:43"}, "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-f8bcfd5be7635e1a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/echo/zapier-mcp.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/echo/zapier-mcp.ts:25"}, "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-680864d46cfddb5c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ops/forward-geocode.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ops/forward-geocode.ts:37"}, "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-fa3ed7c2237b7257", "name": "Legacy-named symbol `gmail_v1` in src/lib/ranger/gmail.ts:1", "shortDescription": {"text": "Legacy-named symbol `gmail_v1` in src/lib/ranger/gmail.ts:1"}, "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-c62cd462b574b86b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/telegram.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/telegram.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e05eb0c6f4ee5921", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/research.ts:185", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/research.ts:185"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49ea8cd9b45e6472", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/square.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/square.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32a8c937b465161d", "name": "Legacy-named symbol `rawLegacy` in src/lib/server/lead-sources.ts:62", "shortDescription": {"text": "Legacy-named symbol `rawLegacy` in src/lib/server/lead-sources.ts:62"}, "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-87eef64c876995b7", "name": "Commented-code block (12 lines) in src/supabase/proxy.ts:62", "shortDescription": {"text": "Commented-code block (12 lines) in src/supabase/proxy.ts:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41d295c8db24a85a", "name": "97 env vars used in code but missing from .env.example", "shortDescription": {"text": "97 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_EMAIL`, `ADMIN_PHONE_NUMBER`, `BOOKING_API_SECRET`, `CHARLES_TELEGRAM_USER_ID`, `CRON_SECRET`, `DAY_BEFORE_REMINDER_HOUR_MT`, `DRIP_HMAC_SECRET`, `ECHO_BOOKING_URL` + 89 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-ef9ddb7f73f4831b", "name": "Dangling fetch: POST http://localhost:3000/api/leads (test-ringcentral-webhook.js:32)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3000/api/leads (test-ringcentral-webhook.js:32)"}, "fullDescription": {"text": "`test-ringcentral-webhook.js:32` calls `POST http://localhost:3000/api/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/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-c3690816e1d24eb5", "name": "Dangling fetch: POST http://localhost:3000/api/admin/ops/estimates (test_post.js:3)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3000/api/admin/ops/estimates (test_post.js:3)"}, "fullDescription": {"text": "`test_post.js:3` calls `POST http://localhost:3000/api/admin/ops/estimates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/admin/ops/estimates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd0eef7b1403aa0a", "name": "Dangling fetch: POST http://localhost:3000/api/admin/ops/bookings/create (scripts/book-katie-correct.mjs:47)", "shortDescription": {"text": "Dangling fetch: POST http://localhost:3000/api/admin/ops/bookings/create (scripts/book-katie-correct.mjs:47)"}, "fullDescription": {"text": "`scripts/book-katie-correct.mjs:47` calls `POST http://localhost:3000/api/admin/ops/bookings/create` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3000/api/admin/ops/bookings/create`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4651a13f30119dd", "name": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?${params2} (scripts/geocode-service-addresses.ts:76)", "shortDescription": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?${params2} (scripts/geocode-service-addresses.ts:76)"}, "fullDescription": {"text": "`scripts/geocode-service-addresses.ts:76` calls `GET https://nominatim.openstreetmap.org/search?${params2}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/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-36de195184b7aa22", "name": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/setWebhook (scripts/setup-harry-command-webhook.ts:24)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/setWebhook (scripts/setup-harry-command-webhook.ts:24)"}, "fullDescription": {"text": "`scripts/setup-harry-command-webhook.ts:24` calls `POST https://api.telegram.org/bot${BOT_TOKEN}/setWebhook` 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.telegram.org/bot/<p>/setwebhook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4cedd1bfc0a2ceb", "name": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:133)", "shortDescription": {"text": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:133)"}, "fullDescription": {"text": "`src/components/partners/partner-dashboard.tsx:133` calls `PATCH /api/partners/outbound-referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/partners/outbound-referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bc82bbd27d7b32d9", "name": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:175)", "shortDescription": {"text": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:175)"}, "fullDescription": {"text": "`src/components/partners/partner-dashboard.tsx:175` calls `PATCH /api/partners/outbound-referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/partners/outbound-referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c088e223e09e268a", "name": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:205)", "shortDescription": {"text": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:205)"}, "fullDescription": {"text": "`src/components/partners/partner-dashboard.tsx:205` calls `POST /api/partners/referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/partners/referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-641b75820a442c17", "name": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:247)", "shortDescription": {"text": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:247)"}, "fullDescription": {"text": "`src/components/partners/partner-dashboard.tsx:247` calls `POST /api/partners/referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/partners/referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56f5a576d44e1645", "name": "Dangling fetch: POST /api/tech/profile/photo (src/components/tech/tech-profile-photo-form.tsx:34)", "shortDescription": {"text": "Dangling fetch: POST /api/tech/profile/photo (src/components/tech/tech-profile-photo-form.tsx:34)"}, "fullDescription": {"text": "`src/components/tech/tech-profile-photo-form.tsx:34` calls `POST /api/tech/profile/photo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/profile/photo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7722c67f3b001bc", "name": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id} (src/components/tech/tech-job-detail.tsx:90)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id} (src/components/tech/tech-job-detail.tsx:90)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:90` calls `PATCH /api/tech/appointments/${appointment.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-522723c77d0ebede", "name": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id}/invoice (src/components/tech/tech-job-detail.tsx:131)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id}/invoice (src/components/tech/tech-job-detail.tsx:131)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:131` calls `PATCH /api/tech/appointments/${appointment.id}/invoice` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<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-feb7af69d6d3b6fe", "name": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/photos (src/components/tech/tech-job-detail.tsx:168)", "shortDescription": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/photos (src/components/tech/tech-job-detail.tsx:168)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:168` calls `POST /api/tech/appointments/${appointment.id}/photos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<p>/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-6dc5dfd1562f06e2", "name": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/signature (src/components/tech/tech-job-detail.tsx:210)", "shortDescription": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/signature (src/components/tech/tech-job-detail.tsx:210)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:210` calls `POST /api/tech/appointments/${appointment.id}/signature` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<p>/signature`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7158ba83be29340c", "name": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/payment (src/components/tech/tech-job-detail.tsx:239)", "shortDescription": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/payment (src/components/tech/tech-job-detail.tsx:239)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:239` calls `POST /api/tech/appointments/${appointment.id}/payment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<p>/payment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-293d216b50d5d546", "name": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/square-link (src/components/tech/tech-job-detail.tsx:265)", "shortDescription": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/square-link (src/components/tech/tech-job-detail.tsx:265)"}, "fullDescription": {"text": "`src/components/tech/tech-job-detail.tsx:265` calls `POST /api/tech/appointments/${appointment.id}/square-link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tech/appointments/<p>/square-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-abf2bcea88f414ac", "name": "Dangling fetch: GET /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:212)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:212)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:212` calls `GET /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d7ea6113c5260f8", "name": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:236)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:236)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:236` calls `PUT /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35500bc34a691101", "name": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:257)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:257)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:257` calls `PUT /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f182c336d5a84299", "name": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:287)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:287)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:287` calls `POST /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d16f81f397a47bd", "name": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:317)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:317)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:317` calls `POST /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27670c726f8e5458", "name": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:352)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:352)"}, "fullDescription": {"text": "`src/components/admin/reactivation-control-center.tsx:352` calls `POST /api/admin/comms/reactivation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/reactivation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c8e61e81f58d589", "name": "Dangling fetch: POST https://nominatim.openstreetmap.org/reverse?format=json&lat=${gpsCoordinates.lat}&lon=${gpsCoordina", "shortDescription": {"text": "Dangling fetch: POST https://nominatim.openstreetmap.org/reverse?format=json&lat=${gpsCoordinates.lat}&lon=${gpsCoordinates.lng} (src/components/admin/upload-form.tsx:321)"}, "fullDescription": {"text": "`src/components/admin/upload-form.tsx:321` calls `POST https://nominatim.openstreetmap.org/reverse?format=json&lat=${gpsCoordinates.lat}&lon=${gpsCoordinates.lng}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/nominatim.openstreetmap.org/reverse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-934690cfc4d3f503", "name": "Dangling fetch: POST /api/upload (src/components/admin/upload-form.tsx:430)", "shortDescription": {"text": "Dangling fetch: POST /api/upload (src/components/admin/upload-form.tsx:430)"}, "fullDescription": {"text": "`src/components/admin/upload-form.tsx:430` calls `POST /api/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-020dba7df30fae0a", "name": "Dangling fetch: GET /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:56)"}, "fullDescription": {"text": "`src/components/admin/george-henderson-dashboard.tsx:56` calls `GET /api/admin/george` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/george`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63ddb6f8587f886c", "name": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:91)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:91)"}, "fullDescription": {"text": "`src/components/admin/george-henderson-dashboard.tsx:91` calls `POST /api/admin/george` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/george`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ab94b48a51502f4", "name": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:123)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:123)"}, "fullDescription": {"text": "`src/components/admin/george-henderson-dashboard.tsx:123` calls `POST /api/admin/george` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/george`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dd6fa58a3e2c815", "name": "Dangling fetch: PATCH /api/conversations/${convo.id} (src/components/admin/conversations-view.tsx:176)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${convo.id} (src/components/admin/conversations-view.tsx:176)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:176` calls `PATCH /api/conversations/${convo.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ebccdd7201d2fb5", "name": "Dangling fetch: PATCH /api/admin/conversations/unread-count (src/components/admin/conversations-view.tsx:193)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/conversations/unread-count (src/components/admin/conversations-view.tsx:193)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:193` calls `PATCH /api/admin/conversations/unread-count` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/conversations/unread-count`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc12ef0ce0d21bb9", "name": "Dangling fetch: PATCH /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:229)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:229)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:229` calls `PATCH /api/conversations/${selectedConvo.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dfff289ba1cd1c0", "name": "Dangling fetch: POST /api/admin/conversations/${selectedConvo.id}/harry-draft (src/components/admin/conversations-view.t", "shortDescription": {"text": "Dangling fetch: POST /api/admin/conversations/${selectedConvo.id}/harry-draft (src/components/admin/conversations-view.tsx:254)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:254` calls `POST /api/admin/conversations/${selectedConvo.id}/harry-draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/conversations/<p>/harry-draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de14714e21847de0", "name": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/components/admin/conversations-view.tsx:309)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/components/admin/conversations-view.tsx:309)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:309` calls `PATCH /api/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21bf0dc10cbce36f", "name": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/conversations-view.tsx:339)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/conversations-view.tsx:339)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:339` calls `PATCH /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05b0515e01311a58", "name": "Dangling fetch: DELETE /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:390)", "shortDescription": {"text": "Dangling fetch: DELETE /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:390)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:390` calls `DELETE /api/conversations/${selectedConvo.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c3c8731580afb36", "name": "Dangling fetch: POST /api/conversations/bulk-delete (src/components/admin/conversations-view.tsx:449)", "shortDescription": {"text": "Dangling fetch: POST /api/conversations/bulk-delete (src/components/admin/conversations-view.tsx:449)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:449` calls `POST /api/conversations/bulk-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/bulk-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72c54de051419bca", "name": "Dangling fetch: POST /api/conversations/new (src/components/admin/conversations-view.tsx:483)", "shortDescription": {"text": "Dangling fetch: POST /api/conversations/new (src/components/admin/conversations-view.tsx:483)"}, "fullDescription": {"text": "`src/components/admin/conversations-view.tsx:483` calls `POST /api/conversations/new` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/new`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c366065a6dbc4ef", "name": "Dangling fetch: DELETE /api/jobs/${jobId}/delete (src/components/admin/draft-jobs-list.tsx:49)", "shortDescription": {"text": "Dangling fetch: DELETE /api/jobs/${jobId}/delete (src/components/admin/draft-jobs-list.tsx:49)"}, "fullDescription": {"text": "`src/components/admin/draft-jobs-list.tsx:49` calls `DELETE /api/jobs/${jobId}/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-deaf49e26a2efb87", "name": "Dangling fetch: POST /api/twilio/voice-token (src/components/admin/softphone.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/twilio/voice-token (src/components/admin/softphone.tsx:153)"}, "fullDescription": {"text": "`src/components/admin/softphone.tsx:153` calls `POST /api/twilio/voice-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/twilio/voice-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-3e21bfa207f07ad6", "name": "Dangling fetch: POST /api/generate-description (src/components/admin/job-editor.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/generate-description (src/components/admin/job-editor.tsx:52)"}, "fullDescription": {"text": "`src/components/admin/job-editor.tsx:52` calls `POST /api/generate-description` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate-description`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-faf0351e6116e18e", "name": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:109)", "shortDescription": {"text": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:109)"}, "fullDescription": {"text": "`src/components/admin/job-editor.tsx:109` calls `PATCH /api/jobs/${job.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c3bfae05bc27848", "name": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:172)", "shortDescription": {"text": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:172)"}, "fullDescription": {"text": "`src/components/admin/job-editor.tsx:172` calls `PATCH /api/jobs/${job.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8788cc1ced6d4ecf", "name": "Dangling fetch: POST /api/tools/combine (src/components/admin/before-after-combiner.tsx:86)", "shortDescription": {"text": "Dangling fetch: POST /api/tools/combine (src/components/admin/before-after-combiner.tsx:86)"}, "fullDescription": {"text": "`src/components/admin/before-after-combiner.tsx:86` calls `POST /api/tools/combine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tools/combine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc68d8b9ea39018d", "name": "Dangling fetch: GET /api/admin/conversations/unread-count (src/components/admin/mobile-bottom-nav.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/conversations/unread-count (src/components/admin/mobile-bottom-nav.tsx:25)"}, "fullDescription": {"text": "`src/components/admin/mobile-bottom-nav.tsx:25` calls `GET /api/admin/conversations/unread-count` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/conversations/unread-count`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-069a51f35866d11a", "name": "Dangling fetch: GET /api/admin/ranger?limit=75 (src/components/admin/ranger-dashboard.tsx:169)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ranger?limit=75 (src/components/admin/ranger-dashboard.tsx:169)"}, "fullDescription": {"text": "`src/components/admin/ranger-dashboard.tsx:169` calls `GET /api/admin/ranger?limit=75` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ranger`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a67fabd2d03b0e16", "name": "Dangling fetch: POST /api/admin/ranger/action (src/components/admin/ranger-dashboard.tsx:197)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ranger/action (src/components/admin/ranger-dashboard.tsx:197)"}, "fullDescription": {"text": "`src/components/admin/ranger-dashboard.tsx:197` calls `POST /api/admin/ranger/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/ranger/action`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8200e4880523f74", "name": "Dangling fetch: GET /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:78)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:78` calls `GET /api/admin/harry/control` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/control`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0eea2275c13795c8", "name": "Dangling fetch: GET /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:79)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:79` calls `GET /api/admin/harry/profiles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/profiles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6fbceb8c439062e", "name": "Dangling fetch: GET /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:80)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:80` calls `GET /api/admin/harry/knowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/knowledge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84def7edb7ac9d8b", "name": "Dangling fetch: PUT /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:133)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:133)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:133` calls `PUT /api/admin/harry/control` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/control`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19a9074827873621", "name": "Dangling fetch: PUT /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:161)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:161)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:161` calls `PUT /api/admin/harry/profiles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/profiles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbf97456cc343322", "name": "Dangling fetch: PUT /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:186)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:186)"}, "fullDescription": {"text": "`src/components/admin/harry-control-dashboard.tsx:186` calls `PUT /api/admin/harry/knowledge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/knowledge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1663bc52da01598d", "name": "Dangling fetch: POST /api/admin/referrals (src/components/admin/admin-partners-view.tsx:146)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/referrals (src/components/admin/admin-partners-view.tsx:146)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:146` calls `POST /api/admin/referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6b858640e92610e", "name": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:196)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:196)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:196` calls `PATCH /api/admin/partners` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/partners`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfd7104a9d191a67", "name": "Dangling fetch: POST /api/admin/outbound-referrals (src/components/admin/admin-partners-view.tsx:231)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/outbound-referrals (src/components/admin/admin-partners-view.tsx:231)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:231` calls `POST /api/admin/outbound-referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/outbound-referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-288d7c70a25db6e2", "name": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:270)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:270)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:270` calls `PATCH /api/admin/partners` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/partners`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c7bec13a63c07f7", "name": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:298)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:298)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:298` calls `PATCH /api/admin/partners` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/partners`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2767fd2e5ea51a0", "name": "Dangling fetch: DELETE /api/admin/referrals?id=${referralId} (src/components/admin/admin-partners-view.tsx:322)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/referrals?id=${referralId} (src/components/admin/admin-partners-view.tsx:322)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:322` calls `DELETE /api/admin/referrals?id=${referralId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45209b935c0fdf6e", "name": "Dangling fetch: PATCH /api/admin/referrals (src/components/admin/admin-partners-view.tsx:341)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/referrals (src/components/admin/admin-partners-view.tsx:341)"}, "fullDescription": {"text": "`src/components/admin/admin-partners-view.tsx:341` calls `PATCH /api/admin/referrals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/referrals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10cd95011d81eefd", "name": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/operations-dashboard.tsx:265)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/operations-dashboard.tsx:265)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:265` calls `GET /api/admin/ops/bootstrap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/bootstrap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66e212cd202065cc", "name": "Dangling fetch: PATCH /api/admin/ops/services/${service.id} (src/components/admin/operations-dashboard.tsx:493)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/services/${service.id} (src/components/admin/operations-dashboard.tsx:493)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:493` calls `PATCH /api/admin/ops/services/${service.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/ops/services/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6ab9c3f87c15b96", "name": "Dangling fetch: POST /api/admin/ops/services/reorder (src/components/admin/operations-dashboard.tsx:576)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/services/reorder (src/components/admin/operations-dashboard.tsx:576)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:576` calls `POST /api/admin/ops/services/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services/reorder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0497c178e2bb6697", "name": "Dangling fetch: POST /api/admin/ops/availability (src/components/admin/operations-dashboard.tsx:622)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/availability (src/components/admin/operations-dashboard.tsx:622)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:622` calls `POST /api/admin/ops/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-507b46861d783d3a", "name": "Dangling fetch: POST /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/operations-dashboard.tsx:669)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/operations-dashboard.tsx:669)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:669` calls `POST /api/admin/ops/slots?${searchParams.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/ops/slots`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e84415aee88ac178", "name": "Dangling fetch: PATCH /api/admin/ops/appointments (src/components/admin/operations-dashboard.tsx:779)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments (src/components/admin/operations-dashboard.tsx:779)"}, "fullDescription": {"text": "`src/components/admin/operations-dashboard.tsx:779` calls `PATCH /api/admin/ops/appointments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a30238afc3a2197", "name": "Dangling fetch: GET /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:43)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:43` calls `GET /api/admin/agent-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/agent-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-726d9dd2b2ed81e5", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:68)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:68` calls `POST /api/admin/agent-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/agent-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-5f2332c1880488c4", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:90)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:90)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:90` calls `POST /api/admin/agent-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/agent-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-ac665a2196b2df3e", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:110)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:110` calls `POST /api/admin/agent-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/agent-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-ca9ed82a63a7ae75", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:138)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:138)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:138` calls `POST /api/admin/agent-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/agent-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-3dfc76a64a215f72", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:162)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:162)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:162` calls `POST /api/admin/agent-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/agent-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-af5ab48c0a0a96ea", "name": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:172)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:172)"}, "fullDescription": {"text": "`src/components/admin/ops/agent-api-settings.tsx:172` calls `POST /api/admin/agent-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/agent-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-f336afb7cd9df94e", "name": "Dangling fetch: GET /api/admin/ops/gps/live (src/components/admin/ops/DispatchMap.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/gps/live (src/components/admin/ops/DispatchMap.tsx:64)"}, "fullDescription": {"text": "`src/components/admin/ops/DispatchMap.tsx:64` calls `GET /api/admin/ops/gps/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/ops/gps/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-97f11a16f9edca98", "name": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:321)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:321)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:321` calls `POST /api/admin/ops/appointments/${apptId}/gps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/gps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c5efdeefe044b04", "name": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:397)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:397)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:397` calls `POST /api/admin/ops/appointments/${apptId}/gps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/gps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e14779aca7c9787", "name": "Dangling fetch: GET /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:428)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:428)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:428` calls `GET /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63054d995425cbfb", "name": "Dangling fetch: GET /api/admin/ops/appointments/${appt.id}/photos (src/components/admin/ops/invoice-detail.tsx:461)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appt.id}/photos (src/components/admin/ops/invoice-detail.tsx:461)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:461` calls `GET /api/admin/ops/appointments/${appt.id}/photos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/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-435e91eb6d9a944e", "name": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/invoice-detail.tsx:503)", "shortDescription": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/invoice-detail.tsx:503)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:503` calls `GET /api/public/lead-sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/lead-sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d90926c129eecd2b", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/invoice-detail.tsx:581)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/invoice-detail.tsx:581)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:581` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6a395f9d1c8df57", "name": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:595)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:595)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:595` calls `PATCH /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0235b278d004bff9", "name": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:667)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:667)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:667` calls `PATCH /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d911a503667f3c7", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/invoice-detail.tsx:721)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/invoice-detail.tsx:721)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:721` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9560ad65cfb352b", "name": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId} (src/components/admin/ops/invoice-detail.tsx:790)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId} (src/components/admin/ops/invoice-detail.tsx:790)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:790` calls `DELETE /api/admin/ops/appointments/${apptId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3571e6d2f0230ea1", "name": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:814)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:814)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:814` calls `POST /api/admin/ops/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/ops/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-4c4062154f1aea67", "name": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:855)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:855)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:855` calls `PATCH /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9525219a572080be", "name": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:873)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:873)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:873` calls `PATCH /api/admin/ops/invoices/${invoiceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76309b201ebc2693", "name": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/photos (src/components/admin/ops/invoice-detail.tsx:893)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/photos (src/components/admin/ops/invoice-detail.tsx:893)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:893` calls `POST /api/admin/ops/appointments/${apptId}/photos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/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-6ee11a88fbd8c8f7", "name": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId}/photos?photoId=${photoId} (src/components/admin/ops/invoice", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId}/photos?photoId=${photoId} (src/components/admin/ops/invoice-detail.tsx:912)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:912` calls `DELETE /api/admin/ops/appointments/${apptId}/photos?photoId=${photoId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/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-5344ae31b08497a4", "name": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:966)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:966)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:966` calls `POST /api/admin/ops/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/ops/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-8f339ff9b6202f76", "name": "Dangling fetch: POST /api/generate-description (src/components/admin/ops/invoice-detail.tsx:1037)", "shortDescription": {"text": "Dangling fetch: POST /api/generate-description (src/components/admin/ops/invoice-detail.tsx:1037)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:1037` calls `POST /api/generate-description` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate-description`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1abf3fd7f9a81abe", "name": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/record-stats (src/components/admin/ops/invoice-detail.tsx:1078", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/record-stats (src/components/admin/ops/invoice-detail.tsx:1078)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:1078` calls `POST /api/admin/ops/invoices/${invoiceId}/record-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>/record-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-bbe8cc52d7c53eca", "name": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/publish (src/components/admin/ops/invoice-detail.tsx:1141)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/publish (src/components/admin/ops/invoice-detail.tsx:1141)"}, "fullDescription": {"text": "`src/components/admin/ops/invoice-detail.tsx:1141` calls `POST /api/admin/ops/invoices/${invoiceId}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/invoices/<p>/publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6d58f1a6044de4a", "name": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/operations-settings.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/operations-settings.tsx:90)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:90` calls `GET /api/admin/ops/staff` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/staff`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f400a3c4aff536e", "name": "Dangling fetch: POST /api/admin/ops/staff/photo (src/components/admin/ops/operations-settings.tsx:114)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/staff/photo (src/components/admin/ops/operations-settings.tsx:114)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:114` calls `POST /api/admin/ops/staff/photo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/staff/photo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad65ccd9b162c4fc", "name": "Dangling fetch: GET /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:269)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:269)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:269` calls `GET /api/admin/ops/communications/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/communications/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6364b85b55af8de", "name": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:272)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:272)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:272` calls `GET /api/admin/ops/communications/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/ops/communications/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-4f07987839978d2f", "name": "Dangling fetch: GET /api/admin/comms/email-log?limit=40 (src/components/admin/ops/operations-settings.tsx:275)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/comms/email-log?limit=40 (src/components/admin/ops/operations-settings.tsx:275)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:275` calls `GET /api/admin/comms/email-log?limit=40` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/email-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ec18ce67e3c81e1", "name": "Dangling fetch: POST /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:327)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:327)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:327` calls `POST /api/admin/ops/communications/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/communications/queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15deb2f2619cd104", "name": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:374)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:374)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-settings.tsx:374` calls `PUT /api/admin/ops/communications/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/ops/communications/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-88d2dcc73ae490b3", "name": "Dangling fetch: GET /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:126)"}, "fullDescription": {"text": "`src/components/admin/ops/drip-campaigns-tab.tsx:126` calls `GET /api/admin/ops/drip-campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/drip-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-f2b25f1ccfcab76f", "name": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:156)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:156)"}, "fullDescription": {"text": "`src/components/admin/ops/drip-campaigns-tab.tsx:156` calls `POST /api/admin/ops/drip-campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/drip-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-c401c1b5a0daf166", "name": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:182)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:182)"}, "fullDescription": {"text": "`src/components/admin/ops/drip-campaigns-tab.tsx:182` calls `POST /api/admin/ops/drip-campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/drip-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-0d9f434ea46c25ca", "name": "Dangling fetch: PUT /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:204)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:204)"}, "fullDescription": {"text": "`src/components/admin/ops/drip-campaigns-tab.tsx:204` calls `PUT /api/admin/ops/drip-campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/drip-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-e5cc70add33e0798", "name": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${date} (src/components/admin/ops/TimesheetsView.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${date} (src/components/admin/ops/TimesheetsView.tsx:71)"}, "fullDescription": {"text": "`src/components/admin/ops/TimesheetsView.tsx:71` calls `GET /api/admin/ops/gps/timesheets?date=${date}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/timesheets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0d331a4588c96e6", "name": "Dangling fetch: POST /api/admin/ops/gps/shifts/${row.shiftId}/complete (src/components/admin/ops/TimesheetsView.tsx:201)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/${row.shiftId}/complete (src/components/admin/ops/TimesheetsView.tsx:201)"}, "fullDescription": {"text": "`src/components/admin/ops/TimesheetsView.tsx:201` calls `POST /api/admin/ops/gps/shifts/${row.shiftId}/complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/shifts/<p>/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-872e70a8c699d484", "name": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${today} (src/components/admin/ops/MyDayView.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${today} (src/components/admin/ops/MyDayView.tsx:62)"}, "fullDescription": {"text": "`src/components/admin/ops/MyDayView.tsx:62` calls `GET /api/admin/ops/gps/timesheets?date=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/timesheets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5684481f127a1978", "name": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(query.trim())} (src/components/admin/ops/customers-d", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(query.trim())} (src/components/admin/ops/customers-directory.tsx:142)"}, "fullDescription": {"text": "`src/components/admin/ops/customers-directory.tsx:142` calls `GET /api/admin/ops/customers?q=${encodeURIComponent(query.trim())}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/customers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d8b1db2430f961b", "name": "Dangling fetch: PATCH /api/admin/ops/customers/${customerId} (src/components/admin/ops/customers-directory.tsx:205)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/customers/${customerId} (src/components/admin/ops/customers-directory.tsx:205)"}, "fullDescription": {"text": "`src/components/admin/ops/customers-directory.tsx:205` calls `PATCH /api/admin/ops/customers/${customerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/customers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3aad41ede54ac5d4", "name": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:42)"}, "fullDescription": {"text": "`src/components/admin/ops/communications-center.tsx:42` calls `GET /api/admin/ops/communications/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/ops/communications/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-03690dc7b170a870", "name": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:79)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:79)"}, "fullDescription": {"text": "`src/components/admin/ops/communications-center.tsx:79` calls `PUT /api/admin/ops/communications/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/ops/communications/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-fbb0cc19f930bc2d", "name": "Dangling fetch: POST /api/admin/ops/communications/day-before-reminders (src/components/admin/ops/communications-center.", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/communications/day-before-reminders (src/components/admin/ops/communications-center.tsx:115)"}, "fullDescription": {"text": "`src/components/admin/ops/communications-center.tsx:115` calls `POST /api/admin/ops/communications/day-before-reminders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/communications/day-before-reminders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1fbfc36c6e80e8a", "name": "Dangling fetch: GET /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:205)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:205)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:205` calls `GET /api/admin/ops/recurring` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-866830e3b426d5c7", "name": "Dangling fetch: GET /api/admin/ops/recurring/${id} (src/components/admin/ops/recurring-manager.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/recurring/${id} (src/components/admin/ops/recurring-manager.tsx:221)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:221` calls `GET /api/admin/ops/recurring/${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/ops/recurring/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ff44c782a4535e7", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:518)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:518)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:518` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a6889ade7a0aaed", "name": "Dangling fetch: POST /api/admin/ops/recurring/generate-monthly-invoice (src/components/admin/ops/recurring-manager.tsx:5", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/recurring/generate-monthly-invoice (src/components/admin/ops/recurring-manager.tsx:537)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:537` calls `POST /api/admin/ops/recurring/generate-monthly-invoice` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring/generate-monthly-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-159863ecd9106f69", "name": "Dangling fetch: POST /api/admin/ops/recurring/add-batch-job (src/components/admin/ops/recurring-manager.tsx:603)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/recurring/add-batch-job (src/components/admin/ops/recurring-manager.tsx:603)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:603` calls `POST /api/admin/ops/recurring/add-batch-job` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring/add-batch-job`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08f0c0fe545230fc", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-manager.tsx:688)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-manager.tsx:688)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:688` calls `PATCH /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-406f5a608ae617dc", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:1427)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:1427)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:1427` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20a027ea3f9ddcd4", "name": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1527)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1527)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:1527` calls `POST /api/admin/ops/recurring` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8b6ab5ff36e9d4e", "name": "Dangling fetch: PATCH /api/admin/ops/recurring/${initialData.id} (src/components/admin/ops/recurring-manager.tsx:1608)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/recurring/${initialData.id} (src/components/admin/ops/recurring-manager.tsx:1608)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:1608` calls `PATCH /api/admin/ops/recurring/${initialData.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/ops/recurring/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95dd2d46bb8b5dea", "name": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1626)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1626)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:1626` calls `POST /api/admin/ops/recurring` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9d42ebe5033a7be", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:2393)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:2393)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2393` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab6be0b17e03809a", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2407", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2407)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2407` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4efee90a1e9c8f08", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2437", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2437)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2437` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0f9fa530aadb8b4", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2458", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2458)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2458` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a3474efc90181fd", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2477", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2477)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2477` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85c47e1b8b2c37a4", "name": "Dangling fetch: PATCH /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2965)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2965)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2965` calls `PATCH /api/admin/ops/recurring/${template.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/ops/recurring/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86df173c522ca711", "name": "Dangling fetch: POST /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2982)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2982)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2982` calls `POST /api/admin/ops/recurring/${template.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/ops/recurring/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3881703226e531fd", "name": "Dangling fetch: DELETE /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2999)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2999)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-manager.tsx:2999` calls `DELETE /api/admin/ops/recurring/${template.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/ops/recurring/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24475ad08bb23442", "name": "Dangling fetch: GET /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:227)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:227)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:227` calls `GET /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c6e5c2fc5d61110", "name": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/appointment-detail.tsx:269)", "shortDescription": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/appointment-detail.tsx:269)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:269` calls `GET /api/public/lead-sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/lead-sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5bbb406e225736b", "name": "Dangling fetch: GET /api/admin/ops/appointments/${appointment.id}/recurring-link-options (src/components/admin/ops/appoi", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appointment.id}/recurring-link-options (src/components/admin/ops/appointment-detail.tsx:296)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:296` calls `GET /api/admin/ops/appointments/${appointment.id}/recurring-link-options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>/recurring-link-options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b28b5ffa4e65126", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:485)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:485)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:485` calls `PATCH /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e962f5fbcab6bd0", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:518)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:518)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:518` calls `PATCH /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28fa181437d1066a", "name": "Dangling fetch: DELETE /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:587", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:587)"}, "fullDescription": {"text": "`src/components/admin/ops/appointment-detail.tsx:587` calls `DELETE /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b12431cbef33f41", "name": "Dangling fetch: GET /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:300)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:300)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:300` calls `GET /api/admin/ops/estimates/${estimateId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-742987e25b583f4e", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/estimate-detail.tsx:366)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/estimate-detail.tsx:366)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:366` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-baf7589f31e4030c", "name": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:602)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:602)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:602` calls `PATCH /api/admin/ops/estimates/${estimateId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-a70a5d5b8d056569", "name": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:643)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:643)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:643` calls `PATCH /api/admin/ops/estimates/${estimateId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-98f7e438c89c99d7", "name": "Dangling fetch: DELETE /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:672)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:672)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:672` calls `DELETE /api/admin/ops/estimates/${estimateId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-de8ac315fa5cc523", "name": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/convert (src/components/admin/ops/estimate-detail.tsx:693)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/convert (src/components/admin/ops/estimate-detail.tsx:693)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:693` calls `POST /api/admin/ops/estimates/${estimateId}/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/ops/estimates/<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-034f6b31ff996b67", "name": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/send-email (src/components/admin/ops/estimate-detail.tsx:737", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/send-email (src/components/admin/ops/estimate-detail.tsx:737)"}, "fullDescription": {"text": "`src/components/admin/ops/estimate-detail.tsx:737` calls `POST /api/admin/ops/estimates/${estimateId}/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: `/admin/ops/estimates/<p>/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-a79961619124cf42", "name": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${startDate}&end_date=${endDate} (src/components/admin/ops/operat", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${startDate}&end_date=${endDate} (src/components/admin/ops/operations-schedule.tsx:838)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:838` calls `GET /api/admin/ops/schedule?start_date=${startDate}&end_date=${endDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/schedule`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c84f4e1ed6d60902", "name": "Dangling fetch: PUT /api/admin/ops/staff-availability (src/components/admin/ops/operations-schedule.tsx:945)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/ops/staff-availability (src/components/admin/ops/operations-schedule.tsx:945)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:945` calls `PUT /api/admin/ops/staff-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/staff-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d5d99ec25bdbb68", "name": "Dangling fetch: PUT /api/admin/ops/availability (src/components/admin/ops/operations-schedule.tsx:1004)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/ops/availability (src/components/admin/ops/operations-schedule.tsx:1004)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1004` calls `PUT /api/admin/ops/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf13f7f793be9e51", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${session.appointmentId} (src/components/admin/ops/operations-schedule", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${session.appointmentId} (src/components/admin/ops/operations-schedule.tsx:1218)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1218` calls `PATCH /api/admin/ops/appointments/${session.appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cc3b80e1239ade7", "name": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1359)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1359)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1359` calls `PATCH /api/admin/ops/events/${session.eventId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86a7ee5a5b5c8cac", "name": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1451)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1451)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1451` calls `PATCH /api/admin/ops/events/${session.eventId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69816c5d971abeac", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/operations-schedule.tsx:151", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/operations-schedule.tsx:1513)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1513` calls `PATCH /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cf1a7e66968e3cd", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:17", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:1730)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1730` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d4391fd609f321f", "name": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/operations-schedule.t", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/operations-schedule.tsx:1755)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1755` calls `POST /api/admin/ops/appointments/${appointmentId}/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/ops/appointments/<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-4aa32e1366637fd7", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:17", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:1776)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1776` calls `PATCH /api/admin/ops/appointments/${appointment.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/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7415942dddb9122", "name": "Dangling fetch: POST /api/admin/ops/events (src/components/admin/ops/operations-schedule.tsx:1828)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/events (src/components/admin/ops/operations-schedule.tsx:1828)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1828` calls `POST /api/admin/ops/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-04964ed239393761", "name": "Dangling fetch: PATCH /api/admin/ops/events/${editingEvent.id} (src/components/admin/ops/operations-schedule.tsx:1878)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${editingEvent.id} (src/components/admin/ops/operations-schedule.tsx:1878)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1878` calls `PATCH /api/admin/ops/events/${editingEvent.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03f19055f4b86f00", "name": "Dangling fetch: DELETE /api/admin/ops/events/${id} (src/components/admin/ops/operations-schedule.tsx:1905)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/events/${id} (src/components/admin/ops/operations-schedule.tsx:1905)"}, "fullDescription": {"text": "`src/components/admin/ops/operations-schedule.tsx:1905` calls `DELETE /api/admin/ops/events/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c52335ecee937b4", "name": "Dangling fetch: GET /api/admin/ops/recurring/visit/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/recurring/visit/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx:188)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-visit-detail.tsx:188` calls `GET /api/admin/ops/recurring/visit/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/recurring/visit/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6641f215a79451c1", "name": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-visit-detail.tsx:235)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-visit-detail.tsx:235)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-visit-detail.tsx:235` calls `GET /api/admin/ops/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f17e9d2f2ecf4c5", "name": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx:", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx:256)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-visit-detail.tsx:256` calls `PATCH /api/admin/ops/appointments/${appointmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1be65374b2d86f00", "name": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/recurring-visit-detai", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/recurring-visit-detail.tsx:332)"}, "fullDescription": {"text": "`src/components/admin/ops/recurring-visit-detail.tsx:332` calls `POST /api/admin/ops/appointments/${appointmentId}/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/ops/appointments/<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-3b2a0653b8204b59", "name": "Dangling fetch: GET /api/admin/quickbooks/status (src/components/admin/ops/quickbooks-status.tsx:153)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/quickbooks/status (src/components/admin/ops/quickbooks-status.tsx:153)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:153` calls `GET /api/admin/quickbooks/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a368c6d09f82a284", "name": "Dangling fetch: POST /api/admin/quickbooks/toggle (src/components/admin/ops/quickbooks-status.tsx:171)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/quickbooks/toggle (src/components/admin/ops/quickbooks-status.tsx:171)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:171` calls `POST /api/admin/quickbooks/toggle` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/toggle`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68bbe1f2dcf4f612", "name": "Dangling fetch: POST /api/admin/quickbooks/disconnect (src/components/admin/ops/quickbooks-status.tsx:190)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/quickbooks/disconnect (src/components/admin/ops/quickbooks-status.tsx:190)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:190` calls `POST /api/admin/quickbooks/disconnect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/disconnect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9db9eae4b846364c", "name": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:210)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:210)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:210` calls `POST /api/admin/quickbooks/retry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/retry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36f82c241873a782", "name": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:240)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:240)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:240` calls `POST /api/admin/quickbooks/retry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/retry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe9a398fdf290d9e", "name": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:277)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:277)"}, "fullDescription": {"text": "`src/components/admin/ops/quickbooks-status.tsx:277` calls `POST /api/admin/quickbooks/retry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/quickbooks/retry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-beba748ccb5885ad", "name": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/ops/new-job-workspace.tsx:329)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/ops/new-job-workspace.tsx:329)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:329` calls `GET /api/admin/ops/bootstrap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/bootstrap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-217869766960c5cc", "name": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${today}&end_date=${today} (src/components/admin/ops/new-job-work", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${today}&end_date=${today} (src/components/admin/ops/new-job-workspace.tsx:352)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:352` calls `GET /api/admin/ops/schedule?start_date=${today}&end_date=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/schedule`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c7fdd7f48c96b53", "name": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/new-job-workspace.tsx:382)", "shortDescription": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/new-job-workspace.tsx:382)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:382` calls `GET /api/public/lead-sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/lead-sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0bad3b299a5fc3f", "name": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${formatDateKey(weekStart)}&end_date=${formatDateKey(weekEnd)} (s", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${formatDateKey(weekStart)}&end_date=${formatDateKey(weekEnd)} (src/components/admin/ops/new-job-workspace.tsx:402)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:402` calls `GET /api/admin/ops/schedule?start_date=${formatDateKey(weekStart)}&end_date=${formatDateKey(weekEnd)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/schedule`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8963464ebda761fc", "name": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(customerQuery)} (src/components/admin/ops/new-job-wo", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(customerQuery)} (src/components/admin/ops/new-job-workspace.tsx:432)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:432` calls `GET /api/admin/ops/customers?q=${encodeURIComponent(customerQuery)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/customers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a51fc2312a2f2e04", "name": "Dangling fetch: POST /api/admin/ops/appointments (src/components/admin/ops/new-job-workspace.tsx:730)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/appointments (src/components/admin/ops/new-job-workspace.tsx:730)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:730` calls `POST /api/admin/ops/appointments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/appointments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-067a7a0720021798", "name": "Dangling fetch: GET /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/ops/new-job-workspace.tsx:768)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/ops/new-job-workspace.tsx:768)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:768` calls `GET /api/admin/ops/slots?${searchParams.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/ops/slots`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e786323a12c3c8b", "name": "Dangling fetch: GET /api/admin/ops/address-suggest?q=${encodeURIComponent(q)} (src/components/admin/ops/new-job-workspac", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/address-suggest?q=${encodeURIComponent(q)} (src/components/admin/ops/new-job-workspace.tsx:1322)"}, "fullDescription": {"text": "`src/components/admin/ops/new-job-workspace.tsx:1322` calls `GET /api/admin/ops/address-suggest?q=${encodeURIComponent(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/ops/address-suggest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea950ff3e225d327", "name": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:97)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:97` calls `GET /api/admin/ops/staff` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/staff`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b73c233c5c436ddb", "name": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${editingEntryId} (src/components/admin/ops/PayrollTimesh", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${editingEntryId} (src/components/admin/ops/PayrollTimesheetsView.tsx:234)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:234` calls `PATCH /api/admin/ops/payroll/timesheet-entries/${editingEntryId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/payroll/timesheet-entries/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91c0c2e197bc19fb", "name": "Dangling fetch: POST /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:273)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:273)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:273` calls `POST /api/admin/ops/staff` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/staff`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-832f298f34c66139", "name": "Dangling fetch: POST /api/admin/ops/payroll/timesheet-entries (src/components/admin/ops/PayrollTimesheetsView.tsx:307)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/payroll/timesheet-entries (src/components/admin/ops/PayrollTimesheetsView.tsx:307)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:307` calls `POST /api/admin/ops/payroll/timesheet-entries` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/payroll/timesheet-entries`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94a69bf90263dd67", "name": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsVi", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsView.tsx:344)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:344` calls `PATCH /api/admin/ops/payroll/timesheet-entries/${entry.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/ops/payroll/timesheet-entries/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cdbff14bfbdec79", "name": "Dangling fetch: DELETE /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsV", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsView.tsx:368)"}, "fullDescription": {"text": "`src/components/admin/ops/PayrollTimesheetsView.tsx:368` calls `DELETE /api/admin/ops/payroll/timesheet-entries/${entry.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/ops/payroll/timesheet-entries/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c02ce472a4b632f6", "name": "Dangling fetch: GET /api/public/jobs?limit=24 (src/components/nfc/recent-jobs-carousel.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/public/jobs?limit=24 (src/components/nfc/recent-jobs-carousel.tsx:43)"}, "fullDescription": {"text": "`src/components/nfc/recent-jobs-carousel.tsx:43` calls `GET /api/public/jobs?limit=24` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86bed86edd86a7e7", "name": "Dangling fetch: GET /api/public/availability?${params} (src/components/nfc/NfcBookingWidget.tsx:510)", "shortDescription": {"text": "Dangling fetch: GET /api/public/availability?${params} (src/components/nfc/NfcBookingWidget.tsx:510)"}, "fullDescription": {"text": "`src/components/nfc/NfcBookingWidget.tsx:510` calls `GET /api/public/availability?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d7b10e532abb2b9", "name": "Dangling fetch: GET /api/public/availability?date=${date}&required_minutes=${requiredMinutes} (src/components/nfc/NfcBoo", "shortDescription": {"text": "Dangling fetch: GET /api/public/availability?date=${date}&required_minutes=${requiredMinutes} (src/components/nfc/NfcBookingWidget.tsx:539)"}, "fullDescription": {"text": "`src/components/nfc/NfcBookingWidget.tsx:539` calls `GET /api/public/availability?date=${date}&required_minutes=${requiredMinutes}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b14fb79fd20f323b", "name": "Dangling fetch: GET /api/public/services (src/components/nfc/NfcBookingWidget.tsx:749)", "shortDescription": {"text": "Dangling fetch: GET /api/public/services (src/components/nfc/NfcBookingWidget.tsx:749)"}, "fullDescription": {"text": "`src/components/nfc/NfcBookingWidget.tsx:749` calls `GET /api/public/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-917f4223c91167a5", "name": "Dangling fetch: POST /api/book (src/components/nfc/NfcBookingWidget.tsx:984)", "shortDescription": {"text": "Dangling fetch: POST /api/book (src/components/nfc/NfcBookingWidget.tsx:984)"}, "fullDescription": {"text": "`src/components/nfc/NfcBookingWidget.tsx:984` calls `POST /api/book` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/book`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3d96d5a0ed360ff", "name": "Dangling fetch: POST /api/review/track (src/app/review/[partnerId]/page.tsx:16)", "shortDescription": {"text": "Dangling fetch: POST /api/review/track (src/app/review/[partnerId]/page.tsx:16)"}, "fullDescription": {"text": "`src/app/review/[partnerId]/page.tsx:16` calls `POST /api/review/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/review/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-7b34b198b05b5ff4", "name": "Dangling fetch: GET https://ipapi.co/${ip}/json/ (src/app/api/review/track/route.ts:7)", "shortDescription": {"text": "Dangling fetch: GET https://ipapi.co/${ip}/json/ (src/app/api/review/track/route.ts:7)"}, "fullDescription": {"text": "`src/app/api/review/track/route.ts:7` calls `GET https://ipapi.co/${ip}/json/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ipapi.co/<p>/json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7590e1e6234a0613", "name": "Dangling fetch: POST https://api.telegram.org/bot${token}/answerCallbackQuery (src/app/api/telegram/ranger-command/route", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/answerCallbackQuery (src/app/api/telegram/ranger-command/route.ts:70)"}, "fullDescription": {"text": "`src/app/api/telegram/ranger-command/route.ts:70` calls `POST https://api.telegram.org/bot${token}/answerCallbackQuery` 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.telegram.org/bot/<p>/answercallbackquery`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e5dd64814eaadfd", "name": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json (src/app/api/admin/george/ro", "shortDescription": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json (src/app/api/admin/george/route.ts:798)"}, "fullDescription": {"text": "`src/app/api/admin/george/route.ts:798` calls `POST https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json` 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.twilio.com/2010-04-01/accounts/<p>/messages.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0624441cdb5948a1", "name": "Dangling fetch: POST /api/tap/track (src/app/sightings/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/sightings/page.tsx:78)"}, "fullDescription": {"text": "`src/app/sightings/page.tsx:78` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-345cd413fc843b50", "name": "Dangling fetch: POST /api/sightings (src/app/sightings/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: POST /api/sightings (src/app/sightings/page.tsx:281)"}, "fullDescription": {"text": "`src/app/sightings/page.tsx:281` calls `POST /api/sightings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f072832923cf3e5", "name": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/sightings/page.tsx:430)", "shortDescription": {"text": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/sightings/page.tsx:430)"}, "fullDescription": {"text": "`src/app/sightings/page.tsx:430` calls `POST /api/sightings/${sightingId}/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings/<p>/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82297257c2203d7e", "name": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:45)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:45)"}, "fullDescription": {"text": "`src/app/tap/page.tsx:45` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-9feaa624a645c009", "name": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:97)"}, "fullDescription": {"text": "`src/app/tap/page.tsx:97` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-22b25c0e0c56b4ef", "name": "Dangling fetch: POST /api/admin/radar/keywords (src/app/admin/radar/page.tsx:217)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/radar/keywords (src/app/admin/radar/page.tsx:217)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:217` calls `POST /api/admin/radar/keywords` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/keywords`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-760a7c429a631bb5", "name": "Dangling fetch: DELETE /api/admin/radar/keywords/${id} (src/app/admin/radar/page.tsx:240)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/radar/keywords/${id} (src/app/admin/radar/page.tsx:240)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:240` calls `DELETE /api/admin/radar/keywords/${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/radar/keywords/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c160f9159b13556", "name": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:255)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:255)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:255` calls `POST /api/admin/radar/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38895f45a8a4c71a", "name": "Dangling fetch: DELETE /api/admin/radar/domains/${id} (src/app/admin/radar/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/radar/domains/${id} (src/app/admin/radar/page.tsx:281)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:281` calls `DELETE /api/admin/radar/domains/${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/radar/domains/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aea43cc266686c08", "name": "Dangling fetch: POST /api/admin/radar/discover (src/app/admin/radar/page.tsx:298)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/radar/discover (src/app/admin/radar/page.tsx:298)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:298` calls `POST /api/admin/radar/discover` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/discover`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-586311b9d55b0fdb", "name": "Dangling fetch: POST /api/admin/radar/refresh (src/app/admin/radar/page.tsx:335)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/radar/refresh (src/app/admin/radar/page.tsx:335)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:335` calls `POST /api/admin/radar/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/refresh`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33edf05d3765e8fd", "name": "Dangling fetch: GET /api/admin/radar/domains/${domainId} (src/app/admin/radar/page.tsx:361)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/radar/domains/${domainId} (src/app/admin/radar/page.tsx:361)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:361` calls `GET /api/admin/radar/domains/${domainId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/domains/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0c161112093e84f", "name": "Dangling fetch: PATCH /api/admin/radar/domains/${dossierDomainId}/profile (src/app/admin/radar/page.tsx:402)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/radar/domains/${dossierDomainId}/profile (src/app/admin/radar/page.tsx:402)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:402` calls `PATCH /api/admin/radar/domains/${dossierDomainId}/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/domains/<p>/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3d7d6cefa699e98", "name": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:467)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:467)"}, "fullDescription": {"text": "`src/app/admin/radar/page.tsx:467` calls `POST /api/admin/radar/domains` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/radar/domains`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96c4ffa3fdd9637c", "name": "Dangling fetch: GET /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:65)"}, "fullDescription": {"text": "`src/app/admin/phone-settings/page.tsx:65` calls `GET /api/admin/phone-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/phone-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-16b7acffc769d640", "name": "Dangling fetch: PUT /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:84)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:84)"}, "fullDescription": {"text": "`src/app/admin/phone-settings/page.tsx:84` calls `PUT /api/admin/phone-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/phone-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-3c514dd66e914bde", "name": "Dangling fetch: GET /api/analyst/history (src/app/admin/analyst/page.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/analyst/history (src/app/admin/analyst/page.tsx:34)"}, "fullDescription": {"text": "`src/app/admin/analyst/page.tsx:34` calls `GET /api/analyst/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a7c02d215904f7c", "name": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/page.tsx:58)"}, "fullDescription": {"text": "`src/app/admin/analyst/page.tsx:58` calls `GET /api/admin/harry/control` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/control`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7c78e0d6e1ed7b1", "name": "Dangling fetch: DELETE /api/analyst/history (src/app/admin/analyst/page.tsx:77)", "shortDescription": {"text": "Dangling fetch: DELETE /api/analyst/history (src/app/admin/analyst/page.tsx:77)"}, "fullDescription": {"text": "`src/app/admin/analyst/page.tsx:77` calls `DELETE /api/analyst/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-936f75157995105e", "name": "Dangling fetch: POST /api/analyst/scan (src/app/admin/analyst/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/scan (src/app/admin/analyst/page.tsx:101)"}, "fullDescription": {"text": "`src/app/admin/analyst/page.tsx:101` calls `POST /api/analyst/scan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/scan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8510aefbcd0a1a5f", "name": "Dangling fetch: POST /api/analyst/chat (src/app/admin/analyst/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/chat (src/app/admin/analyst/page.tsx:168)"}, "fullDescription": {"text": "`src/app/admin/analyst/page.tsx:168` calls `POST /api/analyst/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/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-d342f5c29df0c997", "name": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/targets/page.tsx:143)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/targets/page.tsx:143)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:143` calls `GET /api/admin/harry/control` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/harry/control`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba4766d9938bf047", "name": "Dangling fetch: GET /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:159)", "shortDescription": {"text": "Dangling fetch: GET /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:159)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:159` calls `GET /api/analyst/targets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/targets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ded44bc2735203f", "name": "Dangling fetch: POST /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:183)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:183)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:183` calls `POST /api/analyst/targets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/targets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f89c966b3a5de64", "name": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:203)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:203` calls `PATCH /api/analyst/targets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/targets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a869af97f4545b9e", "name": "Dangling fetch: DELETE /api/analyst/targets?id=${id} (src/app/admin/analyst/targets/page.tsx:219)", "shortDescription": {"text": "Dangling fetch: DELETE /api/analyst/targets?id=${id} (src/app/admin/analyst/targets/page.tsx:219)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:219` calls `DELETE /api/analyst/targets?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: `/analyst/targets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd088ea4703868b7", "name": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:234)", "shortDescription": {"text": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:234)"}, "fullDescription": {"text": "`src/app/admin/analyst/targets/page.tsx:234` calls `PATCH /api/analyst/targets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/targets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a396d52ed29eae84", "name": "Dangling fetch: GET /api/admin/comms/email-log/${email.id}/preview (src/app/admin/email-outbox/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/comms/email-log/${email.id}/preview (src/app/admin/email-outbox/page.tsx:51)"}, "fullDescription": {"text": "`src/app/admin/email-outbox/page.tsx:51` calls `GET /api/admin/comms/email-log/${email.id}/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/comms/email-log/<p>/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-64363c3b77d5f390", "name": "Dangling fetch: GET /api/admin/comms/email-log?${query.toString()} (src/app/admin/email-outbox/page.tsx:192)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/comms/email-log?${query.toString()} (src/app/admin/email-outbox/page.tsx:192)"}, "fullDescription": {"text": "`src/app/admin/email-outbox/page.tsx:192` calls `GET /api/admin/comms/email-log?${query.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/comms/email-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e21148eb527a422a", "name": "Dangling fetch: POST /api/admin/ops/estimates (src/app/admin/operations/estimates/new/page.tsx:27)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/estimates (src/app/admin/operations/estimates/new/page.tsx:27)"}, "fullDescription": {"text": "`src/app/admin/operations/estimates/new/page.tsx:27` calls `POST /api/admin/ops/estimates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/estimates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c59385b1c50cc91c", "name": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:52)"}, "fullDescription": {"text": "`src/app/admin/push/page.tsx:52` calls `GET /api/admin/push/history?${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/push/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed04b7762a0dc182", "name": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:67)"}, "fullDescription": {"text": "`src/app/admin/push/page.tsx:67` calls `GET /api/admin/push/history?${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/push/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cc53d16fccd2bd1", "name": "Dangling fetch: POST /api/admin/push/generate (src/app/admin/push/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/push/generate (src/app/admin/push/page.tsx:87)"}, "fullDescription": {"text": "`src/app/admin/push/page.tsx:87` calls `POST /api/admin/push/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/push/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5171ead7323b58d", "name": "Dangling fetch: POST /api/admin/push/send (src/app/admin/push/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/push/send (src/app/admin/push/page.tsx:130)"}, "fullDescription": {"text": "`src/app/admin/push/page.tsx:130` calls `POST /api/admin/push/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/push/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-722d68d9c86c5b92", "name": "Dangling fetch: GET /api/admin/comms/sms-log?${params.toString()} (src/app/admin/sms-outbox/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/comms/sms-log?${params.toString()} (src/app/admin/sms-outbox/page.tsx:41)"}, "fullDescription": {"text": "`src/app/admin/sms-outbox/page.tsx:41` calls `GET /api/admin/comms/sms-log?${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/comms/sms-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7af332bcefbdce02", "name": "Dangling fetch: GET /api/leads (src/app/admin/leads/page.tsx:186)", "shortDescription": {"text": "Dangling fetch: GET /api/leads (src/app/admin/leads/page.tsx:186)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:186` calls `GET /api/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-7c05230a3c15d6ba", "name": "Dangling fetch: GET /api/admin/funnel-stats (src/app/admin/leads/page.tsx:187)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/funnel-stats (src/app/admin/leads/page.tsx:187)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:187` calls `GET /api/admin/funnel-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/funnel-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-2662dd4a33200e64", "name": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:228)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:228)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:228` calls `PATCH /api/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-caf61779e822b01f", "name": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:255)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:255)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:255` calls `PATCH /api/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-87f25666b6443708", "name": "Dangling fetch: DELETE /api/leads?id=${selectedLead.id} (src/app/admin/leads/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: DELETE /api/leads?id=${selectedLead.id} (src/app/admin/leads/page.tsx:290)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:290` calls `DELETE /api/leads?id=${selectedLead.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-4bd8641e10071241", "name": "Dangling fetch: POST /api/leads (src/app/admin/leads/page.tsx:319)", "shortDescription": {"text": "Dangling fetch: POST /api/leads (src/app/admin/leads/page.tsx:319)"}, "fullDescription": {"text": "`src/app/admin/leads/page.tsx:319` calls `POST /api/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-f3e66d87d0cf974e", "name": "Dangling fetch: GET /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:102)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:102)"}, "fullDescription": {"text": "`src/app/admin/promo-codes/page.tsx:102` calls `GET /api/admin/promo-codes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/promo-codes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b521b262427dbb4a", "name": "Dangling fetch: PATCH /api/admin/promo-codes/${c.id} (src/app/admin/promo-codes/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/promo-codes/${c.id} (src/app/admin/promo-codes/page.tsx:126)"}, "fullDescription": {"text": "`src/app/admin/promo-codes/page.tsx:126` calls `PATCH /api/admin/promo-codes/${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: `/admin/promo-codes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e26da9e2ad29d519", "name": "Dangling fetch: DELETE /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:149)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:149)"}, "fullDescription": {"text": "`src/app/admin/promo-codes/page.tsx:149` calls `DELETE /api/admin/promo-codes/${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/promo-codes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c31deea34ce27af", "name": "Dangling fetch: PATCH /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:199)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:199)"}, "fullDescription": {"text": "`src/app/admin/promo-codes/page.tsx:199` calls `PATCH /api/admin/promo-codes/${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/promo-codes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4947d9cedeeac8d", "name": "Dangling fetch: POST /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:237)"}, "fullDescription": {"text": "`src/app/admin/promo-codes/page.tsx:237` calls `POST /api/admin/promo-codes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/promo-codes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92550b181eab0205", "name": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:211)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:211` calls `GET /api/admin/vendors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/vendors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9c5d15e4e06f562", "name": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/vendors/page.tsx:293)", "shortDescription": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/vendors/page.tsx:293)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:293` calls `POST /api/conversations/${selectedConvo.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>/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-01efbd1cd6cb7d37", "name": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/vendors/page.tsx:323)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/vendors/page.tsx:323)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:323` calls `PATCH /api/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac557077e8a99555", "name": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:350)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:350)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:350` calls `GET /api/admin/vendors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/vendors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b920aab46906aa55", "name": "Dangling fetch: DELETE /api/admin/vendors?id=${partnerId} (src/app/admin/vendors/page.tsx:461)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/vendors?id=${partnerId} (src/app/admin/vendors/page.tsx:461)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:461` calls `DELETE /api/admin/vendors?id=${partnerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/vendors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee318ad88fa19f3f", "name": "Dangling fetch: PUT /api/admin/vendors (src/app/admin/vendors/page.tsx:480)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/vendors (src/app/admin/vendors/page.tsx:480)"}, "fullDescription": {"text": "`src/app/admin/vendors/page.tsx:480` calls `PUT /api/admin/vendors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/vendors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82c482a493a551cb", "name": "Dangling fetch: GET /api/admin/voicemails (src/app/admin/voicemails/page.tsx:27)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/voicemails (src/app/admin/voicemails/page.tsx:27)"}, "fullDescription": {"text": "`src/app/admin/voicemails/page.tsx:27` calls `GET /api/admin/voicemails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/voicemails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d588aedfa7651800", "name": "Dangling fetch: DELETE /api/admin/voicemails/${id} (src/app/admin/voicemails/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/voicemails/${id} (src/app/admin/voicemails/page.tsx:44)"}, "fullDescription": {"text": "`src/app/admin/voicemails/page.tsx:44` calls `DELETE /api/admin/voicemails/${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/voicemails/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f48ed18587fa7f5c", "name": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/sightings/page.tsx:156)", "shortDescription": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/sightings/page.tsx:156)"}, "fullDescription": {"text": "`src/app/admin/sightings/page.tsx:156` calls `POST /api/conversations/${selectedConvo.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>/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-3a71176f75be9eac", "name": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/sightings/page.tsx:187)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/sightings/page.tsx:187)"}, "fullDescription": {"text": "`src/app/admin/sightings/page.tsx:187` calls `PATCH /api/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5db0a630078b1134", "name": "Dangling fetch: PATCH /api/sightings/${id} (src/app/admin/sightings/page.tsx:289)", "shortDescription": {"text": "Dangling fetch: PATCH /api/sightings/${id} (src/app/admin/sightings/page.tsx:289)"}, "fullDescription": {"text": "`src/app/admin/sightings/page.tsx:289` calls `PATCH /api/sightings/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f0fd8c2adb10efa", "name": "Dangling fetch: DELETE /api/sightings/${id}/delete (src/app/admin/sightings/page.tsx:324)", "shortDescription": {"text": "Dangling fetch: DELETE /api/sightings/${id}/delete (src/app/admin/sightings/page.tsx:324)"}, "fullDescription": {"text": "`src/app/admin/sightings/page.tsx:324` calls `DELETE /api/sightings/${id}/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings/<p>/delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6eb06415ddc01bc", "name": "Dangling fetch: GET /api/admin/call-logs?days=${d} (src/app/admin/call-logs/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/call-logs?days=${d} (src/app/admin/call-logs/page.tsx:208)"}, "fullDescription": {"text": "`src/app/admin/call-logs/page.tsx:208` calls `GET /api/admin/call-logs?days=${d}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/call-logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9561fda03dfad1b", "name": "Dangling fetch: POST /api/admin/call-logs/backfill (src/app/admin/call-logs/page.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/call-logs/backfill (src/app/admin/call-logs/page.tsx:232)"}, "fullDescription": {"text": "`src/app/admin/call-logs/page.tsx:232` calls `POST /api/admin/call-logs/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/call-logs/backfill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f38eec80c9ddb461", "name": "Dangling fetch: POST /api/tools/combine (src/app/admin/tools/combine/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: POST /api/tools/combine (src/app/admin/tools/combine/page.tsx:108)"}, "fullDescription": {"text": "`src/app/admin/tools/combine/page.tsx:108` calls `POST /api/tools/combine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tools/combine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e9622592da370a1", "name": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/tap-analytics/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/tap-analytics/page.tsx:137)"}, "fullDescription": {"text": "`src/app/admin/tap-analytics/page.tsx:137` calls `POST /api/conversations/${selectedConvo.id}/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>/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-c2de2bd4e400d47b", "name": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/tap-analytics/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/tap-analytics/page.tsx:168)"}, "fullDescription": {"text": "`src/app/admin/tap-analytics/page.tsx:168` calls `PATCH /api/conversations/${conversationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/conversations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8fc3a37a76fd053c", "name": "Dangling fetch: PATCH /api/admin/social-post-drafts/${draft.id} (src/app/admin/social-posts/page.tsx:153)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/social-post-drafts/${draft.id} (src/app/admin/social-posts/page.tsx:153)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:153` calls `PATCH /api/admin/social-post-drafts/${draft.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/social-post-drafts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8e32fb8d216334a", "name": "Dangling fetch: POST /api/admin/social-post-drafts/${draft.id}/post (src/app/admin/social-posts/page.tsx:169)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/social-post-drafts/${draft.id}/post (src/app/admin/social-posts/page.tsx:169)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:169` calls `POST /api/admin/social-post-drafts/${draft.id}/post` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/social-post-drafts/<p>/post`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59375b5236727cdb", "name": "Dangling fetch: GET /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:319)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:319)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:319` calls `GET /api/admin/promotional-posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/promotional-posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51c50a552065d92f", "name": "Dangling fetch: GET /api/admin/social-posts (src/app/admin/social-posts/page.tsx:330)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/social-posts (src/app/admin/social-posts/page.tsx:330)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:330` calls `GET /api/admin/social-posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/social-posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-088aa16c636e21cd", "name": "Dangling fetch: GET /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:343)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:343` calls `GET /api/admin/echo/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/echo/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-023f73d3781e0810", "name": "Dangling fetch: PATCH /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:363)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:363)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:363` calls `PATCH /api/admin/echo/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/echo/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-6b17b4376d183776", "name": "Dangling fetch: POST /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:892)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:892)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:892` calls `POST /api/admin/promotional-posts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/promotional-posts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e8a811c42054b9e", "name": "Dangling fetch: POST /api/admin/promotional-posts/${post.id}/post (src/app/admin/social-posts/page.tsx:1099)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/promotional-posts/${post.id}/post (src/app/admin/social-posts/page.tsx:1099)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:1099` calls `POST /api/admin/promotional-posts/${post.id}/post` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/promotional-posts/<p>/post`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a3739d4fe0bae9c", "name": "Dangling fetch: DELETE /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1117)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1117)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:1117` calls `DELETE /api/admin/promotional-posts/${post.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/promotional-posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fccb7f33bcb588b", "name": "Dangling fetch: PATCH /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1127)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1127)"}, "fullDescription": {"text": "`src/app/admin/social-posts/page.tsx:1127` calls `PATCH /api/admin/promotional-posts/${post.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/promotional-posts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0b4f3b4f2c558e4", "name": "Dangling fetch: GET /api/admin/blacklist (src/app/admin/blacklist/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/blacklist (src/app/admin/blacklist/page.tsx:47)"}, "fullDescription": {"text": "`src/app/admin/blacklist/page.tsx:47` calls `GET /api/admin/blacklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/blacklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97520c31fa5c7eb8", "name": "Dangling fetch: POST /api/admin/blacklist (src/app/admin/blacklist/page.tsx:70)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/blacklist (src/app/admin/blacklist/page.tsx:70)"}, "fullDescription": {"text": "`src/app/admin/blacklist/page.tsx:70` calls `POST /api/admin/blacklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/blacklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b32087797cc5cea", "name": "Dangling fetch: DELETE /api/admin/blacklist/${id} (src/app/admin/blacklist/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/blacklist/${id} (src/app/admin/blacklist/page.tsx:97)"}, "fullDescription": {"text": "`src/app/admin/blacklist/page.tsx:97` calls `DELETE /api/admin/blacklist/${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/blacklist/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5147b3a9ab59f0d2", "name": "Dangling fetch: POST /api/revenue-entries (src/app/admin/stats/page.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST /api/revenue-entries (src/app/admin/stats/page.tsx:159)"}, "fullDescription": {"text": "`src/app/admin/stats/page.tsx:159` calls `POST /api/revenue-entries` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/revenue-entries`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-185fbc61d60c1ac8", "name": "Dangling fetch: GET /api/admin/stats/utilization-supplement (src/app/admin/stats/page.tsx:321)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/stats/utilization-supplement (src/app/admin/stats/page.tsx:321)"}, "fullDescription": {"text": "`src/app/admin/stats/page.tsx:321` calls `GET /api/admin/stats/utilization-supplement` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/stats/utilization-supplement`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62fecd8ceb36f235", "name": "Dangling fetch: GET /api/admin/ops/stats (src/app/admin/stats/page.tsx:565)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/stats (src/app/admin/stats/page.tsx:565)"}, "fullDescription": {"text": "`src/app/admin/stats/page.tsx:565` calls `GET /api/admin/ops/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/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-e121b5f1e38ef782", "name": "Dangling fetch: GET /api/admin/ops/calendar-pipeline (src/app/admin/stats/page.tsx:584)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/calendar-pipeline (src/app/admin/stats/page.tsx:584)"}, "fullDescription": {"text": "`src/app/admin/stats/page.tsx:584` calls `GET /api/admin/ops/calendar-pipeline` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/calendar-pipeline`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7265b7c6c3e54043", "name": "Dangling fetch: GET /api/admin/stats/lead-sources?${params} (src/app/admin/stats/lead-sources/page.tsx:61)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/stats/lead-sources?${params} (src/app/admin/stats/lead-sources/page.tsx:61)"}, "fullDescription": {"text": "`src/app/admin/stats/lead-sources/page.tsx:61` calls `GET /api/admin/stats/lead-sources?${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/stats/lead-sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74103d39029cf0ba", "name": "Dangling fetch: POST /api/location-partner/login (src/app/location/[partnerId]/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: POST /api/location-partner/login (src/app/location/[partnerId]/page.tsx:57)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/page.tsx:57` calls `POST /api/location-partner/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/location-partner/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ebe64ae840003b6", "name": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:83)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/page.tsx:83` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-d1895000639ec24d", "name": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:119)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/page.tsx:119` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-f712e1dde96089d8", "name": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/contest/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/contest/page.tsx:119)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/contest/page.tsx:119` calls `POST /api/tap/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tap/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-b4bce904aebee4c6", "name": "Dangling fetch: POST /api/sightings (src/app/location/[partnerId]/contest/page.tsx:287)", "shortDescription": {"text": "Dangling fetch: POST /api/sightings (src/app/location/[partnerId]/contest/page.tsx:287)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/contest/page.tsx:287` calls `POST /api/sightings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1099bf40d07a0a8", "name": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/location/[partnerId]/contest/page.tsx:417)", "shortDescription": {"text": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/location/[partnerId]/contest/page.tsx:417)"}, "fullDescription": {"text": "`src/app/location/[partnerId]/contest/page.tsx:417` calls `POST /api/sightings/${sightingId}/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sightings/<p>/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9323066fcf01974f", "name": "Dangling fetch: GET /api/public/availability?start_date=${startDate}&end_date=${endDate}&required_minutes=${requiredMinu", "shortDescription": {"text": "Dangling fetch: GET /api/public/availability?start_date=${startDate}&end_date=${endDate}&required_minutes=${requiredMinutes} (src/app/book/page.tsx:260)"}, "fullDescription": {"text": "`src/app/book/page.tsx:260` calls `GET /api/public/availability?start_date=${startDate}&end_date=${endDate}&required_minutes=${requiredMinutes}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe0d99e721d6298d", "name": "Dangling fetch: GET /api/public/services (src/app/book/page.tsx:593)", "shortDescription": {"text": "Dangling fetch: GET /api/public/services (src/app/book/page.tsx:593)"}, "fullDescription": {"text": "`src/app/book/page.tsx:593` calls `GET /api/public/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/services`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c60bb85db122c4c", "name": "Dangling fetch: GET /api/public/lead-sources (src/app/book/page.tsx:601)", "shortDescription": {"text": "Dangling fetch: GET /api/public/lead-sources (src/app/book/page.tsx:601)"}, "fullDescription": {"text": "`src/app/book/page.tsx:601` calls `GET /api/public/lead-sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public/lead-sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2b2dae72d63a89d", "name": "Dangling fetch: POST /api/book (src/app/book/page.tsx:729)", "shortDescription": {"text": "Dangling fetch: POST /api/book (src/app/book/page.tsx:729)"}, "fullDescription": {"text": "`src/app/book/page.tsx:729` calls `POST /api/book` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/book`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c72758e9bfa9bf2", "name": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/sendMessage (src/lib/harry-command-bot.ts:58)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/sendMessage (src/lib/harry-command-bot.ts:58)"}, "fullDescription": {"text": "`src/lib/harry-command-bot.ts:58` calls `POST https://api.telegram.org/bot${BOT_TOKEN}/sendMessage` 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.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19aaa525b4ab56ec", "name": "Dangling fetch: POST https://google.serper.dev/search (src/lib/web-search.ts:17)", "shortDescription": {"text": "Dangling fetch: POST https://google.serper.dev/search (src/lib/web-search.ts:17)"}, "fullDescription": {"text": "`src/lib/web-search.ts:17` calls `POST https://google.serper.dev/search` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/google.serper.dev/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-3514a50ebd5d3a7a", "name": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/gbp-reviews.ts:54)", "shortDescription": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/gbp-reviews.ts:54)"}, "fullDescription": {"text": "`src/lib/gbp-reviews.ts:54` calls `GET https://serpapi.com/search?${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:/serpapi.com/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-c01a89c05ca6d0cc", "name": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:120)", "shortDescription": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:120)"}, "fullDescription": {"text": "`src/lib/serpApi.ts:120` calls `GET https://serpapi.com/search?${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:/serpapi.com/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-d432c42d4d7d6a8d", "name": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:268)", "shortDescription": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:268)"}, "fullDescription": {"text": "`src/lib/serpApi.ts:268` calls `GET https://serpapi.com/search?${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:/serpapi.com/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-dd51a31832b39c4d", "name": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:328)", "shortDescription": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:328)"}, "fullDescription": {"text": "`src/lib/serpApi.ts:328` calls `GET https://serpapi.com/search?${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:/serpapi.com/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-4b1283ba203442b0", "name": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/telegram.ts:43)", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/telegram.ts:43)"}, "fullDescription": {"text": "`src/lib/telegram.ts:43` calls `POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage` 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.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75e0633a9df0f044", "name": "Dangling fetch: POST https://api.telegram.org/bot${RANGER_TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/ranger/telegram.ts:67", "shortDescription": {"text": "Dangling fetch: POST https://api.telegram.org/bot${RANGER_TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/ranger/telegram.ts:67)"}, "fullDescription": {"text": "`src/lib/ranger/telegram.ts:67` calls `POST https://api.telegram.org/bot${RANGER_TELEGRAM_BOT_TOKEN}/sendMessage` 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.telegram.org/bot/<p>/sendmessage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b49db410b72481f8", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (src/lib/ranger/research.ts:185)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (src/lib/ranger/research.ts:185)"}, "fullDescription": {"text": "`src/lib/ranger/research.ts:185` calls `POST https://api.firecrawl.dev/v1/search` 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.firecrawl.dev/v1/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-5ace6c499ce02837", "name": "Dangling fetch: POST /api/admin/ops/gps/points (src/lib/gps/offlineQueue.ts:68)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/gps/points (src/lib/gps/offlineQueue.ts:68)"}, "fullDescription": {"text": "`src/lib/gps/offlineQueue.ts:68` calls `POST /api/admin/ops/gps/points` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/points`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3226702bbdce6870", "name": "Dangling fetch: POST /api/admin/ops/gps/points (src/hooks/useGpsTracker.ts:75)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/gps/points (src/hooks/useGpsTracker.ts:75)"}, "fullDescription": {"text": "`src/hooks/useGpsTracker.ts:75` calls `POST /api/admin/ops/gps/points` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/points`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9966585c1daf32e", "name": "Dangling fetch: GET /api/admin/ops/gps/shifts/active (src/hooks/useGpsTracker.ts:211)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ops/gps/shifts/active (src/hooks/useGpsTracker.ts:211)"}, "fullDescription": {"text": "`src/hooks/useGpsTracker.ts:211` calls `GET /api/admin/ops/gps/shifts/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/ops/gps/shifts/active`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b24fe451fb83e6e", "name": "Dangling fetch: POST /api/admin/ops/gps/shifts/start (src/hooks/useGpsTracker.ts:237)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/start (src/hooks/useGpsTracker.ts:237)"}, "fullDescription": {"text": "`src/hooks/useGpsTracker.ts:237` calls `POST /api/admin/ops/gps/shifts/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/shifts/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1334943ce023fbc1", "name": "Dangling fetch: POST /api/admin/ops/gps/shifts/end (src/hooks/useGpsTracker.ts:278)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/end (src/hooks/useGpsTracker.ts:278)"}, "fullDescription": {"text": "`src/hooks/useGpsTracker.ts:278` calls `POST /api/admin/ops/gps/shifts/end` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ops/gps/shifts/end`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-180bb4c906e35805", "name": "Dangling fetch: GET /api/message (src/hooks/useGetMessage.ts:10)", "shortDescription": {"text": "Dangling fetch: GET /api/message (src/hooks/useGetMessage.ts:10)"}, "fullDescription": {"text": "`src/hooks/useGetMessage.ts:10` calls `GET /api/message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/message`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5b7088b0b9f1b71", "name": "Unused endpoint: POST /restapi/v1.0/subscription", "shortDescription": {"text": "Unused endpoint: POST /restapi/v1.0/subscription"}, "fullDescription": {"text": "`setup-ringcentral-webhook.js` declares `POST /restapi/v1.0/subscription` 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-b7f71b9be131a20f", "name": "Unused endpoint: POST /restapi/v1.0/account/~/extension/~/sms", "shortDescription": {"text": "Unused endpoint: POST /restapi/v1.0/account/~/extension/~/sms"}, "fullDescription": {"text": "`src/lib/ringcentral.ts` declares `POST /restapi/v1.0/account/~/extension/~/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}}]}}, "automationDetails": {"id": "repobility/18986"}, "properties": {"repository": "sasquatchcc719-pixel/Sasquatch-sightings", "repoUrl": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 429719, "scanner": "foundry_dataset", "fingerprint": "d5feb28b9d91698155a146e6f5c8600e429dd9fbfdd9ee2ace068800678aafa6", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 2, "ui_or_frontend": 4, "runtime_failure": 1, "api_integration_gap": 1, "verification_or_tests": 3, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 41, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 4, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 8, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 24, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 4, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#3", "issue_number": "3", "quality_tiers": {"unresolved": 1, "assumption_check": 1, "weak_supervision": 3}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-86e31680ed979a2f", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"ui_or_frontend": 20}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: supported_by_verification_signal\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 24\nEdges: 41\nNode types: {'commit': 5, 'link_quality': 5, 'pr_file': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 8, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 4, 'verification_or_tests': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1, 'api_integration_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-ba4ceb970862a73e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 429718, "scanner": "foundry_dataset", "fingerprint": "e73340b233f5f47077f26663bd274fe11c7d9bf32b43f9e90a7c2760fb57ea77", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "api_or_backend": 6, "ui_or_frontend": 8, "api_integration_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 75, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 15, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 15, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-70b1d88427cb242f", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 30, "ui_or_frontend": 40}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 32\nEdges: 75\nNode types: {'pr_file': 15, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 15, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 8, 'api_or_backend': 6, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'test_or_ci': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-76f4da662b81313e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 429717, "scanner": "foundry_dataset", "fingerprint": "d9bdaee531a092d01a3f69f484896082661b71945f6e8d1be07c14d82a3ee408", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 9, "source_or_other": 4, "ui_workflow_gap": 1, "deployment_env_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 69, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 13, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 28, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 13, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#1", "issue_number": "1", "quality_tiers": {"unresolved": 4, "assumption_check": 1}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-b693eeae7fa4ca53", "graph_gold_label": "assumption_check", "changed_file_labels": {"ui_or_frontend": 45, "source_or_other": 20}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 28\nEdges: 69\nNode types: {'pr_file': 13, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 13, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 9, 'source_or_other': 4, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-37bdb2162bd221e2", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 403573, "scanner": "foundry_dataset", "fingerprint": "23debdefcafb476d9fce7d4d1085af8d1f3c137f5f910053edbdb4fc9a4d02d4", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 2, "ui_or_frontend": 4, "runtime_failure": 1, "api_integration_gap": 1, "verification_or_tests": 3, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 41, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 4, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 8, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 24, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "pr_file": 4, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#3", "issue_number": "3", "quality_tiers": {"unresolved": 1, "assumption_check": 1, "weak_supervision": 3}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-79422cacbebd7b26", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"ui_or_frontend": 20}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_verification_signal\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#3\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 3\nGraph consistency label: supported_by_verification_signal\nNodes: 24\nEdges: 41\nNode types: {'commit': 5, 'link_quality': 5, 'pr_file': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 8, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 4, 'verification_or_tests': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1, 'api_integration_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-a81d33b0fe43d3bc", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 403572, "scanner": "foundry_dataset", "fingerprint": "886404fd8e37a53fa5a336400c6ddc2851d767e27fca3074a42d331ad4fc860f", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "api_or_backend": 6, "ui_or_frontend": 8, "api_integration_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 75, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 15, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 15, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-aab8993cbd9474d4", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 30, "ui_or_frontend": 40}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 32\nEdges: 75\nNode types: {'pr_file': 15, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 15, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 8, 'api_or_backend': 6, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'test_or_ci': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-08a581e795dc048a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 403571, "scanner": "foundry_dataset", "fingerprint": "061f74b8c09b50aca80d9168f44de1168a4c9eb0f7b3d06725faa088dd3c025f", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"ui_or_frontend": 9, "source_or_other": 4, "ui_workflow_gap": 1, "deployment_env_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 69, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 13, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 28, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 13, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#1", "issue_number": "1", "quality_tiers": {"unresolved": 4, "assumption_check": 1}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-7e73c718e24db4f8", "graph_gold_label": "assumption_check", "changed_file_labels": {"ui_or_frontend": 45, "source_or_other": 20}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 1\nGraph consistency label: assumption_check\nNodes: 28\nEdges: 69\nNode types: {'pr_file': 13, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 13, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 9, 'source_or_other': 4, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-8effd58db3d71f94", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 420002, "scanner": "foundry_dataset", "fingerprint": "b65c44ce99c741a2b4946f15adfe31cc53a465c892a594cb32642c3659faafaf", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 1, "test_ci_gap": 1, "api_or_backend": 6, "ui_or_frontend": 8, "api_integration_gap": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_disagreement": 2, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 75, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 15, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 6, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 15, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-9c02c7dcc2aa3d24", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 30, "ui_or_frontend": 40}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: assumption_check\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 32\nEdges: 75\nNode types: {'pr_file': 15, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 15, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 8, 'api_or_backend': 6, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'blueprint_human_gap_disagreement': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'api_integration_gap': 1, 'test_or_ci': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "graph-query-motif_query-646c9bd1aba33161", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 391032, "scanner": "foundry_dataset", "fingerprint": "520fb8ca6c1b0cbb3d24ddf8cf6c50264c937e2e910340faa3058b9a0326f90a", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#2", "human_labels": ["api_integration_gap", "api_or_backend", "test_ci_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-9fa478c24e773b2d", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "tests": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 15, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "api_or_backend": 6, "ui_or_frontend": 8}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 5, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: sasquatchcc719-pixel/Sasquatch-sightings#2\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 15\nLabels: {'test_ci_gap': 1, 'api_integration_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 8, 'api_or_backend': 6, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f688d708e6e389ce\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/2\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\\nAuthor: sasquatchcc719-pixel (User)\\nURL: https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/2\\nTitle: Add field tech portal preview\\nBody:\\n## Summary\\n- Adds a dedicated `/tech` portal for assigned field jobs.\\n- Adds tech-safe APIs with Recovery Village/batch-monthly pricing redaction.\\n- Wires GPS clock-in/out, invoice editing, photos, signatures, and Square/Venmo payment recording for standard jobs.\\n\\n## Test plan\\n- `pnpm test:ci src/lib/tech/appointments.test.ts`\\n- `pnpm type-check`\\n- `pnpm lint`\\n\\n\\nMade with [Cursor](https://cursor.com)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-678ee180ffb9efe9\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/2#issuecomment-4393300868\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/2#issuecomment-4393300868\\nTitle: \\nBody:\\n[vc]: #JfEHSpzQzMkfNPwbL2j5ml2lAMkYiPlfn0H6t1dXk+w=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJzYXNxdWF0Y2gtc2lnaHRpbmdzIiwicHJvamVjdElkIjoicHJqX1BwaEVVSmdCZ0gybklLVjFjSzNTRHZmaWRjazciLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vY2hhcmxlcy1zZXdlbGxzLXByb2plY3RzL3Nhc3F1YXRjaC1zaWdodGluZ3MvOVc5NjJMbnBGa0pGWkczTnRUU2JMdXFQeXpLeSIsInByZXZpZXdVcmwiOiIiLCJuZXh0Q29tbWl0U3RhdHVzIjoiRkFJTEVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJyb290RGlyZWN0b3J5IjpudWxsfV0sInJl\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "comment-chain-pattern-bad_chains-8d69317d30191ffe", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: sasquatchcc719-pixel/Sasquatch-sightings"}, "properties": {"repobilityId": 391031, "scanner": "foundry_dataset", "fingerprint": "c216eae9f62045d29bf505303cd86be94391f3a35162df0b68e43ad4fabbc5a7", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "sasquatchcc719-pixel/Sasquatch-sightings#1", "human_labels": ["deployment_env_gap", "source_or_other", "ui_or_frontend", "ui_workflow_gap"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d6c961f4df00546c", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "tests": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 13, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 9, "source_or_other": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 5, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread: sasquatchcc719-pixel/Sasquatch-sightings#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: sasquatchcc719-pixel/Sasquatch-sightings#1\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 13\nLabels: {'ui_workflow_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'source_or_other': 4, 'ui_or_frontend': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2a55cae8998af1eb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/1\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\\nAuthor: sasquatchcc719-pixel (User)\\nURL: https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/1\\nTitle: Add video backgrounds across all public pages\\nBody:\\n## Summary\\n- Add VideoBackground component with forest/clouds video options\\n- Admin pages: video bg with glassmorphism nav bubbles\\n- Contest page: clouds video + Sasquatch character (blend mode trick)\\n- Business card page: clouds video background\\n- Vendor landing: forest video with dark themed cards\\n- Partner registration: video bg with updated logo\\n- Preferred partners: video bg + full partner program content\\n- Update navigation dropdowns to open downward with solid backgrounds\\n\\n## Files Changed\\n- 13 files, +516 lines\"\n  },\n  {\n    \"id\": \"github-feedback-comment-25a9445376bdb61d\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/1#issuecomment-3832850844\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: sasquatchcc719-pixel/Sasquatch-sightings\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/sasquatchcc719-pixel/Sasquatch-sightings/pull/1#issuecomment-3832850844\\nTitle: \\nBody:\\n[vc]: #xRba+N1GR9UGxo+kOWRvowU/vmX10aJLJz4muQfoxgg=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJzYXNxdWF0Y2gtc2lnaHRpbmdzIiwicHJvamVjdElkIjoicHJqX1BwaEVVSmdCZ0gybklLVjFjSzNTRHZmaWRjazciLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoic2FzcXVhdGNoLXNpZ2h0aW5ncy1naXQtZmVhdHVyZS1mZDdmMWUtY2hhcmxlcy1zZXdlbGxzLXByb2plY3RzLnZlcmNlbC5hcHAifSwiaW5zcGVjdG\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/sasquatchcc719-pixel/Sasquatch-sightings", "source_id": "comment-chain-pattern-bad_chains-b422bad4ccd80b43", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "sasquatchcc719-pixel/Sasquatch-sightings", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-11d539252da0f9b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_estimate.js:38"}, "properties": {"repobilityId": "b962e4e7f6db543e", "scanner": "scanner-primary", "fingerprint": "11d539252da0f9b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4dbc51afd12e546", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-manual.js:7"}, "properties": {"repobilityId": "76f4298a007d92d7", "scanner": "scanner-primary", "fingerprint": "f4dbc51afd12e546", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-998e981bf0501045", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 fix_db.js:26"}, "properties": {"repobilityId": "9682e8148b261027", "scanner": "scanner-primary", "fingerprint": "998e981bf0501045", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c3c76762dfbace0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-ringcentral-webhook.js:28"}, "properties": {"repobilityId": "0c4ce0fa6e1e92b5", "scanner": "scanner-primary", "fingerprint": "c3c76762dfbace0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-582553a91bd28418", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_insert_appointment.js:40"}, "properties": {"repobilityId": "0d628f8985d5b721", "scanner": "scanner-primary", "fingerprint": "582553a91bd28418", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-491bf79459c13dd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_post.js:26"}, "properties": {"repobilityId": "daf464068d1d1790", "scanner": "scanner-primary", "fingerprint": "491bf79459c13dd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dcd52ba9d953db5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook.js:16"}, "properties": {"repobilityId": "91209abb356216bd", "scanner": "scanner-primary", "fingerprint": "dcd52ba9d953db5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cd35b12558142b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-partner-data.js:20"}, "properties": {"repobilityId": "59f972ad2060afd9", "scanner": "scanner-primary", "fingerprint": "8cd35b12558142b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-120000410dc12b62", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 setup-ringcentral-webhook-jwt.js:14"}, "properties": {"repobilityId": "08d9daca9b262c3b", "scanner": "scanner-primary", "fingerprint": "120000410dc12b62", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6926e075f96bc17", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/TWILIO-FUNCTION-CODE.js:71"}, "properties": {"repobilityId": "131780e7765454c1", "scanner": "scanner-primary", "fingerprint": "a6926e075f96bc17", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afa70084b34a6994", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-harry-knowledge.ts:182"}, "properties": {"repobilityId": "d0cf6db1373af6a8", "scanner": "scanner-primary", "fingerprint": "afa70084b34a6994", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83049e2469151e81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-logs.ts:13"}, "properties": {"repobilityId": "d48698cce4f496c3", "scanner": "scanner-primary", "fingerprint": "83049e2469151e81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f69fbbfcbc91307d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-mariahs-booking.ts:26"}, "properties": {"repobilityId": "a7302ff7936bd1f3", "scanner": "scanner-primary", "fingerprint": "f69fbbfcbc91307d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9db3b5e3aa3d4d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-sectional-pricing.ts:13"}, "properties": {"repobilityId": "93848d014e22e7d0", "scanner": "scanner-primary", "fingerprint": "d9db3b5e3aa3d4d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b363f5cc93a79d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-job-cities.ts:34"}, "properties": {"repobilityId": "992f927cc015b58d", "scanner": "scanner-primary", "fingerprint": "0b363f5cc93a79d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-372270dffa308d52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gbp-reviews-sync-once.ts:10"}, "properties": {"repobilityId": "1e0fe979812bacad", "scanner": "scanner-primary", "fingerprint": "372270dffa308d52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dca94ede7d360faf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-kelly-matice-may-11-2026.ts:57"}, "properties": {"repobilityId": "d36bb1357d1df842", "scanner": "scanner-primary", "fingerprint": "dca94ede7d360faf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5d26b550c9708f40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-google-tokens.js:40"}, "properties": {"repobilityId": "61591bd785079be8", "scanner": "scanner-primary", "fingerprint": "5d26b550c9708f40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46fa5ce2022db950", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-pending.ts:42"}, "properties": {"repobilityId": "c891a2a565e5c431", "scanner": "scanner-primary", "fingerprint": "46fa5ce2022db950", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a0ff35f8fa76f71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-hcp-jobs-week-of-2026-04-13.ts:980"}, "properties": {"repobilityId": "da0bddf4c1db17a8", "scanner": "scanner-primary", "fingerprint": "4a0ff35f8fa76f71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1ab82a6a3c1f295", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-anne-messages.ts:28"}, "properties": {"repobilityId": "6cf3be9645932db3", "scanner": "scanner-primary", "fingerprint": "c1ab82a6a3c1f295", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a66c197cb55c7545", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-telegram-tools-integration.ts:142"}, "properties": {"repobilityId": "024814058445379f", "scanner": "scanner-primary", "fingerprint": "a66c197cb55c7545", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-284e8ada9c7456db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trigger-harry-for-sally.ts:30"}, "properties": {"repobilityId": "1cbe9556e0c78c78", "scanner": "scanner-primary", "fingerprint": "284e8ada9c7456db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-93fc9243ffe32e0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/book-ann-biebel.ts:31"}, "properties": {"repobilityId": "8401064859f7034f", "scanner": "scanner-primary", "fingerprint": "93fc9243ffe32e0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea999a6d9c55ca74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-scenarios.ts:627"}, "properties": {"repobilityId": "253e32bfc2f0269f", "scanner": "scanner-primary", "fingerprint": "ea999a6d9c55ca74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a355e5aa65d1ff7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-drip-enrollments.ts:37"}, "properties": {"repobilityId": "236775997a405204", "scanner": "scanner-primary", "fingerprint": "6a355e5aa65d1ff7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e9162ec99689db9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-google-apis.js:2"}, "properties": {"repobilityId": "78b7b95d44eb7a50", "scanner": "scanner-primary", "fingerprint": "6e9162ec99689db9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f29a2267548acfb0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-evan-booking-source.ts:41"}, "properties": {"repobilityId": "721949692df097c5", "scanner": "scanner-primary", "fingerprint": "f29a2267548acfb0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cae075d59ae0e16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-on-my-way-status.ts:32"}, "properties": {"repobilityId": "ced2665fab358fb5", "scanner": "scanner-primary", "fingerprint": "7cae075d59ae0e16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-411b787b88bf6ae5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-harry-activity.ts:15"}, "properties": {"repobilityId": "45925c64e228531e", "scanner": "scanner-primary", "fingerprint": "411b787b88bf6ae5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e12835382b797db3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/radar-scan-once.ts:8"}, "properties": {"repobilityId": "b3052bc4a7e3f151", "scanner": "scanner-primary", "fingerprint": "e12835382b797db3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f430634711a3630", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gsc-watch-once.ts:10"}, "properties": {"repobilityId": "0a55f88384f1b5bf", "scanner": "scanner-primary", "fingerprint": "9f430634711a3630", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa7fe9a61d9220a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-larkspur-ranking.ts:14"}, "properties": {"repobilityId": "b87b3767b13beaa1", "scanner": "scanner-primary", "fingerprint": "fa7fe9a61d9220a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5aed0785057c2331", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-google-ids.js:26"}, "properties": {"repobilityId": "ebcde6996b8c58c2", "scanner": "scanner-primary", "fingerprint": "5aed0785057c2331", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61447c4959089c0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-matt-back.ts:37"}, "properties": {"repobilityId": "0ae7f7331fcdae48", "scanner": "scanner-primary", "fingerprint": "61447c4959089c0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49e054e58d515a4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/trigger-confirmation.ts:17"}, "properties": {"repobilityId": "81ec397f80d6b499", "scanner": "scanner-primary", "fingerprint": "49e054e58d515a4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd34ae6bf5500d8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/move-kelly-matice-to-noon.ts:54"}, "properties": {"repobilityId": "96abf5dce2f1662f", "scanner": "scanner-primary", "fingerprint": "fd34ae6bf5500d8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f76a40eb02c98037", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/send-booking-confirmation.ts:13"}, "properties": {"repobilityId": "4d9f37883895b343", "scanner": "scanner-primary", "fingerprint": "f76a40eb02c98037", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7d077106dd1cd92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-tools-integration.ts:126"}, "properties": {"repobilityId": "a16a81c7ea44b46e", "scanner": "scanner-primary", "fingerprint": "f7d077106dd1cd92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55b593d533628e8e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-8x5-rug.js:21"}, "properties": {"repobilityId": "c3407e17b5f92ced", "scanner": "scanner-primary", "fingerprint": "55b593d533628e8e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d967b25b31fac2e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-telegram-chat-id.ts:13"}, "properties": {"repobilityId": "8b1a34614842a16a", "scanner": "scanner-primary", "fingerprint": "d967b25b31fac2e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f02ee5cfe2d4b753", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/geocode-service-addresses.ts:88"}, "properties": {"repobilityId": "2f81002e1ffa0dac", "scanner": "scanner-primary", "fingerprint": "f02ee5cfe2d4b753", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63ed71edaac26a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-ops-customers.ts:22"}, "properties": {"repobilityId": "0690d0455532bc77", "scanner": "scanner-primary", "fingerprint": "d63ed71edaac26a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9481f810f11db11", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-recovery-village-recurring.ts:211"}, "properties": {"repobilityId": "d35b40ad41495080", "scanner": "scanner-primary", "fingerprint": "f9481f810f11db11", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-529709d6bc7a04b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-reschedule-slot-token.ts:28"}, "properties": {"repobilityId": "6172325f4cd2f182", "scanner": "scanner-primary", "fingerprint": "529709d6bc7a04b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fb47bf4d54fb880", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-scout-errors.ts:13"}, "properties": {"repobilityId": "138861fd662407b7", "scanner": "scanner-primary", "fingerprint": "4fb47bf4d54fb880", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8e85c5c727d5684", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-lsa-bookings.ts:28"}, "properties": {"repobilityId": "2758c599b6a3333f", "scanner": "scanner-primary", "fingerprint": "e8e85c5c727d5684", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05ad876cad0699e6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/create-conversation-for-sally.ts:25"}, "properties": {"repobilityId": "b8484dddd58c20e8", "scanner": "scanner-primary", "fingerprint": "05ad876cad0699e6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-869260e1bc0f1f0e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/setup-harry-command-webhook.ts:18"}, "properties": {"repobilityId": "f212b461402a09f7", "scanner": "scanner-primary", "fingerprint": "869260e1bc0f1f0e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79c5d6b44238e944", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-harry-infogating.ts:160"}, "properties": {"repobilityId": "9e080817b296dbe0", "scanner": "scanner-primary", "fingerprint": "79c5d6b44238e944", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e24691f159debe0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-todd-status.ts:33"}, "properties": {"repobilityId": "a18dd726beb6c96f", "scanner": "scanner-primary", "fingerprint": "e24691f159debe0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-358609f14771ffb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/approve-appointment.ts:13"}, "properties": {"repobilityId": "c924e68c7299d38c", "scanner": "scanner-primary", "fingerprint": "358609f14771ffb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-024058146db52d4e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-recent-activity.ts:36"}, "properties": {"repobilityId": "ed8a38ef086b099c", "scanner": "scanner-primary", "fingerprint": "024058146db52d4e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-738249fa03904e15", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-completed-job-stats.js:24"}, "properties": {"repobilityId": "ccf568ec9ca582b6", "scanner": "scanner-primary", "fingerprint": "738249fa03904e15", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4e63f1001599857", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-radar-status.ts:12"}, "properties": {"repobilityId": "3829d692aee4ecfb", "scanner": "scanner-primary", "fingerprint": "a4e63f1001599857", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83d3ad6121d6abd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/add-flood-restoration.ts:25"}, "properties": {"repobilityId": "6ba7cecafb044655", "scanner": "scanner-primary", "fingerprint": "83d3ad6121d6abd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc4c0c091b29cc96", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-evan.ts:31"}, "properties": {"repobilityId": "b5ba20675229915f", "scanner": "scanner-primary", "fingerprint": "cc4c0c091b29cc96", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df449d55406feb7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-sectional.ts:23"}, "properties": {"repobilityId": "c3f2b7b009230f67", "scanner": "scanner-primary", "fingerprint": "df449d55406feb7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea068108bf542a18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-sighting-locations.ts:22"}, "properties": {"repobilityId": "b3e77349ac11dfa8", "scanner": "scanner-primary", "fingerprint": "ea068108bf542a18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-378ce3cc3ed4e255", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ARCHIVE_TEMP_FILES/check-twilio-setup.js:8"}, "properties": {"repobilityId": "dcbfdb334c5774d0", "scanner": "scanner-primary", "fingerprint": "378ce3cc3ed4e255", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abacb3a0ec1caa84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/auth-button.tsx:16"}, "properties": {"repobilityId": "15a668619f7fb3cf", "scanner": "scanner-primary", "fingerprint": "abacb3a0ec1caa84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-381167d2203837cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/tech/tech-day-schedule.tsx:56"}, "properties": {"repobilityId": "824432109d4f5307", "scanner": "scanner-primary", "fingerprint": "381167d2203837cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82d8beaca6b95f0e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/reactivation-control-center.tsx:679"}, "properties": {"repobilityId": "1d4940a7d995429a", "scanner": "scanner-primary", "fingerprint": "82d8beaca6b95f0e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-09b6b052076dc2bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/upload-form.tsx:443"}, "properties": {"repobilityId": "3e0b4c47b6cdbf17", "scanner": "scanner-primary", "fingerprint": "09b6b052076dc2bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58596d2553f972ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/conversations-view.tsx:974"}, "properties": {"repobilityId": "016d69a1081c5335", "scanner": "scanner-primary", "fingerprint": "58596d2553f972ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-400ec942bd645b0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/mobile-header.tsx:409"}, "properties": {"repobilityId": "8e1ada7d9f46da7d", "scanner": "scanner-primary", "fingerprint": "400ec942bd645b0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57d609780b8742f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/softphone.tsx:228"}, "properties": {"repobilityId": "a2316094a1d2869f", "scanner": "scanner-primary", "fingerprint": "57d609780b8742f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f3da0ccd6b5eddd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ranger-dashboard.tsx:733"}, "properties": {"repobilityId": "973b5c99cdd9e815", "scanner": "scanner-primary", "fingerprint": "f3da0ccd6b5eddd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd66e790f6a18830", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/admin-partners-view.tsx:191"}, "properties": {"repobilityId": "5942bded8c820e43", "scanner": "scanner-primary", "fingerprint": "bd66e790f6a18830", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c01f85eebfdf97d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/operations-dashboard.tsx:998"}, "properties": {"repobilityId": "7ee4516ee3d6d9fe", "scanner": "scanner-primary", "fingerprint": "5c01f85eebfdf97d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afddefca817a4f47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/drip-campaigns-tab.tsx:488"}, "properties": {"repobilityId": "ffdea165aa4e2e02", "scanner": "scanner-primary", "fingerprint": "afddefca817a4f47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-646b7f7ffab2d905", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/TimesheetsView.tsx:244"}, "properties": {"repobilityId": "6d992ee1abd613f7", "scanner": "scanner-primary", "fingerprint": "646b7f7ffab2d905", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ebba28a14a49d4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/MyDayView.tsx:169"}, "properties": {"repobilityId": "d7b02a7c4bdcbce7", "scanner": "scanner-primary", "fingerprint": "0ebba28a14a49d4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e2c8b6e4cc08306", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/recurring-manager.tsx:326"}, "properties": {"repobilityId": "8aeed8e083f0a4bb", "scanner": "scanner-primary", "fingerprint": "3e2c8b6e4cc08306", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-daf9621c74467deb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/admin/ops/recurring-manager.tsx:602"}, "properties": {"repobilityId": "c7ca850beb0e2334", "scanner": "scanner-primary", "fingerprint": "daf9621c74467deb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c45be62b84da85bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/estimate-detail.tsx:1655"}, "properties": {"repobilityId": "33605343ba78162e", "scanner": "scanner-primary", "fingerprint": "c45be62b84da85bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94a8b31e9e652c5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/ops/operations-schedule.tsx:2437"}, "properties": {"repobilityId": "ff241a6d1fb2094b", "scanner": "scanner-primary", "fingerprint": "94a8b31e9e652c5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0262dcd6adce3ce0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nfc/NfcBookingWidget.tsx:1788"}, "properties": {"repobilityId": "7c53ec2750dee1f3", "scanner": "scanner-primary", "fingerprint": "0262dcd6adce3ce0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb53d38a21d64623", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/nfc/NfcBookingWidget.tsx:198"}, "properties": {"repobilityId": "70be39000e4bde99", "scanner": "scanner-primary", "fingerprint": "eb53d38a21d64623", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-68bbef9aee44f1c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/upload/route.ts:192"}, "properties": {"repobilityId": "10a6a2e5c09bd09e", "scanner": "scanner-primary", "fingerprint": "68bbef9aee44f1c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-170d9a980ca1ccf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/generate/route.ts:11"}, "properties": {"repobilityId": "66ab31d5fd65abb6", "scanner": "scanner-primary", "fingerprint": "170d9a980ca1ccf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ea0f5ccf10d54b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/leads/route.ts:97"}, "properties": {"repobilityId": "2bae8ea969c2f8fc", "scanner": "scanner-primary", "fingerprint": "7ea0f5ccf10d54b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-249c71c3bc6687dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/conversations/[id]/reply/route.ts:44"}, "properties": {"repobilityId": "01d8684203e7358f", "scanner": "scanner-primary", "fingerprint": "249c71c3bc6687dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30bac4a43b8d8de0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/sightings/route.ts:40"}, "properties": {"repobilityId": "615bc3124d579a99", "scanner": "scanner-primary", "fingerprint": "30bac4a43b8d8de0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1406828294e0baa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/tap/track/route.ts:166"}, "properties": {"repobilityId": "820c5e8c0ce1fe98", "scanner": "scanner-primary", "fingerprint": "c1406828294e0baa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3621ef0c3197b146", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/referrals/route.ts:213"}, "properties": {"repobilityId": "150a86baf1b26389", "scanner": "scanner-primary", "fingerprint": "3621ef0c3197b146", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c3faa973118541c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/ops/recurring/add-batch-job/route.ts:109"}, "properties": {"repobilityId": "a2e9e031dd1e33e3", "scanner": "scanner-primary", "fingerprint": "5c3faa973118541c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce75fef8847c565b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voice-twiml/route.ts:54"}, "properties": {"repobilityId": "8c79c540c7af390d", "scanner": "scanner-primary", "fingerprint": "ce75fef8847c565b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ced9f247c5fcd1d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-after-hours/route.ts:56"}, "properties": {"repobilityId": "7993ab2218516122", "scanner": "scanner-primary", "fingerprint": "3ced9f247c5fcd1d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00a59142aee39ff7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/ivr-menu/route.ts:21"}, "properties": {"repobilityId": "903134bc7c64f4b7", "scanner": "scanner-primary", "fingerprint": "00a59142aee39ff7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27e905bb34664457", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/call-router/route.ts:51"}, "properties": {"repobilityId": "78c0ecc305b93fdc", "scanner": "scanner-primary", "fingerprint": "27e905bb34664457", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60493a5819a6befd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/voicemail/route.ts:142"}, "properties": {"repobilityId": "c7ee92e43a3e3b38", "scanner": "scanner-primary", "fingerprint": "60493a5819a6befd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b53e353263888db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/sms-incoming/route.ts:888"}, "properties": {"repobilityId": "718738fb6c5082f5", "scanner": "scanner-primary", "fingerprint": "3b53e353263888db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7213eeab1291fc53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twilio/dial-failover/route.ts:21"}, "properties": {"repobilityId": "d2c0884da34c5820", "scanner": "scanner-primary", "fingerprint": "7213eeab1291fc53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-21686e7dbf61a958", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/nurture-leads/route.ts:66"}, "properties": {"repobilityId": "8f82ad96df45b8b3", "scanner": "scanner-primary", "fingerprint": "21686e7dbf61a958", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6fcd8606cc35a61f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/quickbooks-sync/route.ts:59"}, "properties": {"repobilityId": "9262c515a8877136", "scanner": "scanner-primary", "fingerprint": "6fcd8606cc35a61f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42cc127396785c0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/gps-cleanup/route.ts:53"}, "properties": {"repobilityId": "008fd666321b3159", "scanner": "scanner-primary", "fingerprint": "42cc127396785c0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cce57f7bcc6404ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/station-health/route.ts:191"}, "properties": {"repobilityId": "2887a3f0121c7bd6", "scanner": "scanner-primary", "fingerprint": "cce57f7bcc6404ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb1fc3a1129ec29f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/recurring-jobs/route.ts:27"}, "properties": {"repobilityId": "d36327e90cdb4a82", "scanner": "scanner-primary", "fingerprint": "eb1fc3a1129ec29f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fafa0bf3b58dd486", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/job-reminders/route.ts:43"}, "properties": {"repobilityId": "07718392a5255b4b", "scanner": "scanner-primary", "fingerprint": "fafa0bf3b58dd486", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3168bbac97168103", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/appointment-booked/route.ts:57"}, "properties": {"repobilityId": "9622fc1582e9b702", "scanner": "scanner-primary", "fingerprint": "3168bbac97168103", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2fde69580a9f815", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/sightings/share/[id]/page.tsx:149"}, "properties": {"repobilityId": "6ecb55e710dd832b", "scanner": "scanner-primary", "fingerprint": "f2fde69580a9f815", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-67261c00d2339caa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/layout.tsx:23"}, "properties": {"repobilityId": "17a102bc9793a062", "scanner": "scanner-primary", "fingerprint": "67261c00d2339caa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55285646e518243a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/radar/page.tsx:653"}, "properties": {"repobilityId": "6b21d4290d0530e5", "scanner": "scanner-primary", "fingerprint": "55285646e518243a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-659b446824883a43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/comms/page.tsx:166"}, "properties": {"repobilityId": "14578e7ada83a7a9", "scanner": "scanner-primary", "fingerprint": "659b446824883a43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e834b37ebaea9f2", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/comms/page.tsx:146"}, "properties": {"repobilityId": "8e76b3e218019ad9", "scanner": "scanner-primary", "fingerprint": "5e834b37ebaea9f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-2e1897f953126311", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/email-outbox/page.tsx:96"}, "properties": {"repobilityId": "4bc645ce0f436faa", "scanner": "scanner-primary", "fingerprint": "2e1897f953126311", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-590769d97968f54e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/operations/estimates/page.tsx:142"}, "properties": {"repobilityId": "8aa692c971ef8ee1", "scanner": "scanner-primary", "fingerprint": "590769d97968f54e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59d0516b18d3dd6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/page.tsx:1219"}, "properties": {"repobilityId": "d7adeca9028f7f6d", "scanner": "scanner-primary", "fingerprint": "59d0516b18d3dd6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc7f437cb7d64ec0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/promo-codes/page.tsx:646"}, "properties": {"repobilityId": "1025b55364539af3", "scanner": "scanner-primary", "fingerprint": "dc7f437cb7d64ec0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e4662ff730fb3898", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/sightings/page.tsx:593"}, "properties": {"repobilityId": "8eb54aac12d47fbe", "scanner": "scanner-primary", "fingerprint": "e4662ff730fb3898", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ce3ba9adbf3b584", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/admin/tools/combine/page.tsx:79"}, "properties": {"repobilityId": "bd7559948c1d4a96", "scanner": "scanner-primary", "fingerprint": "5ce3ba9adbf3b584", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf26f32e6377d8fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/blacklist/page.tsx:263"}, "properties": {"repobilityId": "80588c80d9bf51ce", "scanner": "scanner-primary", "fingerprint": "bf26f32e6377d8fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac038273fcefba22", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/stats/page.tsx:1240"}, "properties": {"repobilityId": "baa4051291fe1bdd", "scanner": "scanner-primary", "fingerprint": "ac038273fcefba22", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89b8204c7b41511a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/phone/page.tsx:83"}, "properties": {"repobilityId": "9cf8ed76b9e851d0", "scanner": "scanner-primary", "fingerprint": "89b8204c7b41511a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c14c485fc4eaae8f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/work/[city]/[slug]/page.tsx:189"}, "properties": {"repobilityId": "f4d58055b690e024", "scanner": "scanner-primary", "fingerprint": "c14c485fc4eaae8f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7551a6b43dae8481", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/book/page.tsx:80"}, "properties": {"repobilityId": "e6e11fe8818b5854", "scanner": "scanner-primary", "fingerprint": "7551a6b43dae8481", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-2dc2202e70d8af7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ai.ts:200"}, "properties": {"repobilityId": "1a125dd338e63f30", "scanner": "scanner-primary", "fingerprint": "2dc2202e70d8af7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22a9c2935909665e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/twilio.ts:68"}, "properties": {"repobilityId": "cb66e675d0649f7b", "scanner": "scanner-primary", "fingerprint": "22a9c2935909665e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af69ee52783e7ab8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-indexing.ts:88"}, "properties": {"repobilityId": "e122e862d865a93b", "scanner": "scanner-primary", "fingerprint": "af69ee52783e7ab8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd0c83962b1cd0e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ringcentral.ts:110"}, "properties": {"repobilityId": "3ea9cca5095af2ca", "scanner": "scanner-primary", "fingerprint": "fd0c83962b1cd0e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88ea35051f16553d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/openai-chat.ts:272"}, "properties": {"repobilityId": "6eb9395a3d50a12e", "scanner": "scanner-primary", "fingerprint": "88ea35051f16553d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb7c03f943c97fef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/quickbooks-api.ts:728"}, "properties": {"repobilityId": "af5e8e1c7f2a3cae", "scanner": "scanner-primary", "fingerprint": "eb7c03f943c97fef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-024c936fd9acdd41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/google-business.ts:215"}, "properties": {"repobilityId": "a14621e24f2d82e3", "scanner": "scanner-primary", "fingerprint": "024c936fd9acdd41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c91b20716b3c05d6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/onesignal.ts:103"}, "properties": {"repobilityId": "220e3fb9e7dadb81", "scanner": "scanner-primary", "fingerprint": "c91b20716b3c05d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ff6a19ac8662b79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/blacklist.ts:14"}, "properties": {"repobilityId": "1c94e0ce64627356", "scanner": "scanner-primary", "fingerprint": "4ff6a19ac8662b79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df48bdef0f2b1569", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/telegram.ts:63"}, "properties": {"repobilityId": "78447394900c048f", "scanner": "scanner-primary", "fingerprint": "df48bdef0f2b1569", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a1eff6429121b12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/ops/sms-harry-tools.ts:1756"}, "properties": {"repobilityId": "3b98e62278d9c5f0", "scanner": "scanner-primary", "fingerprint": "8a1eff6429121b12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac94503a5f3594ef", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/ranger-gmail-auth.mjs:6"}, "properties": {"repobilityId": "fa9bcdf5e6279220", "scanner": "scanner-primary", "fingerprint": "ac94503a5f3594ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/ranger-gmail-auth.mjs"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-01efacfea28a75cf", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/availability/route.ts:12"}, "properties": {"repobilityId": "f6ce6df7db5e992e", "scanner": "scanner-primary", "fingerprint": "01efacfea28a75cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/agent/availability/route.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-c0fa168ef0dd4373", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/estimate/route.ts:11"}, "properties": {"repobilityId": "b9378fbed820f1f5", "scanner": "scanner-primary", "fingerprint": "c0fa168ef0dd4373", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/agent/estimate/route.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-b20b18d93b780fa7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/services/route.ts:13"}, "properties": {"repobilityId": "cfba17fb277c402a", "scanner": "scanner-primary", "fingerprint": "b20b18d93b780fa7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/agent/services/route.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-3e0b59599a5123a8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/agent/book/route.ts:9"}, "properties": {"repobilityId": "b9cb63ae3b2cb9a5", "scanner": "scanner-primary", "fingerprint": "3e0b59599a5123a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/agent/book/route.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-47a6be6432696753", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/lead-sources/route.ts:7"}, "properties": {"repobilityId": "8969c962d1e545f4", "scanner": "scanner-primary", "fingerprint": "47a6be6432696753", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/lead-sources/route.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-44cf04d243619a01", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/promo-preview/route.ts:6"}, "properties": {"repobilityId": "c6d5c4d8fff81ecb", "scanner": "scanner-primary", "fingerprint": "44cf04d243619a01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/promo-preview/route.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-c36060f4e6d46013", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/availability/route.ts:7"}, "properties": {"repobilityId": "53dfd93c69109271", "scanner": "scanner-primary", "fingerprint": "c36060f4e6d46013", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/availability/route.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-0e8ee9cc9e3088ee", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/reviews/route.ts:22"}, "properties": {"repobilityId": "d405f6cf5f244d66", "scanner": "scanner-primary", "fingerprint": "0e8ee9cc9e3088ee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/reviews/route.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-fe592a7b3b6c5310", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/appointments/route.ts:34"}, "properties": {"repobilityId": "944d1605c6106fd8", "scanner": "scanner-primary", "fingerprint": "fe592a7b3b6c5310", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/appointments/route.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-92b77d16c786a94b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/services/route.ts:5"}, "properties": {"repobilityId": "670b6cee9715c639", "scanner": "scanner-primary", "fingerprint": "92b77d16c786a94b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/services/route.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-499c1b001335554f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/review-stats/route.ts:52"}, "properties": {"repobilityId": "08a0c7d9e0f23a78", "scanner": "scanner-primary", "fingerprint": "499c1b001335554f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/review-stats/route.ts"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-d9bd4122d62f03da", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/public/jobs/route.ts:123"}, "properties": {"repobilityId": "76def57a0d6ac2aa", "scanner": "scanner-primary", "fingerprint": "d9bd4122d62f03da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/public/jobs/route.ts"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-e1737c2289ab3fda", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/app/api/stats/public/route.ts:171"}, "properties": {"repobilityId": "fe79e15825aa78b7", "scanner": "scanner-primary", "fingerprint": "e1737c2289ab3fda", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/api/stats/public/route.ts"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-217a4475d59f2655", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/sightings/share/[id]/page.tsx:149"}, "properties": {"repobilityId": "7262120be2ac89d5", "scanner": "scanner-primary", "fingerprint": "217a4475d59f2655", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/sightings/share/[id]/page.tsx"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-2cd9076841ae42b6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/work/[city]/[slug]/page.tsx:189"}, "properties": {"repobilityId": "8f842376e9f095f0", "scanner": "scanner-primary", "fingerprint": "2cd9076841ae42b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/work/[city]/[slug]/page.tsx"}, "region": {"startLine": 189}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-c0130e61a40ab9a8", "level": "note", "message": {"text": "Very large file: scripts/retell-test-bridge.mjs (1988 lines)"}, "properties": {"repobilityId": "ab295c0b6126a535", "scanner": "scanner-primary", "fingerprint": "c0130e61a40ab9a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a020effd5ec8fa81", "level": "note", "message": {"text": "Very large file: scripts/retell-bridge.mjs (2281 lines)"}, "properties": {"repobilityId": "e08fcbeee3725333", "scanner": "scanner-primary", "fingerprint": "a020effd5ec8fa81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-27d3bf052250a0a8", "level": "note", "message": {"text": "Very large file: src/components/admin/admin-partners-view.tsx (1412 lines)"}, "properties": {"repobilityId": "33ce2fc5e42af925", "scanner": "scanner-primary", "fingerprint": "27d3bf052250a0a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-368b6e0f93855b44", "level": "note", "message": {"text": "Very large file: src/components/admin/operations-dashboard.tsx (2078 lines)"}, "properties": {"repobilityId": "1402789ea76f57c8", "scanner": "scanner-primary", "fingerprint": "368b6e0f93855b44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-97740a5adfa77aec", "level": "note", "message": {"text": "Very large file: src/components/admin/ops/invoice-detail.tsx (2697 lines)"}, "properties": {"repobilityId": "4a2be56232d96459", "scanner": "scanner-primary", "fingerprint": "97740a5adfa77aec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ee7b3c56f7c67b37", "level": "note", "message": {"text": "Very large file: src/components/admin/ops/recurring-manager.tsx (3174 lines)"}, "properties": {"repobilityId": "57a94ec3e51a4053", "scanner": "scanner-primary", "fingerprint": "ee7b3c56f7c67b37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e0eb40be7032384", "level": "note", "message": {"text": "Very large file: src/components/admin/ops/estimate-detail.tsx (1713 lines)"}, "properties": {"repobilityId": "30cc4ff0d6ee0d5b", "scanner": "scanner-primary", "fingerprint": "8e0eb40be7032384", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0df7d994a5076c99", "level": "note", "message": {"text": "Very large file: src/components/admin/ops/operations-schedule.tsx (4109 lines)"}, "properties": {"repobilityId": "2bf82e3658ff098f", "scanner": "scanner-primary", "fingerprint": "0df7d994a5076c99", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-25f454dd7534b20b", "level": "note", "message": {"text": "Very large file: src/components/admin/ops/new-job-workspace.tsx (1851 lines)"}, "properties": {"repobilityId": "0cecd39b72fc5a6f", "scanner": "scanner-primary", "fingerprint": "25f454dd7534b20b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c269baf937e7b0f2", "level": "note", "message": {"text": "Very large file: src/components/nfc/NfcBookingWidget.tsx (1814 lines)"}, "properties": {"repobilityId": "29d1e625b37d8746", "scanner": "scanner-primary", "fingerprint": "c269baf937e7b0f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bdf897f4a5625828", "level": "note", "message": {"text": "Very large file: src/app/api/telegram/harry-command/route.ts (4684 lines)"}, "properties": {"repobilityId": "8d948db4e878d813", "scanner": "scanner-primary", "fingerprint": "bdf897f4a5625828", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-681c022105b560eb", "level": "note", "message": {"text": "Very large file: src/app/api/twilio/sms-incoming/route.ts (2028 lines)"}, "properties": {"repobilityId": "ed38459d371793ea", "scanner": "scanner-primary", "fingerprint": "681c022105b560eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-41c869c73ecaca02", "level": "note", "message": {"text": "Very large file: src/app/admin/radar/page.tsx (1917 lines)"}, "properties": {"repobilityId": "88aaf743335ea661", "scanner": "scanner-primary", "fingerprint": "41c869c73ecaca02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d1d246fcade54dba", "level": "note", "message": {"text": "Very large file: src/app/admin/vendors/page.tsx (1558 lines)"}, "properties": {"repobilityId": "8e9140a55619179f", "scanner": "scanner-primary", "fingerprint": "d1d246fcade54dba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d3658d9bb8bf0759", "level": "note", "message": {"text": "Very large file: src/app/admin/stats/page.tsx (1748 lines)"}, "properties": {"repobilityId": "cac1e934fcbebbf2", "scanner": "scanner-primary", "fingerprint": "d3658d9bb8bf0759", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b1293273032812e5", "level": "note", "message": {"text": "Very large file: src/app/book/page.tsx (1421 lines)"}, "properties": {"repobilityId": "b7447ac9af6a2846", "scanner": "scanner-primary", "fingerprint": "b1293273032812e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-834ac47e1982e75a", "level": "note", "message": {"text": "Very large file: src/lib/ops/sms-harry-tools.ts (2134 lines)"}, "properties": {"repobilityId": "a4fbbfac109aa52e", "scanner": "scanner-primary", "fingerprint": "834ac47e1982e75a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4026e214b2bfcd7d", "level": "note", "message": {"text": "Very large file: src/lib/retell/rebecca-tools.ts (3096 lines)"}, "properties": {"repobilityId": "6cb17354833284ff", "scanner": "scanner-primary", "fingerprint": "4026e214b2bfcd7d", "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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "dff222b5ccddd09f", "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": "ec63e5e75a3362a6", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "eab2a324ed635dcf", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "ea9a1c14277dd548", "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": "f735dbf6c17fdec6", "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": "98c80c9d9271b8a7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-3d5c21cabc8e63e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test_post.js:3"}, "properties": {"repobilityId": "c0d9398c558595c5", "scanner": "scanner-primary", "fingerprint": "3d5c21cabc8e63e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca6824f7c8d3030a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/retell-test-bridge.mjs:191"}, "properties": {"repobilityId": "4777d1344c530d98", "scanner": "scanner-primary", "fingerprint": "ca6824f7c8d3030a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cfbe5f3ab033cc5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-ann-biebel.ts:94"}, "properties": {"repobilityId": "75d47efa1e14efc6", "scanner": "scanner-primary", "fingerprint": "8cfbe5f3ab033cc5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-014bf6982ea4cba4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/book-katie-correct.mjs:47"}, "properties": {"repobilityId": "5b87b1abc319b012", "scanner": "scanner-primary", "fingerprint": "014bf6982ea4cba4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7baa8b99832a3d12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/send-booking-confirmation.ts:15"}, "properties": {"repobilityId": "15081bd51d749fe1", "scanner": "scanner-primary", "fingerprint": "7baa8b99832a3d12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf5e2cf13fb625b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/get-telegram-chat-id.ts:61"}, "properties": {"repobilityId": "03d48757f1b98e80", "scanner": "scanner-primary", "fingerprint": "bf5e2cf13fb625b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-309e699b0a192927", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/geocode-service-addresses.ts:54"}, "properties": {"repobilityId": "594aae9daca88bae", "scanner": "scanner-primary", "fingerprint": "309e699b0a192927", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96473d8c6fe51456", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/test-reschedule-slot-token.ts:2"}, "properties": {"repobilityId": "b3fd54642da199ae", "scanner": "scanner-primary", "fingerprint": "96473d8c6fe51456", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fb96b61b5d57a98", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/repair-four-invoices.mjs:1"}, "properties": {"repobilityId": "ab89b7c0f452e704", "scanner": "scanner-primary", "fingerprint": "3fb96b61b5d57a98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a84ebd389a1c5990", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gsc-bulk-inspect.mjs:14"}, "properties": {"repobilityId": "07a0c8f8b2754b6a", "scanner": "scanner-primary", "fingerprint": "a84ebd389a1c5990", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-783d45f69cf72c7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/setup-harry-command-webhook.ts:24"}, "properties": {"repobilityId": "3212e4ff61deafcf", "scanner": "scanner-primary", "fingerprint": "783d45f69cf72c7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3ff471d9f0c2058f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/mockServiceWorker.js:238"}, "properties": {"repobilityId": "60bcab180cfb7f05", "scanner": "scanner-primary", "fingerprint": "3ff471d9f0c2058f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d96e970a0d86be2a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/tech/tech-job-detail.tsx:90"}, "properties": {"repobilityId": "5b1989926140b01b", "scanner": "scanner-primary", "fingerprint": "d96e970a0d86be2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d78a1038e8af21c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/reactivation-control-center.tsx:212"}, "properties": {"repobilityId": "2164807aa6500339", "scanner": "scanner-primary", "fingerprint": "9d78a1038e8af21c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3293edee24b78967", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/upload-form.tsx:143"}, "properties": {"repobilityId": "3a15866fbf0f0caa", "scanner": "scanner-primary", "fingerprint": "3293edee24b78967", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f5d757f5b129eebd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/job-editor.tsx:109"}, "properties": {"repobilityId": "319d3b6793881275", "scanner": "scanner-primary", "fingerprint": "f5d757f5b129eebd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e24b1abee0bc3d24", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/before-after-combiner.tsx:86"}, "properties": {"repobilityId": "5113e6000568df6e", "scanner": "scanner-primary", "fingerprint": "e24b1abee0bc3d24", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e060e80ea4bc7a25", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/mobile-bottom-nav.tsx:25"}, "properties": {"repobilityId": "ade5dae8b9d09895", "scanner": "scanner-primary", "fingerprint": "e060e80ea4bc7a25", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30a980a4b3f62647", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/harry-control-dashboard.tsx:80"}, "properties": {"repobilityId": "62e9106f2a3297f1", "scanner": "scanner-primary", "fingerprint": "30a980a4b3f62647", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7b55f884b83c9db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/admin-partners-view.tsx:146"}, "properties": {"repobilityId": "1f60aa13b38433af", "scanner": "scanner-primary", "fingerprint": "d7b55f884b83c9db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-909504519260bbc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/operations-dashboard.tsx:493"}, "properties": {"repobilityId": "0cd1116c1ddd5cdb", "scanner": "scanner-primary", "fingerprint": "909504519260bbc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb144deeb50e5f18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/agent-api-settings.tsx:90"}, "properties": {"repobilityId": "d3fcf64d2bbcd459", "scanner": "scanner-primary", "fingerprint": "eb144deeb50e5f18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4cbed91bf8fe22be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/invoice-detail.tsx:321"}, "properties": {"repobilityId": "20d04d8cc24d87e8", "scanner": "scanner-primary", "fingerprint": "4cbed91bf8fe22be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31285787f44ed2b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-settings.tsx:272"}, "properties": {"repobilityId": "cfda4c64f2507263", "scanner": "scanner-primary", "fingerprint": "31285787f44ed2b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6dbb5a0396ae6c9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/TimesheetsView.tsx:71"}, "properties": {"repobilityId": "34524a993d6edd37", "scanner": "scanner-primary", "fingerprint": "6dbb5a0396ae6c9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3292caa884450956", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-manager.tsx:518"}, "properties": {"repobilityId": "09ec242177757926", "scanner": "scanner-primary", "fingerprint": "3292caa884450956", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e8b6aa7a6de8b438", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/appointment-detail.tsx:485"}, "properties": {"repobilityId": "a65436e50938fa89", "scanner": "scanner-primary", "fingerprint": "e8b6aa7a6de8b438", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2849e2ff6028de10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/admin/ops/operations-schedule.tsx:793"}, "properties": {"repobilityId": "4c12cd4e036ed492", "scanner": "scanner-primary", "fingerprint": "2849e2ff6028de10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12821d01b1773c7d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/operations-schedule.tsx:844"}, "properties": {"repobilityId": "4178f65fa4c5eed7", "scanner": "scanner-primary", "fingerprint": "12821d01b1773c7d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07e886318acd83e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/recurring-visit-detail.tsx:256"}, "properties": {"repobilityId": "0df321aa5fce5ed4", "scanner": "scanner-primary", "fingerprint": "07e886318acd83e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a36a2e53d6bb777d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/new-job-workspace.tsx:352"}, "properties": {"repobilityId": "a23fad335e300dc5", "scanner": "scanner-primary", "fingerprint": "a36a2e53d6bb777d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef409999c207e125", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/ops/PayrollTimesheetsView.tsx:97"}, "properties": {"repobilityId": "d9955cfb1d57be7d", "scanner": "scanner-primary", "fingerprint": "ef409999c207e125", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74547b7d8aca7276", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/nfc/NfcBookingWidget.tsx:510"}, "properties": {"repobilityId": "e6805457e70492de", "scanner": "scanner-primary", "fingerprint": "74547b7d8aca7276", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4ed20f45fcdf967", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/sitemap.ts:52"}, "properties": {"repobilityId": "2bf1cb4db2a419f5", "scanner": "scanner-primary", "fingerprint": "f4ed20f45fcdf967", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2afde6412690da69", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/posts/promotional/route.ts:190"}, "properties": {"repobilityId": "7e632eb825dc3494", "scanner": "scanner-primary", "fingerprint": "2afde6412690da69", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a830320b98774523", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/telegram/harry-command/route.ts:1199"}, "properties": {"repobilityId": "3a037620a6bb1dfc", "scanner": "scanner-primary", "fingerprint": "a830320b98774523", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74e1dab2e00378b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/ops/address-suggest/route.ts:54"}, "properties": {"repobilityId": "bd11fae5eeafddb9", "scanner": "scanner-primary", "fingerprint": "74e1dab2e00378b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d641905f5f9eacfe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/george/route.ts:156"}, "properties": {"repobilityId": "6bb93f650b640128", "scanner": "scanner-primary", "fingerprint": "d641905f5f9eacfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ebb5b410346713d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/call-logs/recording/route.ts:33"}, "properties": {"repobilityId": "e3687b1e49b7404f", "scanner": "scanner-primary", "fingerprint": "ebb5b410346713d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f732bf04eaedbdb2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/streetview/route.ts:29"}, "properties": {"repobilityId": "93408bcbb482c406", "scanner": "scanner-primary", "fingerprint": "f732bf04eaedbdb2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a68a331fc4eeed1", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/twilio/sms-incoming/route.ts:372"}, "properties": {"repobilityId": "abaecf28a8548520", "scanner": "scanner-primary", "fingerprint": "3a68a331fc4eeed1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1adcc5775fe99a9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/public/chat/route.ts:31"}, "properties": {"repobilityId": "aeeb62a2f76f81bf", "scanner": "scanner-primary", "fingerprint": "1adcc5775fe99a9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc04c819e5ba2719", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/book/route.ts:34"}, "properties": {"repobilityId": "f46bbf57218b26c8", "scanner": "scanner-primary", "fingerprint": "bc04c819e5ba2719", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-077cff1d9f9e4ae8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sightings/page.tsx:281"}, "properties": {"repobilityId": "9f55d94e113fb392", "scanner": "scanner-primary", "fingerprint": "077cff1d9f9e4ae8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd41ad88e6da0bca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/radar/page.tsx:448"}, "properties": {"repobilityId": "8171fe1176c4c39f", "scanner": "scanner-primary", "fingerprint": "dd41ad88e6da0bca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2deadcfa56062dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/email-outbox/page.tsx:192"}, "properties": {"repobilityId": "9bfc5699eae707ee", "scanner": "scanner-primary", "fingerprint": "e2deadcfa56062dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be4088c0828cd463", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/sms-outbox/page.tsx:41"}, "properties": {"repobilityId": "47fd2700416b9205", "scanner": "scanner-primary", "fingerprint": "be4088c0828cd463", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5803bfbfd2817b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/promo-codes/page.tsx:199"}, "properties": {"repobilityId": "3e4e910a40b6f495", "scanner": "scanner-primary", "fingerprint": "c5803bfbfd2817b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be9823809c45006c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/vendors/page.tsx:380"}, "properties": {"repobilityId": "589cff85ccd6d376", "scanner": "scanner-primary", "fingerprint": "be9823809c45006c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3882b63e78d44faa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/tools/combine/page.tsx:108"}, "properties": {"repobilityId": "4169e12509cdd26c", "scanner": "scanner-primary", "fingerprint": "3882b63e78d44faa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1942106e54233335", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/rabecca/page.tsx:67"}, "properties": {"repobilityId": "e15683312d106308", "scanner": "scanner-primary", "fingerprint": "1942106e54233335", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d29bb619bd8802a7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/social-posts/page.tsx:1127"}, "properties": {"repobilityId": "5661e1475d9bba35", "scanner": "scanner-primary", "fingerprint": "d29bb619bd8802a7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e1b2cd0a0231e5e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/stats/lead-sources/page.tsx:61"}, "properties": {"repobilityId": "32d97b53908bc277", "scanner": "scanner-primary", "fingerprint": "e1b2cd0a0231e5e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3fcbe6ac8604cf0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/location/[partnerId]/contest/page.tsx:287"}, "properties": {"repobilityId": "92c7fd5709b7c0df", "scanner": "scanner-primary", "fingerprint": "f3fcbe6ac8604cf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8375300be058e423", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/book/page.tsx:260"}, "properties": {"repobilityId": "df05524029b84df1", "scanner": "scanner-primary", "fingerprint": "8375300be058e423", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3918a879fb30eec6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/harry-command-bot.ts:58"}, "properties": {"repobilityId": "2792f9af94bc2f39", "scanner": "scanner-primary", "fingerprint": "3918a879fb30eec6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-744b859ac694cdfd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/web-search.ts:17"}, "properties": {"repobilityId": "6468a3f3cf6af0e5", "scanner": "scanner-primary", "fingerprint": "744b859ac694cdfd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd0fc37e515ee06f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gbp-reviews.ts:54"}, "properties": {"repobilityId": "41b6d4fe1215058c", "scanner": "scanner-primary", "fingerprint": "dd0fc37e515ee06f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e4802e9000d8fe2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/serpApi.ts:120"}, "properties": {"repobilityId": "3eb8fd577046ca90", "scanner": "scanner-primary", "fingerprint": "2e4802e9000d8fe2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01fbe22e88921a52", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/openai-chat.ts:665"}, "properties": {"repobilityId": "4cc335ff74878f5b", "scanner": "scanner-primary", "fingerprint": "01fbe22e88921a52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b00394bdcb3a503", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-api.ts:20"}, "properties": {"repobilityId": "a0ec5c3d2af6681b", "scanner": "scanner-primary", "fingerprint": "6b00394bdcb3a503", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e816c230afb1f095", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/quickbooks-auth.ts:44"}, "properties": {"repobilityId": "519db2cf4b2e82fc", "scanner": "scanner-primary", "fingerprint": "e816c230afb1f095", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe0af9fd8e27e19f", "level": "note", "message": {"text": "Legacy-named symbol `searchconsole_v1` in src/lib/gsc.ts:9"}, "properties": {"repobilityId": "3037bc22eab74533", "scanner": "scanner-primary", "fingerprint": "fe0af9fd8e27e19f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4003f9f2c3ab862e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/gsc.ts:105"}, "properties": {"repobilityId": "b27a442a5156c8e1", "scanner": "scanner-primary", "fingerprint": "4003f9f2c3ab862e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d386f1b90e5a7d40", "level": "note", "message": {"text": "Legacy-named symbol `was_legacy` in src/lib/lead-sources.ts:54"}, "properties": {"repobilityId": "e881e3e1c26e75fa", "scanner": "scanner-primary", "fingerprint": "d386f1b90e5a7d40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5a94382b81eea16a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/google-business.ts:137"}, "properties": {"repobilityId": "254b31561d8fd962", "scanner": "scanner-primary", "fingerprint": "5a94382b81eea16a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e883287d19a94d6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/onesignal.ts:86"}, "properties": {"repobilityId": "ebe390406069b6f8", "scanner": "scanner-primary", "fingerprint": "e883287d19a94d6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9fa7ac53135fe3aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:43"}, "properties": {"repobilityId": "c5df33012923a434", "scanner": "scanner-primary", "fingerprint": "9fa7ac53135fe3aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8bcfd5be7635e1a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/echo/zapier-mcp.ts:25"}, "properties": {"repobilityId": "8443b874a7a7153d", "scanner": "scanner-primary", "fingerprint": "f8bcfd5be7635e1a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-680864d46cfddb5c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ops/forward-geocode.ts:37"}, "properties": {"repobilityId": "41299123782a7f11", "scanner": "scanner-primary", "fingerprint": "680864d46cfddb5c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa3ed7c2237b7257", "level": "note", "message": {"text": "Legacy-named symbol `gmail_v1` in src/lib/ranger/gmail.ts:1"}, "properties": {"repobilityId": "2b5f6682e8712093", "scanner": "scanner-primary", "fingerprint": "fa3ed7c2237b7257", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c62cd462b574b86b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/telegram.ts:67"}, "properties": {"repobilityId": "65938a705f3b8460", "scanner": "scanner-primary", "fingerprint": "c62cd462b574b86b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e05eb0c6f4ee5921", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/ranger/research.ts:185"}, "properties": {"repobilityId": "7247b109c0ae4838", "scanner": "scanner-primary", "fingerprint": "e05eb0c6f4ee5921", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49ea8cd9b45e6472", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/payments/square.ts:35"}, "properties": {"repobilityId": "3b9fe7b920f57cce", "scanner": "scanner-primary", "fingerprint": "49ea8cd9b45e6472", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32a8c937b465161d", "level": "note", "message": {"text": "Legacy-named symbol `rawLegacy` in src/lib/server/lead-sources.ts:62"}, "properties": {"repobilityId": "18ce97d3d058d27f", "scanner": "scanner-primary", "fingerprint": "32a8c937b465161d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-87eef64c876995b7", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/supabase/proxy.ts:62"}, "properties": {"repobilityId": "424bf6e148961c68", "scanner": "scanner-primary", "fingerprint": "87eef64c876995b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41d295c8db24a85a", "level": "note", "message": {"text": "97 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c1e5d1102a2e8c84", "scanner": "scanner-primary", "fingerprint": "41d295c8db24a85a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-ef9ddb7f73f4831b", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3000/api/leads (test-ringcentral-webhook.js:32)"}, "properties": {"repobilityId": "6b93434e42af5d9b", "scanner": "scanner-primary", "fingerprint": "ef9ddb7f73f4831b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3690816e1d24eb5", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3000/api/admin/ops/estimates (test_post.js:3)"}, "properties": {"repobilityId": "57c06b54124c34a3", "scanner": "scanner-primary", "fingerprint": "c3690816e1d24eb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd0eef7b1403aa0a", "level": "error", "message": {"text": "Dangling fetch: POST http://localhost:3000/api/admin/ops/bookings/create (scripts/book-katie-correct.mjs:47)"}, "properties": {"repobilityId": "3e4204c499bc3699", "scanner": "scanner-primary", "fingerprint": "bd0eef7b1403aa0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4651a13f30119dd", "level": "error", "message": {"text": "Dangling fetch: GET https://nominatim.openstreetmap.org/search?${params2} (scripts/geocode-service-addresses.ts:76)"}, "properties": {"repobilityId": "5e74967d52867a59", "scanner": "scanner-primary", "fingerprint": "c4651a13f30119dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36de195184b7aa22", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/setWebhook (scripts/setup-harry-command-webhook.ts:24)"}, "properties": {"repobilityId": "dd53320e863318e5", "scanner": "scanner-primary", "fingerprint": "36de195184b7aa22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4cedd1bfc0a2ceb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:133)"}, "properties": {"repobilityId": "0af16df2958ef3df", "scanner": "scanner-primary", "fingerprint": "c4cedd1bfc0a2ceb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bc82bbd27d7b32d9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/partners/outbound-referrals (src/components/partners/partner-dashboard.tsx:175)"}, "properties": {"repobilityId": "f18218cd07b45db4", "scanner": "scanner-primary", "fingerprint": "bc82bbd27d7b32d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c088e223e09e268a", "level": "error", "message": {"text": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:205)"}, "properties": {"repobilityId": "6db3ee3acfa48948", "scanner": "scanner-primary", "fingerprint": "c088e223e09e268a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-641b75820a442c17", "level": "error", "message": {"text": "Dangling fetch: POST /api/partners/referrals (src/components/partners/partner-dashboard.tsx:247)"}, "properties": {"repobilityId": "f196e6b2c46cc3b1", "scanner": "scanner-primary", "fingerprint": "641b75820a442c17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-56f5a576d44e1645", "level": "error", "message": {"text": "Dangling fetch: POST /api/tech/profile/photo (src/components/tech/tech-profile-photo-form.tsx:34)"}, "properties": {"repobilityId": "aa7ce6eb5d1973d1", "scanner": "scanner-primary", "fingerprint": "56f5a576d44e1645", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7722c67f3b001bc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id} (src/components/tech/tech-job-detail.tsx:90)"}, "properties": {"repobilityId": "5bb530c57913a185", "scanner": "scanner-primary", "fingerprint": "b7722c67f3b001bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-522723c77d0ebede", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tech/appointments/${appointment.id}/invoice (src/components/tech/tech-job-detail.tsx:131)"}, "properties": {"repobilityId": "d6f42097ae884184", "scanner": "scanner-primary", "fingerprint": "522723c77d0ebede", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feb7af69d6d3b6fe", "level": "error", "message": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/photos (src/components/tech/tech-job-detail.tsx:168)"}, "properties": {"repobilityId": "06bebb9de7ffaccf", "scanner": "scanner-primary", "fingerprint": "feb7af69d6d3b6fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6dc5dfd1562f06e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/signature (src/components/tech/tech-job-detail.tsx:210)"}, "properties": {"repobilityId": "da22690d7d7686f2", "scanner": "scanner-primary", "fingerprint": "6dc5dfd1562f06e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7158ba83be29340c", "level": "error", "message": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/payment (src/components/tech/tech-job-detail.tsx:239)"}, "properties": {"repobilityId": "5010673005cdbe17", "scanner": "scanner-primary", "fingerprint": "7158ba83be29340c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-293d216b50d5d546", "level": "error", "message": {"text": "Dangling fetch: POST /api/tech/appointments/${appointment.id}/square-link (src/components/tech/tech-job-detail.tsx:265)"}, "properties": {"repobilityId": "a396bbf38179edeb", "scanner": "scanner-primary", "fingerprint": "293d216b50d5d546", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abf2bcea88f414ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:212)"}, "properties": {"repobilityId": "c7a15eb6cc585e0b", "scanner": "scanner-primary", "fingerprint": "abf2bcea88f414ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d7ea6113c5260f8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:236)"}, "properties": {"repobilityId": "862b2b3f761295be", "scanner": "scanner-primary", "fingerprint": "6d7ea6113c5260f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35500bc34a691101", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:257)"}, "properties": {"repobilityId": "4e445dea8e384ba5", "scanner": "scanner-primary", "fingerprint": "35500bc34a691101", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f182c336d5a84299", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:287)"}, "properties": {"repobilityId": "8429c7abc7b73054", "scanner": "scanner-primary", "fingerprint": "f182c336d5a84299", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d16f81f397a47bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:317)"}, "properties": {"repobilityId": "ebad98bef59b6a55", "scanner": "scanner-primary", "fingerprint": "4d16f81f397a47bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27670c726f8e5458", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/comms/reactivation (src/components/admin/reactivation-control-center.tsx:352)"}, "properties": {"repobilityId": "2c5e9fed6771e341", "scanner": "scanner-primary", "fingerprint": "27670c726f8e5458", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c8e61e81f58d589", "level": "error", "message": {"text": "Dangling fetch: POST https://nominatim.openstreetmap.org/reverse?format=json&lat=${gpsCoordinates.lat}&lon=${gpsCoordinates.lng} (src/components/admin/upload-form.tsx:321)"}, "properties": {"repobilityId": "fca3cf30d6ae9b88", "scanner": "scanner-primary", "fingerprint": "7c8e61e81f58d589", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-934690cfc4d3f503", "level": "error", "message": {"text": "Dangling fetch: POST /api/upload (src/components/admin/upload-form.tsx:430)"}, "properties": {"repobilityId": "62d72e84e3ffaffa", "scanner": "scanner-primary", "fingerprint": "934690cfc4d3f503", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-020dba7df30fae0a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:56)"}, "properties": {"repobilityId": "331de5437fd27853", "scanner": "scanner-primary", "fingerprint": "020dba7df30fae0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63ddb6f8587f886c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:91)"}, "properties": {"repobilityId": "9e0ba349ec8dcc21", "scanner": "scanner-primary", "fingerprint": "63ddb6f8587f886c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ab94b48a51502f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/george (src/components/admin/george-henderson-dashboard.tsx:123)"}, "properties": {"repobilityId": "63c21182e3ccf14d", "scanner": "scanner-primary", "fingerprint": "3ab94b48a51502f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8dd6fa58a3e2c815", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${convo.id} (src/components/admin/conversations-view.tsx:176)"}, "properties": {"repobilityId": "b3aee847a130d03a", "scanner": "scanner-primary", "fingerprint": "8dd6fa58a3e2c815", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ebccdd7201d2fb5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/conversations/unread-count (src/components/admin/conversations-view.tsx:193)"}, "properties": {"repobilityId": "55a74eff6f01547d", "scanner": "scanner-primary", "fingerprint": "7ebccdd7201d2fb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc12ef0ce0d21bb9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:229)"}, "properties": {"repobilityId": "31790008b4178d43", "scanner": "scanner-primary", "fingerprint": "dc12ef0ce0d21bb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dfff289ba1cd1c0", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/conversations/${selectedConvo.id}/harry-draft (src/components/admin/conversations-view.tsx:254)"}, "properties": {"repobilityId": "88b7669ddf7fb1af", "scanner": "scanner-primary", "fingerprint": "0dfff289ba1cd1c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de14714e21847de0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/components/admin/conversations-view.tsx:309)"}, "properties": {"repobilityId": "71c4e9e6d3fb1655", "scanner": "scanner-primary", "fingerprint": "de14714e21847de0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21bf0dc10cbce36f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/conversations-view.tsx:339)"}, "properties": {"repobilityId": "79612d23fea7b883", "scanner": "scanner-primary", "fingerprint": "21bf0dc10cbce36f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05b0515e01311a58", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/conversations/${selectedConvo.id} (src/components/admin/conversations-view.tsx:390)"}, "properties": {"repobilityId": "3615ce2e059fca73", "scanner": "scanner-primary", "fingerprint": "05b0515e01311a58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c3c8731580afb36", "level": "error", "message": {"text": "Dangling fetch: POST /api/conversations/bulk-delete (src/components/admin/conversations-view.tsx:449)"}, "properties": {"repobilityId": "67c7d555ef86c58c", "scanner": "scanner-primary", "fingerprint": "7c3c8731580afb36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72c54de051419bca", "level": "error", "message": {"text": "Dangling fetch: POST /api/conversations/new (src/components/admin/conversations-view.tsx:483)"}, "properties": {"repobilityId": "64a4f17dc75fcdad", "scanner": "scanner-primary", "fingerprint": "72c54de051419bca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c366065a6dbc4ef", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/jobs/${jobId}/delete (src/components/admin/draft-jobs-list.tsx:49)"}, "properties": {"repobilityId": "5d798160fe17d1d9", "scanner": "scanner-primary", "fingerprint": "1c366065a6dbc4ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-deaf49e26a2efb87", "level": "error", "message": {"text": "Dangling fetch: POST /api/twilio/voice-token (src/components/admin/softphone.tsx:153)"}, "properties": {"repobilityId": "9a2e41dc84ed5fff", "scanner": "scanner-primary", "fingerprint": "deaf49e26a2efb87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e21bfa207f07ad6", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate-description (src/components/admin/job-editor.tsx:52)"}, "properties": {"repobilityId": "05b60637612347d0", "scanner": "scanner-primary", "fingerprint": "3e21bfa207f07ad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-faf0351e6116e18e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:109)"}, "properties": {"repobilityId": "3a2ec78925412ac5", "scanner": "scanner-primary", "fingerprint": "faf0351e6116e18e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c3bfae05bc27848", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/jobs/${job.id} (src/components/admin/job-editor.tsx:172)"}, "properties": {"repobilityId": "d509e9798c9cbebe", "scanner": "scanner-primary", "fingerprint": "1c3bfae05bc27848", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8788cc1ced6d4ecf", "level": "error", "message": {"text": "Dangling fetch: POST /api/tools/combine (src/components/admin/before-after-combiner.tsx:86)"}, "properties": {"repobilityId": "fd67ec9caf416577", "scanner": "scanner-primary", "fingerprint": "8788cc1ced6d4ecf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc68d8b9ea39018d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/conversations/unread-count (src/components/admin/mobile-bottom-nav.tsx:25)"}, "properties": {"repobilityId": "c42c3f673242f234", "scanner": "scanner-primary", "fingerprint": "dc68d8b9ea39018d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-069a51f35866d11a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ranger?limit=75 (src/components/admin/ranger-dashboard.tsx:169)"}, "properties": {"repobilityId": "43eeb12fa6752a44", "scanner": "scanner-primary", "fingerprint": "069a51f35866d11a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a67fabd2d03b0e16", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ranger/action (src/components/admin/ranger-dashboard.tsx:197)"}, "properties": {"repobilityId": "5e4eaab131f38db7", "scanner": "scanner-primary", "fingerprint": "a67fabd2d03b0e16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8200e4880523f74", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:78)"}, "properties": {"repobilityId": "85209d9a933a7333", "scanner": "scanner-primary", "fingerprint": "f8200e4880523f74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0eea2275c13795c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:79)"}, "properties": {"repobilityId": "5b97d406fd7a5562", "scanner": "scanner-primary", "fingerprint": "0eea2275c13795c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6fbceb8c439062e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:80)"}, "properties": {"repobilityId": "d53e13656a55cb9d", "scanner": "scanner-primary", "fingerprint": "e6fbceb8c439062e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84def7edb7ac9d8b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/harry/control (src/components/admin/harry-control-dashboard.tsx:133)"}, "properties": {"repobilityId": "6c137e2d85091e8d", "scanner": "scanner-primary", "fingerprint": "84def7edb7ac9d8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19a9074827873621", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/harry/profiles (src/components/admin/harry-control-dashboard.tsx:161)"}, "properties": {"repobilityId": "e81484cd11fff8fb", "scanner": "scanner-primary", "fingerprint": "19a9074827873621", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbf97456cc343322", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/harry/knowledge (src/components/admin/harry-control-dashboard.tsx:186)"}, "properties": {"repobilityId": "edba57bece5d42a8", "scanner": "scanner-primary", "fingerprint": "cbf97456cc343322", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1663bc52da01598d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/referrals (src/components/admin/admin-partners-view.tsx:146)"}, "properties": {"repobilityId": "c0a0c5ac72963767", "scanner": "scanner-primary", "fingerprint": "1663bc52da01598d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6b858640e92610e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:196)"}, "properties": {"repobilityId": "c022c23b3bcc3e49", "scanner": "scanner-primary", "fingerprint": "e6b858640e92610e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfd7104a9d191a67", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/outbound-referrals (src/components/admin/admin-partners-view.tsx:231)"}, "properties": {"repobilityId": "e394a943d587fb5f", "scanner": "scanner-primary", "fingerprint": "cfd7104a9d191a67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-288d7c70a25db6e2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:270)"}, "properties": {"repobilityId": "530799893871520c", "scanner": "scanner-primary", "fingerprint": "288d7c70a25db6e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c7bec13a63c07f7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/partners (src/components/admin/admin-partners-view.tsx:298)"}, "properties": {"repobilityId": "16fc00e74d5a77d1", "scanner": "scanner-primary", "fingerprint": "9c7bec13a63c07f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2767fd2e5ea51a0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/referrals?id=${referralId} (src/components/admin/admin-partners-view.tsx:322)"}, "properties": {"repobilityId": "62087fc8161d318b", "scanner": "scanner-primary", "fingerprint": "f2767fd2e5ea51a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45209b935c0fdf6e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/referrals (src/components/admin/admin-partners-view.tsx:341)"}, "properties": {"repobilityId": "c8d589d58996ce4d", "scanner": "scanner-primary", "fingerprint": "45209b935c0fdf6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10cd95011d81eefd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/operations-dashboard.tsx:265)"}, "properties": {"repobilityId": "bdd8b92f32e41ecc", "scanner": "scanner-primary", "fingerprint": "10cd95011d81eefd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-66e212cd202065cc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/services/${service.id} (src/components/admin/operations-dashboard.tsx:493)"}, "properties": {"repobilityId": "3d5214b67e4b8f16", "scanner": "scanner-primary", "fingerprint": "66e212cd202065cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6ab9c3f87c15b96", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/services/reorder (src/components/admin/operations-dashboard.tsx:576)"}, "properties": {"repobilityId": "12b036262fa650a9", "scanner": "scanner-primary", "fingerprint": "f6ab9c3f87c15b96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0497c178e2bb6697", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/availability (src/components/admin/operations-dashboard.tsx:622)"}, "properties": {"repobilityId": "d792a47dbafe91aa", "scanner": "scanner-primary", "fingerprint": "0497c178e2bb6697", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-507b46861d783d3a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/operations-dashboard.tsx:669)"}, "properties": {"repobilityId": "cbbb6e762628ff9b", "scanner": "scanner-primary", "fingerprint": "507b46861d783d3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e84415aee88ac178", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments (src/components/admin/operations-dashboard.tsx:779)"}, "properties": {"repobilityId": "71c593bc650712b6", "scanner": "scanner-primary", "fingerprint": "e84415aee88ac178", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a30238afc3a2197", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:43)"}, "properties": {"repobilityId": "8f0f43372915bffe", "scanner": "scanner-primary", "fingerprint": "8a30238afc3a2197", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-726d9dd2b2ed81e5", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:68)"}, "properties": {"repobilityId": "710a371c30559a3d", "scanner": "scanner-primary", "fingerprint": "726d9dd2b2ed81e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f2332c1880488c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:90)"}, "properties": {"repobilityId": "89bd1389250c098d", "scanner": "scanner-primary", "fingerprint": "5f2332c1880488c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac665a2196b2df3e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:110)"}, "properties": {"repobilityId": "b7eaff63e1244ab9", "scanner": "scanner-primary", "fingerprint": "ac665a2196b2df3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca9ed82a63a7ae75", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:138)"}, "properties": {"repobilityId": "7b30ee73e2ff0c85", "scanner": "scanner-primary", "fingerprint": "ca9ed82a63a7ae75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3dfc76a64a215f72", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:162)"}, "properties": {"repobilityId": "eb8df6f0ba71d422", "scanner": "scanner-primary", "fingerprint": "3dfc76a64a215f72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af5ab48c0a0a96ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-settings (src/components/admin/ops/agent-api-settings.tsx:172)"}, "properties": {"repobilityId": "2b92c72d1e711efd", "scanner": "scanner-primary", "fingerprint": "af5ab48c0a0a96ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f336afb7cd9df94e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/gps/live (src/components/admin/ops/DispatchMap.tsx:64)"}, "properties": {"repobilityId": "ea795f8c6889e496", "scanner": "scanner-primary", "fingerprint": "f336afb7cd9df94e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97f11a16f9edca98", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:321)"}, "properties": {"repobilityId": "30abc5783f1791f9", "scanner": "scanner-primary", "fingerprint": "97f11a16f9edca98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c5efdeefe044b04", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/gps (src/components/admin/ops/invoice-detail.tsx:397)"}, "properties": {"repobilityId": "95803cb44eec04ec", "scanner": "scanner-primary", "fingerprint": "9c5efdeefe044b04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e14779aca7c9787", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:428)"}, "properties": {"repobilityId": "024fb4d7757913ec", "scanner": "scanner-primary", "fingerprint": "0e14779aca7c9787", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63054d995425cbfb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appt.id}/photos (src/components/admin/ops/invoice-detail.tsx:461)"}, "properties": {"repobilityId": "a165d3f7f2875b39", "scanner": "scanner-primary", "fingerprint": "63054d995425cbfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-435e91eb6d9a944e", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/invoice-detail.tsx:503)"}, "properties": {"repobilityId": "6504ca6ee0e4e710", "scanner": "scanner-primary", "fingerprint": "435e91eb6d9a944e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d90926c129eecd2b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/invoice-detail.tsx:581)"}, "properties": {"repobilityId": "882862a538708a59", "scanner": "scanner-primary", "fingerprint": "d90926c129eecd2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6a395f9d1c8df57", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:595)"}, "properties": {"repobilityId": "bd1a76aa30b2ccac", "scanner": "scanner-primary", "fingerprint": "f6a395f9d1c8df57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0235b278d004bff9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:667)"}, "properties": {"repobilityId": "bbaa510a8116c0c1", "scanner": "scanner-primary", "fingerprint": "0235b278d004bff9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d911a503667f3c7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/invoice-detail.tsx:721)"}, "properties": {"repobilityId": "f8078e26b7a25251", "scanner": "scanner-primary", "fingerprint": "3d911a503667f3c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9560ad65cfb352b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId} (src/components/admin/ops/invoice-detail.tsx:790)"}, "properties": {"repobilityId": "c3f82eb60ac647d4", "scanner": "scanner-primary", "fingerprint": "d9560ad65cfb352b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3571e6d2f0230ea1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:814)"}, "properties": {"repobilityId": "3658c40d7e43764e", "scanner": "scanner-primary", "fingerprint": "3571e6d2f0230ea1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c4062154f1aea67", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:855)"}, "properties": {"repobilityId": "6c532f3e7ea6f8bf", "scanner": "scanner-primary", "fingerprint": "4c4062154f1aea67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9525219a572080be", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/invoices/${invoiceId} (src/components/admin/ops/invoice-detail.tsx:873)"}, "properties": {"repobilityId": "b25ab6748884e757", "scanner": "scanner-primary", "fingerprint": "9525219a572080be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76309b201ebc2693", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${apptId}/photos (src/components/admin/ops/invoice-detail.tsx:893)"}, "properties": {"repobilityId": "79001b11b9dc998f", "scanner": "scanner-primary", "fingerprint": "76309b201ebc2693", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ee11a88fbd8c8f7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${apptId}/photos?photoId=${photoId} (src/components/admin/ops/invoice-detail.tsx:912)"}, "properties": {"repobilityId": "99b221a2594e1d4d", "scanner": "scanner-primary", "fingerprint": "6ee11a88fbd8c8f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5344ae31b08497a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/send (src/components/admin/ops/invoice-detail.tsx:966)"}, "properties": {"repobilityId": "0ebc9db3ed9aa711", "scanner": "scanner-primary", "fingerprint": "5344ae31b08497a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f339ff9b6202f76", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate-description (src/components/admin/ops/invoice-detail.tsx:1037)"}, "properties": {"repobilityId": "13b6d1dad10c06cd", "scanner": "scanner-primary", "fingerprint": "8f339ff9b6202f76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1abf3fd7f9a81abe", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/record-stats (src/components/admin/ops/invoice-detail.tsx:1078)"}, "properties": {"repobilityId": "a79a09583018f580", "scanner": "scanner-primary", "fingerprint": "1abf3fd7f9a81abe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbe8cc52d7c53eca", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/invoices/${invoiceId}/publish (src/components/admin/ops/invoice-detail.tsx:1141)"}, "properties": {"repobilityId": "13ccb87950462c4e", "scanner": "scanner-primary", "fingerprint": "bbe8cc52d7c53eca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6d58f1a6044de4a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/operations-settings.tsx:90)"}, "properties": {"repobilityId": "9a38f40c1d55f7bc", "scanner": "scanner-primary", "fingerprint": "a6d58f1a6044de4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f400a3c4aff536e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/staff/photo (src/components/admin/ops/operations-settings.tsx:114)"}, "properties": {"repobilityId": "f0d6b0e047928c7f", "scanner": "scanner-primary", "fingerprint": "1f400a3c4aff536e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad65ccd9b162c4fc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:269)"}, "properties": {"repobilityId": "fe71289074c22a71", "scanner": "scanner-primary", "fingerprint": "ad65ccd9b162c4fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6364b85b55af8de", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:272)"}, "properties": {"repobilityId": "0a411cded99dd1b8", "scanner": "scanner-primary", "fingerprint": "a6364b85b55af8de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f07987839978d2f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/comms/email-log?limit=40 (src/components/admin/ops/operations-settings.tsx:275)"}, "properties": {"repobilityId": "e0aa09c10398e89e", "scanner": "scanner-primary", "fingerprint": "4f07987839978d2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ec18ce67e3c81e1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/communications/queue (src/components/admin/ops/operations-settings.tsx:327)"}, "properties": {"repobilityId": "47bcfef552ac21d4", "scanner": "scanner-primary", "fingerprint": "9ec18ce67e3c81e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15deb2f2619cd104", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/operations-settings.tsx:374)"}, "properties": {"repobilityId": "2fb9ae9f5d16cf22", "scanner": "scanner-primary", "fingerprint": "15deb2f2619cd104", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88d2dcc73ae490b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:126)"}, "properties": {"repobilityId": "15b4bc377a6716bf", "scanner": "scanner-primary", "fingerprint": "88d2dcc73ae490b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2b25f1ccfcab76f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:156)"}, "properties": {"repobilityId": "69d6eeb96c701b82", "scanner": "scanner-primary", "fingerprint": "f2b25f1ccfcab76f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c401c1b5a0daf166", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:182)"}, "properties": {"repobilityId": "8bdad546bf9164c8", "scanner": "scanner-primary", "fingerprint": "c401c1b5a0daf166", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d9f434ea46c25ca", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/ops/drip-campaigns (src/components/admin/ops/drip-campaigns-tab.tsx:204)"}, "properties": {"repobilityId": "41812d7b803ec277", "scanner": "scanner-primary", "fingerprint": "0d9f434ea46c25ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5cc70add33e0798", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${date} (src/components/admin/ops/TimesheetsView.tsx:71)"}, "properties": {"repobilityId": "adb27e9ca55a6868", "scanner": "scanner-primary", "fingerprint": "e5cc70add33e0798", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0d331a4588c96e6", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/${row.shiftId}/complete (src/components/admin/ops/TimesheetsView.tsx:201)"}, "properties": {"repobilityId": "eb78aa1188d7a32f", "scanner": "scanner-primary", "fingerprint": "c0d331a4588c96e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-872e70a8c699d484", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/gps/timesheets?date=${today} (src/components/admin/ops/MyDayView.tsx:62)"}, "properties": {"repobilityId": "97fba4d5380d9468", "scanner": "scanner-primary", "fingerprint": "872e70a8c699d484", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5684481f127a1978", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(query.trim())} (src/components/admin/ops/customers-directory.tsx:142)"}, "properties": {"repobilityId": "6a79576bdf54c90e", "scanner": "scanner-primary", "fingerprint": "5684481f127a1978", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d8b1db2430f961b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/customers/${customerId} (src/components/admin/ops/customers-directory.tsx:205)"}, "properties": {"repobilityId": "5cb18fc39a28f68d", "scanner": "scanner-primary", "fingerprint": "0d8b1db2430f961b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3aad41ede54ac5d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:42)"}, "properties": {"repobilityId": "faf1aa5279611d8c", "scanner": "scanner-primary", "fingerprint": "3aad41ede54ac5d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03690dc7b170a870", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/ops/communications/templates (src/components/admin/ops/communications-center.tsx:79)"}, "properties": {"repobilityId": "b1a5477b7b99df5e", "scanner": "scanner-primary", "fingerprint": "03690dc7b170a870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbb0cc19f930bc2d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/communications/day-before-reminders (src/components/admin/ops/communications-center.tsx:115)"}, "properties": {"repobilityId": "664d5bd3ba407d9c", "scanner": "scanner-primary", "fingerprint": "fbb0cc19f930bc2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1fbfc36c6e80e8a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:205)"}, "properties": {"repobilityId": "07e2204e82f49e5d", "scanner": "scanner-primary", "fingerprint": "c1fbfc36c6e80e8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-866830e3b426d5c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/recurring/${id} (src/components/admin/ops/recurring-manager.tsx:221)"}, "properties": {"repobilityId": "ca2bbfc2534aff4a", "scanner": "scanner-primary", "fingerprint": "866830e3b426d5c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ff44c782a4535e7", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:518)"}, "properties": {"repobilityId": "ed71a11a55b44efb", "scanner": "scanner-primary", "fingerprint": "3ff44c782a4535e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a6889ade7a0aaed", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/recurring/generate-monthly-invoice (src/components/admin/ops/recurring-manager.tsx:537)"}, "properties": {"repobilityId": "f99ced4bac5b889f", "scanner": "scanner-primary", "fingerprint": "2a6889ade7a0aaed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-159863ecd9106f69", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/recurring/add-batch-job (src/components/admin/ops/recurring-manager.tsx:603)"}, "properties": {"repobilityId": "c55dd7baa540eaab", "scanner": "scanner-primary", "fingerprint": "159863ecd9106f69", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08f0c0fe545230fc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-manager.tsx:688)"}, "properties": {"repobilityId": "f7648ce17a73b21f", "scanner": "scanner-primary", "fingerprint": "08f0c0fe545230fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-406f5a608ae617dc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:1427)"}, "properties": {"repobilityId": "bdb9ebbc889599cc", "scanner": "scanner-primary", "fingerprint": "406f5a608ae617dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20a027ea3f9ddcd4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1527)"}, "properties": {"repobilityId": "dbd46dd4eb9f0c96", "scanner": "scanner-primary", "fingerprint": "20a027ea3f9ddcd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8b6ab5ff36e9d4e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/recurring/${initialData.id} (src/components/admin/ops/recurring-manager.tsx:1608)"}, "properties": {"repobilityId": "b023c131b61c7db9", "scanner": "scanner-primary", "fingerprint": "a8b6ab5ff36e9d4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95dd2d46bb8b5dea", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/recurring (src/components/admin/ops/recurring-manager.tsx:1626)"}, "properties": {"repobilityId": "4f19087cd8a9b288", "scanner": "scanner-primary", "fingerprint": "95dd2d46bb8b5dea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9d42ebe5033a7be", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-manager.tsx:2393)"}, "properties": {"repobilityId": "77e8db0a2a7816f3", "scanner": "scanner-primary", "fingerprint": "f9d42ebe5033a7be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab6be0b17e03809a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2407)"}, "properties": {"repobilityId": "6b7aad268050b28a", "scanner": "scanner-primary", "fingerprint": "ab6be0b17e03809a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4efee90a1e9c8f08", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2437)"}, "properties": {"repobilityId": "766b17f63aeaf37c", "scanner": "scanner-primary", "fingerprint": "4efee90a1e9c8f08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0f9fa530aadb8b4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2458)"}, "properties": {"repobilityId": "e1894cfef8155fee", "scanner": "scanner-primary", "fingerprint": "e0f9fa530aadb8b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a3474efc90181fd", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/recurring-manager.tsx:2477)"}, "properties": {"repobilityId": "295c1244ff03b1b7", "scanner": "scanner-primary", "fingerprint": "5a3474efc90181fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85c47e1b8b2c37a4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2965)"}, "properties": {"repobilityId": "c001de94c5934430", "scanner": "scanner-primary", "fingerprint": "85c47e1b8b2c37a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86df173c522ca711", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2982)"}, "properties": {"repobilityId": "57ecdb2d85c1666a", "scanner": "scanner-primary", "fingerprint": "86df173c522ca711", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3881703226e531fd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/recurring/${template.id} (src/components/admin/ops/recurring-manager.tsx:2999)"}, "properties": {"repobilityId": "09ee08c64185f53a", "scanner": "scanner-primary", "fingerprint": "3881703226e531fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24475ad08bb23442", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:227)"}, "properties": {"repobilityId": "f3e720dc266ad9b8", "scanner": "scanner-primary", "fingerprint": "24475ad08bb23442", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c6e5c2fc5d61110", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/appointment-detail.tsx:269)"}, "properties": {"repobilityId": "228bdaea4a43edd4", "scanner": "scanner-primary", "fingerprint": "8c6e5c2fc5d61110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5bbb406e225736b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/appointments/${appointment.id}/recurring-link-options (src/components/admin/ops/appointment-detail.tsx:296)"}, "properties": {"repobilityId": "dad807c0c01b3066", "scanner": "scanner-primary", "fingerprint": "d5bbb406e225736b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b28b5ffa4e65126", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:485)"}, "properties": {"repobilityId": "3d542e50ee2de59a", "scanner": "scanner-primary", "fingerprint": "2b28b5ffa4e65126", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e962f5fbcab6bd0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:518)"}, "properties": {"repobilityId": "4b0f66a86d74e5d6", "scanner": "scanner-primary", "fingerprint": "5e962f5fbcab6bd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28fa181437d1066a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/appointment-detail.tsx:587)"}, "properties": {"repobilityId": "ad616cf9ec6aa215", "scanner": "scanner-primary", "fingerprint": "28fa181437d1066a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b12431cbef33f41", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:300)"}, "properties": {"repobilityId": "71c0ff1757f82da0", "scanner": "scanner-primary", "fingerprint": "4b12431cbef33f41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-742987e25b583f4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/estimate-detail.tsx:366)"}, "properties": {"repobilityId": "bf42b1c507cd188b", "scanner": "scanner-primary", "fingerprint": "742987e25b583f4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-baf7589f31e4030c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:602)"}, "properties": {"repobilityId": "4130a3761e20daaf", "scanner": "scanner-primary", "fingerprint": "baf7589f31e4030c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a70a5d5b8d056569", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:643)"}, "properties": {"repobilityId": "c3f824ed4747dd72", "scanner": "scanner-primary", "fingerprint": "a70a5d5b8d056569", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98f7e438c89c99d7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/estimates/${estimateId} (src/components/admin/ops/estimate-detail.tsx:672)"}, "properties": {"repobilityId": "3dc7d3be0bf6e72e", "scanner": "scanner-primary", "fingerprint": "98f7e438c89c99d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de8ac315fa5cc523", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/convert (src/components/admin/ops/estimate-detail.tsx:693)"}, "properties": {"repobilityId": "4942797fc86120f8", "scanner": "scanner-primary", "fingerprint": "de8ac315fa5cc523", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-034f6b31ff996b67", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/estimates/${estimateId}/send-email (src/components/admin/ops/estimate-detail.tsx:737)"}, "properties": {"repobilityId": "c77602b8cbbbb81e", "scanner": "scanner-primary", "fingerprint": "034f6b31ff996b67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a79961619124cf42", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${startDate}&end_date=${endDate} (src/components/admin/ops/operations-schedule.tsx:838)"}, "properties": {"repobilityId": "1d2fba321546a494", "scanner": "scanner-primary", "fingerprint": "a79961619124cf42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c84f4e1ed6d60902", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/ops/staff-availability (src/components/admin/ops/operations-schedule.tsx:945)"}, "properties": {"repobilityId": "81a185ecb4045d1c", "scanner": "scanner-primary", "fingerprint": "c84f4e1ed6d60902", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d5d99ec25bdbb68", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/ops/availability (src/components/admin/ops/operations-schedule.tsx:1004)"}, "properties": {"repobilityId": "8d5ff4f2d2733405", "scanner": "scanner-primary", "fingerprint": "0d5d99ec25bdbb68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf13f7f793be9e51", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${session.appointmentId} (src/components/admin/ops/operations-schedule.tsx:1218)"}, "properties": {"repobilityId": "82cb641899beed7c", "scanner": "scanner-primary", "fingerprint": "bf13f7f793be9e51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cc3b80e1239ade7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1359)"}, "properties": {"repobilityId": "7ec4b7c557f84ba7", "scanner": "scanner-primary", "fingerprint": "7cc3b80e1239ade7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86a7ee5a5b5c8cac", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${session.eventId} (src/components/admin/ops/operations-schedule.tsx:1451)"}, "properties": {"repobilityId": "4119a03ee8d4bf7d", "scanner": "scanner-primary", "fingerprint": "86a7ee5a5b5c8cac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69816c5d971abeac", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/operations-schedule.tsx:1513)"}, "properties": {"repobilityId": "dd78caa7be1e5794", "scanner": "scanner-primary", "fingerprint": "69816c5d971abeac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cf1a7e66968e3cd", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:1730)"}, "properties": {"repobilityId": "5eca7fb040ac52d6", "scanner": "scanner-primary", "fingerprint": "0cf1a7e66968e3cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d4391fd609f321f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/operations-schedule.tsx:1755)"}, "properties": {"repobilityId": "cafa8a5035e5d519", "scanner": "scanner-primary", "fingerprint": "2d4391fd609f321f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4aa32e1366637fd7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointment.id} (src/components/admin/ops/operations-schedule.tsx:1776)"}, "properties": {"repobilityId": "edd250baf3d3b760", "scanner": "scanner-primary", "fingerprint": "4aa32e1366637fd7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7415942dddb9122", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/events (src/components/admin/ops/operations-schedule.tsx:1828)"}, "properties": {"repobilityId": "c26d4efd52e83f2f", "scanner": "scanner-primary", "fingerprint": "b7415942dddb9122", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04964ed239393761", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/events/${editingEvent.id} (src/components/admin/ops/operations-schedule.tsx:1878)"}, "properties": {"repobilityId": "961c361da2c270f9", "scanner": "scanner-primary", "fingerprint": "04964ed239393761", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03f19055f4b86f00", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/events/${id} (src/components/admin/ops/operations-schedule.tsx:1905)"}, "properties": {"repobilityId": "2785361df91d3dd3", "scanner": "scanner-primary", "fingerprint": "03f19055f4b86f00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c52335ecee937b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/recurring/visit/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx:188)"}, "properties": {"repobilityId": "6b7cebdd42b8f77b", "scanner": "scanner-primary", "fingerprint": "0c52335ecee937b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6641f215a79451c1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/services (src/components/admin/ops/recurring-visit-detail.tsx:235)"}, "properties": {"repobilityId": "b7d1abbd566fc47e", "scanner": "scanner-primary", "fingerprint": "6641f215a79451c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f17e9d2f2ecf4c5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/appointments/${appointmentId} (src/components/admin/ops/recurring-visit-detail.tsx:256)"}, "properties": {"repobilityId": "b287c156c12f4610", "scanner": "scanner-primary", "fingerprint": "8f17e9d2f2ecf4c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1be65374b2d86f00", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments/${appointmentId}/notify (src/components/admin/ops/recurring-visit-detail.tsx:332)"}, "properties": {"repobilityId": "e88eea18380a94ed", "scanner": "scanner-primary", "fingerprint": "1be65374b2d86f00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b2a0653b8204b59", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/quickbooks/status (src/components/admin/ops/quickbooks-status.tsx:153)"}, "properties": {"repobilityId": "ca686d2c8bcca429", "scanner": "scanner-primary", "fingerprint": "3b2a0653b8204b59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a368c6d09f82a284", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/quickbooks/toggle (src/components/admin/ops/quickbooks-status.tsx:171)"}, "properties": {"repobilityId": "69c84ad5b0f0cd73", "scanner": "scanner-primary", "fingerprint": "a368c6d09f82a284", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68bbe1f2dcf4f612", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/quickbooks/disconnect (src/components/admin/ops/quickbooks-status.tsx:190)"}, "properties": {"repobilityId": "12cb3fd4884d8a7e", "scanner": "scanner-primary", "fingerprint": "68bbe1f2dcf4f612", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9db9eae4b846364c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:210)"}, "properties": {"repobilityId": "6e5737d64550b704", "scanner": "scanner-primary", "fingerprint": "9db9eae4b846364c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36f82c241873a782", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:240)"}, "properties": {"repobilityId": "5c6c7deb293b0073", "scanner": "scanner-primary", "fingerprint": "36f82c241873a782", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe9a398fdf290d9e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/quickbooks/retry (src/components/admin/ops/quickbooks-status.tsx:277)"}, "properties": {"repobilityId": "65b43bbe1528bd3a", "scanner": "scanner-primary", "fingerprint": "fe9a398fdf290d9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-beba748ccb5885ad", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/bootstrap (src/components/admin/ops/new-job-workspace.tsx:329)"}, "properties": {"repobilityId": "f7d89d18dd519013", "scanner": "scanner-primary", "fingerprint": "beba748ccb5885ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-217869766960c5cc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${today}&end_date=${today} (src/components/admin/ops/new-job-workspace.tsx:352)"}, "properties": {"repobilityId": "fd10a344d058b5b0", "scanner": "scanner-primary", "fingerprint": "217869766960c5cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c7fdd7f48c96b53", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/lead-sources (src/components/admin/ops/new-job-workspace.tsx:382)"}, "properties": {"repobilityId": "99a24c227bfc5b5a", "scanner": "scanner-primary", "fingerprint": "2c7fdd7f48c96b53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0bad3b299a5fc3f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/schedule?start_date=${formatDateKey(weekStart)}&end_date=${formatDateKey(weekEnd)} (src/components/admin/ops/new-job-workspace.tsx:402)"}, "properties": {"repobilityId": "0581c9f81d153b05", "scanner": "scanner-primary", "fingerprint": "b0bad3b299a5fc3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8963464ebda761fc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/customers?q=${encodeURIComponent(customerQuery)} (src/components/admin/ops/new-job-workspace.tsx:432)"}, "properties": {"repobilityId": "89a6a8e4f9cff11b", "scanner": "scanner-primary", "fingerprint": "8963464ebda761fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a51fc2312a2f2e04", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/appointments (src/components/admin/ops/new-job-workspace.tsx:730)"}, "properties": {"repobilityId": "16ced0f6ef988b23", "scanner": "scanner-primary", "fingerprint": "a51fc2312a2f2e04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-067a7a0720021798", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/slots?${searchParams.toString()} (src/components/admin/ops/new-job-workspace.tsx:768)"}, "properties": {"repobilityId": "46f736e7f690c64a", "scanner": "scanner-primary", "fingerprint": "067a7a0720021798", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e786323a12c3c8b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/address-suggest?q=${encodeURIComponent(q)} (src/components/admin/ops/new-job-workspace.tsx:1322)"}, "properties": {"repobilityId": "aa0d5d6cd9283487", "scanner": "scanner-primary", "fingerprint": "3e786323a12c3c8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea950ff3e225d327", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:97)"}, "properties": {"repobilityId": "3b9bdf067dafb930", "scanner": "scanner-primary", "fingerprint": "ea950ff3e225d327", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b73c233c5c436ddb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${editingEntryId} (src/components/admin/ops/PayrollTimesheetsView.tsx:234)"}, "properties": {"repobilityId": "0e4621dca014d42f", "scanner": "scanner-primary", "fingerprint": "b73c233c5c436ddb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91c0c2e197bc19fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/staff (src/components/admin/ops/PayrollTimesheetsView.tsx:273)"}, "properties": {"repobilityId": "c094afe643a5ac78", "scanner": "scanner-primary", "fingerprint": "91c0c2e197bc19fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-832f298f34c66139", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/payroll/timesheet-entries (src/components/admin/ops/PayrollTimesheetsView.tsx:307)"}, "properties": {"repobilityId": "23522f4d4c0f5f64", "scanner": "scanner-primary", "fingerprint": "832f298f34c66139", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94a69bf90263dd67", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsView.tsx:344)"}, "properties": {"repobilityId": "2e2b9684bcc21b68", "scanner": "scanner-primary", "fingerprint": "94a69bf90263dd67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cdbff14bfbdec79", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/ops/payroll/timesheet-entries/${entry.id} (src/components/admin/ops/PayrollTimesheetsView.tsx:368)"}, "properties": {"repobilityId": "6482a68223e3bb74", "scanner": "scanner-primary", "fingerprint": "7cdbff14bfbdec79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c02ce472a4b632f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/jobs?limit=24 (src/components/nfc/recent-jobs-carousel.tsx:43)"}, "properties": {"repobilityId": "0785f83af129f81d", "scanner": "scanner-primary", "fingerprint": "c02ce472a4b632f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86bed86edd86a7e7", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/availability?${params} (src/components/nfc/NfcBookingWidget.tsx:510)"}, "properties": {"repobilityId": "71fbcb4213f5e5fd", "scanner": "scanner-primary", "fingerprint": "86bed86edd86a7e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d7b10e532abb2b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/availability?date=${date}&required_minutes=${requiredMinutes} (src/components/nfc/NfcBookingWidget.tsx:539)"}, "properties": {"repobilityId": "7bfb979c9a95bdfe", "scanner": "scanner-primary", "fingerprint": "8d7b10e532abb2b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b14fb79fd20f323b", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/services (src/components/nfc/NfcBookingWidget.tsx:749)"}, "properties": {"repobilityId": "f9c39fc8aec97920", "scanner": "scanner-primary", "fingerprint": "b14fb79fd20f323b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-917f4223c91167a5", "level": "error", "message": {"text": "Dangling fetch: POST /api/book (src/components/nfc/NfcBookingWidget.tsx:984)"}, "properties": {"repobilityId": "d7cdc2b509fa167d", "scanner": "scanner-primary", "fingerprint": "917f4223c91167a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3d96d5a0ed360ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/review/track (src/app/review/[partnerId]/page.tsx:16)"}, "properties": {"repobilityId": "8e602a690a3a1dae", "scanner": "scanner-primary", "fingerprint": "d3d96d5a0ed360ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b34b198b05b5ff4", "level": "error", "message": {"text": "Dangling fetch: GET https://ipapi.co/${ip}/json/ (src/app/api/review/track/route.ts:7)"}, "properties": {"repobilityId": "305ff62bb31acde6", "scanner": "scanner-primary", "fingerprint": "7b34b198b05b5ff4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7590e1e6234a0613", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${token}/answerCallbackQuery (src/app/api/telegram/ranger-command/route.ts:70)"}, "properties": {"repobilityId": "a7e0a58b978544f4", "scanner": "scanner-primary", "fingerprint": "7590e1e6234a0613", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e5dd64814eaadfd", "level": "error", "message": {"text": "Dangling fetch: POST https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Messages.json (src/app/api/admin/george/route.ts:798)"}, "properties": {"repobilityId": "1ef45b996785b21a", "scanner": "scanner-primary", "fingerprint": "0e5dd64814eaadfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0624441cdb5948a1", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/sightings/page.tsx:78)"}, "properties": {"repobilityId": "a8915bfd810cf534", "scanner": "scanner-primary", "fingerprint": "0624441cdb5948a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-345cd413fc843b50", "level": "error", "message": {"text": "Dangling fetch: POST /api/sightings (src/app/sightings/page.tsx:281)"}, "properties": {"repobilityId": "d40868537e407f24", "scanner": "scanner-primary", "fingerprint": "345cd413fc843b50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f072832923cf3e5", "level": "error", "message": {"text": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/sightings/page.tsx:430)"}, "properties": {"repobilityId": "169b064f61b16694", "scanner": "scanner-primary", "fingerprint": "7f072832923cf3e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82297257c2203d7e", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:45)"}, "properties": {"repobilityId": "ed79a09360908ff6", "scanner": "scanner-primary", "fingerprint": "82297257c2203d7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9feaa624a645c009", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/tap/page.tsx:97)"}, "properties": {"repobilityId": "f6680eb7ea577ba0", "scanner": "scanner-primary", "fingerprint": "9feaa624a645c009", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22b25c0e0c56b4ef", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/radar/keywords (src/app/admin/radar/page.tsx:217)"}, "properties": {"repobilityId": "efa53e8cd9fc2838", "scanner": "scanner-primary", "fingerprint": "22b25c0e0c56b4ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-760a7c429a631bb5", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/radar/keywords/${id} (src/app/admin/radar/page.tsx:240)"}, "properties": {"repobilityId": "0b1c477e5883be25", "scanner": "scanner-primary", "fingerprint": "760a7c429a631bb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c160f9159b13556", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:255)"}, "properties": {"repobilityId": "e54b409f90d862e5", "scanner": "scanner-primary", "fingerprint": "3c160f9159b13556", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38895f45a8a4c71a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/radar/domains/${id} (src/app/admin/radar/page.tsx:281)"}, "properties": {"repobilityId": "a4e7e5e88effeb7a", "scanner": "scanner-primary", "fingerprint": "38895f45a8a4c71a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aea43cc266686c08", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/radar/discover (src/app/admin/radar/page.tsx:298)"}, "properties": {"repobilityId": "983d7c873901e9e9", "scanner": "scanner-primary", "fingerprint": "aea43cc266686c08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-586311b9d55b0fdb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/radar/refresh (src/app/admin/radar/page.tsx:335)"}, "properties": {"repobilityId": "659fde2b5b9eb105", "scanner": "scanner-primary", "fingerprint": "586311b9d55b0fdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33edf05d3765e8fd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/radar/domains/${domainId} (src/app/admin/radar/page.tsx:361)"}, "properties": {"repobilityId": "b99b4f2dc2950e4c", "scanner": "scanner-primary", "fingerprint": "33edf05d3765e8fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0c161112093e84f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/radar/domains/${dossierDomainId}/profile (src/app/admin/radar/page.tsx:402)"}, "properties": {"repobilityId": "4bbb8e6f53628107", "scanner": "scanner-primary", "fingerprint": "e0c161112093e84f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3d7d6cefa699e98", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/radar/domains (src/app/admin/radar/page.tsx:467)"}, "properties": {"repobilityId": "72e6c1d27cdc2ba1", "scanner": "scanner-primary", "fingerprint": "f3d7d6cefa699e98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96c4ffa3fdd9637c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:65)"}, "properties": {"repobilityId": "fae0d2eff914d462", "scanner": "scanner-primary", "fingerprint": "96c4ffa3fdd9637c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16b7acffc769d640", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/phone-settings (src/app/admin/phone-settings/page.tsx:84)"}, "properties": {"repobilityId": "5b175e8811278cb0", "scanner": "scanner-primary", "fingerprint": "16b7acffc769d640", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c514dd66e914bde", "level": "error", "message": {"text": "Dangling fetch: GET /api/analyst/history (src/app/admin/analyst/page.tsx:34)"}, "properties": {"repobilityId": "b7a2369ff3dd1463", "scanner": "scanner-primary", "fingerprint": "3c514dd66e914bde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a7c02d215904f7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/page.tsx:58)"}, "properties": {"repobilityId": "cc197be77fa6b5aa", "scanner": "scanner-primary", "fingerprint": "3a7c02d215904f7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7c78e0d6e1ed7b1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/analyst/history (src/app/admin/analyst/page.tsx:77)"}, "properties": {"repobilityId": "84ce2793c8410ac6", "scanner": "scanner-primary", "fingerprint": "f7c78e0d6e1ed7b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-936f75157995105e", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/scan (src/app/admin/analyst/page.tsx:101)"}, "properties": {"repobilityId": "13486e48d27e0c5c", "scanner": "scanner-primary", "fingerprint": "936f75157995105e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8510aefbcd0a1a5f", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/chat (src/app/admin/analyst/page.tsx:168)"}, "properties": {"repobilityId": "bff3853148da036f", "scanner": "scanner-primary", "fingerprint": "8510aefbcd0a1a5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d342f5c29df0c997", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/harry/control (src/app/admin/analyst/targets/page.tsx:143)"}, "properties": {"repobilityId": "05db718d4f63ecc3", "scanner": "scanner-primary", "fingerprint": "d342f5c29df0c997", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba4766d9938bf047", "level": "error", "message": {"text": "Dangling fetch: GET /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:159)"}, "properties": {"repobilityId": "7d18e4cdc760aa72", "scanner": "scanner-primary", "fingerprint": "ba4766d9938bf047", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ded44bc2735203f", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:183)"}, "properties": {"repobilityId": "fbc9e6b3dd7bacfa", "scanner": "scanner-primary", "fingerprint": "0ded44bc2735203f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f89c966b3a5de64", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:203)"}, "properties": {"repobilityId": "a1d65a9f826d7785", "scanner": "scanner-primary", "fingerprint": "7f89c966b3a5de64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a869af97f4545b9e", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/analyst/targets?id=${id} (src/app/admin/analyst/targets/page.tsx:219)"}, "properties": {"repobilityId": "f51d87c2c47f8086", "scanner": "scanner-primary", "fingerprint": "a869af97f4545b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd088ea4703868b7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/analyst/targets (src/app/admin/analyst/targets/page.tsx:234)"}, "properties": {"repobilityId": "5276090f1e2d9184", "scanner": "scanner-primary", "fingerprint": "dd088ea4703868b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a396d52ed29eae84", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/comms/email-log/${email.id}/preview (src/app/admin/email-outbox/page.tsx:51)"}, "properties": {"repobilityId": "8ed4c52cf83ab039", "scanner": "scanner-primary", "fingerprint": "a396d52ed29eae84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64363c3b77d5f390", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/comms/email-log?${query.toString()} (src/app/admin/email-outbox/page.tsx:192)"}, "properties": {"repobilityId": "ef19cf791dd7f668", "scanner": "scanner-primary", "fingerprint": "64363c3b77d5f390", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e21148eb527a422a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/estimates (src/app/admin/operations/estimates/new/page.tsx:27)"}, "properties": {"repobilityId": "7ea7b54ecd331a60", "scanner": "scanner-primary", "fingerprint": "e21148eb527a422a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c59385b1c50cc91c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:52)"}, "properties": {"repobilityId": "4017d257766156ec", "scanner": "scanner-primary", "fingerprint": "c59385b1c50cc91c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed04b7762a0dc182", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/push/history?${params} (src/app/admin/push/page.tsx:67)"}, "properties": {"repobilityId": "2d0fa29bf01607a7", "scanner": "scanner-primary", "fingerprint": "ed04b7762a0dc182", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cc53d16fccd2bd1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/push/generate (src/app/admin/push/page.tsx:87)"}, "properties": {"repobilityId": "7d4145ab70192f91", "scanner": "scanner-primary", "fingerprint": "7cc53d16fccd2bd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5171ead7323b58d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/push/send (src/app/admin/push/page.tsx:130)"}, "properties": {"repobilityId": "76b9d8f3a42648e9", "scanner": "scanner-primary", "fingerprint": "f5171ead7323b58d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-722d68d9c86c5b92", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/comms/sms-log?${params.toString()} (src/app/admin/sms-outbox/page.tsx:41)"}, "properties": {"repobilityId": "e8ba630c4ba01090", "scanner": "scanner-primary", "fingerprint": "722d68d9c86c5b92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7af332bcefbdce02", "level": "error", "message": {"text": "Dangling fetch: GET /api/leads (src/app/admin/leads/page.tsx:186)"}, "properties": {"repobilityId": "33c9d6403764621a", "scanner": "scanner-primary", "fingerprint": "7af332bcefbdce02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c05230a3c15d6ba", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/funnel-stats (src/app/admin/leads/page.tsx:187)"}, "properties": {"repobilityId": "8de2aefd29f098a4", "scanner": "scanner-primary", "fingerprint": "7c05230a3c15d6ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2662dd4a33200e64", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:228)"}, "properties": {"repobilityId": "345960b92cf63cc5", "scanner": "scanner-primary", "fingerprint": "2662dd4a33200e64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-caf61779e822b01f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leads (src/app/admin/leads/page.tsx:255)"}, "properties": {"repobilityId": "c2d19903836e73c3", "scanner": "scanner-primary", "fingerprint": "caf61779e822b01f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87f25666b6443708", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/leads?id=${selectedLead.id} (src/app/admin/leads/page.tsx:290)"}, "properties": {"repobilityId": "9b8d0a3bbe16fad0", "scanner": "scanner-primary", "fingerprint": "87f25666b6443708", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bd8641e10071241", "level": "error", "message": {"text": "Dangling fetch: POST /api/leads (src/app/admin/leads/page.tsx:319)"}, "properties": {"repobilityId": "4f0ccb498d0278a9", "scanner": "scanner-primary", "fingerprint": "4bd8641e10071241", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3e66d87d0cf974e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:102)"}, "properties": {"repobilityId": "dafe122670907d1a", "scanner": "scanner-primary", "fingerprint": "f3e66d87d0cf974e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b521b262427dbb4a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/promo-codes/${c.id} (src/app/admin/promo-codes/page.tsx:126)"}, "properties": {"repobilityId": "2c213ab75226e5d0", "scanner": "scanner-primary", "fingerprint": "b521b262427dbb4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e26da9e2ad29d519", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:149)"}, "properties": {"repobilityId": "3fbefcbc0f87417d", "scanner": "scanner-primary", "fingerprint": "e26da9e2ad29d519", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c31deea34ce27af", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/promo-codes/${id} (src/app/admin/promo-codes/page.tsx:199)"}, "properties": {"repobilityId": "2564038c6d8f1859", "scanner": "scanner-primary", "fingerprint": "0c31deea34ce27af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4947d9cedeeac8d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/promo-codes (src/app/admin/promo-codes/page.tsx:237)"}, "properties": {"repobilityId": "128c41fe84ed799a", "scanner": "scanner-primary", "fingerprint": "c4947d9cedeeac8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92550b181eab0205", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:211)"}, "properties": {"repobilityId": "e686ee7bba4d90c6", "scanner": "scanner-primary", "fingerprint": "92550b181eab0205", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9c5d15e4e06f562", "level": "error", "message": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/vendors/page.tsx:293)"}, "properties": {"repobilityId": "9d8daf6eb8b2db07", "scanner": "scanner-primary", "fingerprint": "c9c5d15e4e06f562", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01efbd1cd6cb7d37", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/vendors/page.tsx:323)"}, "properties": {"repobilityId": "91e15d522ffb1077", "scanner": "scanner-primary", "fingerprint": "01efbd1cd6cb7d37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac557077e8a99555", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/vendors (src/app/admin/vendors/page.tsx:350)"}, "properties": {"repobilityId": "d394c0bf88c61667", "scanner": "scanner-primary", "fingerprint": "ac557077e8a99555", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b920aab46906aa55", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/vendors?id=${partnerId} (src/app/admin/vendors/page.tsx:461)"}, "properties": {"repobilityId": "2815614ea20378d3", "scanner": "scanner-primary", "fingerprint": "b920aab46906aa55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee318ad88fa19f3f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/vendors (src/app/admin/vendors/page.tsx:480)"}, "properties": {"repobilityId": "2ee995b0cce8ecf5", "scanner": "scanner-primary", "fingerprint": "ee318ad88fa19f3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82c482a493a551cb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/voicemails (src/app/admin/voicemails/page.tsx:27)"}, "properties": {"repobilityId": "15880bca15dd8718", "scanner": "scanner-primary", "fingerprint": "82c482a493a551cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d588aedfa7651800", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/voicemails/${id} (src/app/admin/voicemails/page.tsx:44)"}, "properties": {"repobilityId": "1021b0e4f409e19e", "scanner": "scanner-primary", "fingerprint": "d588aedfa7651800", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f48ed18587fa7f5c", "level": "error", "message": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/sightings/page.tsx:156)"}, "properties": {"repobilityId": "4a0dd9f64ce1b506", "scanner": "scanner-primary", "fingerprint": "f48ed18587fa7f5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a71176f75be9eac", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/sightings/page.tsx:187)"}, "properties": {"repobilityId": "1e9fb181d2ae9dfa", "scanner": "scanner-primary", "fingerprint": "3a71176f75be9eac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5db0a630078b1134", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/sightings/${id} (src/app/admin/sightings/page.tsx:289)"}, "properties": {"repobilityId": "c1dc3dde1768c41a", "scanner": "scanner-primary", "fingerprint": "5db0a630078b1134", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f0fd8c2adb10efa", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/sightings/${id}/delete (src/app/admin/sightings/page.tsx:324)"}, "properties": {"repobilityId": "7081209256609799", "scanner": "scanner-primary", "fingerprint": "7f0fd8c2adb10efa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6eb06415ddc01bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/call-logs?days=${d} (src/app/admin/call-logs/page.tsx:208)"}, "properties": {"repobilityId": "ff8f23b30acbd8fe", "scanner": "scanner-primary", "fingerprint": "b6eb06415ddc01bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9561fda03dfad1b", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/call-logs/backfill (src/app/admin/call-logs/page.tsx:232)"}, "properties": {"repobilityId": "74b3ac02988a68cb", "scanner": "scanner-primary", "fingerprint": "f9561fda03dfad1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f38eec80c9ddb461", "level": "error", "message": {"text": "Dangling fetch: POST /api/tools/combine (src/app/admin/tools/combine/page.tsx:108)"}, "properties": {"repobilityId": "2aaa51db6c50daf1", "scanner": "scanner-primary", "fingerprint": "f38eec80c9ddb461", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e9622592da370a1", "level": "error", "message": {"text": "Dangling fetch: POST /api/conversations/${selectedConvo.id}/reply (src/app/admin/tap-analytics/page.tsx:137)"}, "properties": {"repobilityId": "4c0c13ac191b6d2f", "scanner": "scanner-primary", "fingerprint": "4e9622592da370a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2de2bd4e400d47b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/conversations/${conversationId} (src/app/admin/tap-analytics/page.tsx:168)"}, "properties": {"repobilityId": "ebb2f5de74a2f64c", "scanner": "scanner-primary", "fingerprint": "c2de2bd4e400d47b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8fc3a37a76fd053c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/social-post-drafts/${draft.id} (src/app/admin/social-posts/page.tsx:153)"}, "properties": {"repobilityId": "79f0b4ace0e3a5f7", "scanner": "scanner-primary", "fingerprint": "8fc3a37a76fd053c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8e32fb8d216334a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/social-post-drafts/${draft.id}/post (src/app/admin/social-posts/page.tsx:169)"}, "properties": {"repobilityId": "c4c987f2b92b8320", "scanner": "scanner-primary", "fingerprint": "c8e32fb8d216334a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59375b5236727cdb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:319)"}, "properties": {"repobilityId": "0ec6ba74fd7aec53", "scanner": "scanner-primary", "fingerprint": "59375b5236727cdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51c50a552065d92f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/social-posts (src/app/admin/social-posts/page.tsx:330)"}, "properties": {"repobilityId": "be711b4c317624fb", "scanner": "scanner-primary", "fingerprint": "51c50a552065d92f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-088aa16c636e21cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:343)"}, "properties": {"repobilityId": "88ef29b44b600d06", "scanner": "scanner-primary", "fingerprint": "088aa16c636e21cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-023f73d3781e0810", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/echo/settings (src/app/admin/social-posts/page.tsx:363)"}, "properties": {"repobilityId": "23f7dd729afd2296", "scanner": "scanner-primary", "fingerprint": "023f73d3781e0810", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b17b4376d183776", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/promotional-posts (src/app/admin/social-posts/page.tsx:892)"}, "properties": {"repobilityId": "393384f3f8f8a12b", "scanner": "scanner-primary", "fingerprint": "6b17b4376d183776", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e8a811c42054b9e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/promotional-posts/${post.id}/post (src/app/admin/social-posts/page.tsx:1099)"}, "properties": {"repobilityId": "3f1d29e8f695087e", "scanner": "scanner-primary", "fingerprint": "3e8a811c42054b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a3739d4fe0bae9c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1117)"}, "properties": {"repobilityId": "96017074cfe39e24", "scanner": "scanner-primary", "fingerprint": "3a3739d4fe0bae9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6fccb7f33bcb588b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/promotional-posts/${post.id} (src/app/admin/social-posts/page.tsx:1127)"}, "properties": {"repobilityId": "0002a5566f3ccc34", "scanner": "scanner-primary", "fingerprint": "6fccb7f33bcb588b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0b4f3b4f2c558e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/blacklist (src/app/admin/blacklist/page.tsx:47)"}, "properties": {"repobilityId": "627c752a89383ff0", "scanner": "scanner-primary", "fingerprint": "e0b4f3b4f2c558e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97520c31fa5c7eb8", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/blacklist (src/app/admin/blacklist/page.tsx:70)"}, "properties": {"repobilityId": "6bd6bbbac8416d10", "scanner": "scanner-primary", "fingerprint": "97520c31fa5c7eb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b32087797cc5cea", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/blacklist/${id} (src/app/admin/blacklist/page.tsx:97)"}, "properties": {"repobilityId": "81aa7c67486af058", "scanner": "scanner-primary", "fingerprint": "4b32087797cc5cea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5147b3a9ab59f0d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/revenue-entries (src/app/admin/stats/page.tsx:159)"}, "properties": {"repobilityId": "4ccf8070c2431ae1", "scanner": "scanner-primary", "fingerprint": "5147b3a9ab59f0d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-185fbc61d60c1ac8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/stats/utilization-supplement (src/app/admin/stats/page.tsx:321)"}, "properties": {"repobilityId": "9b23c0c9c6ca4688", "scanner": "scanner-primary", "fingerprint": "185fbc61d60c1ac8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62fecd8ceb36f235", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/stats (src/app/admin/stats/page.tsx:565)"}, "properties": {"repobilityId": "01d2197ab7d7a617", "scanner": "scanner-primary", "fingerprint": "62fecd8ceb36f235", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e121b5f1e38ef782", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/calendar-pipeline (src/app/admin/stats/page.tsx:584)"}, "properties": {"repobilityId": "3491da54f818809d", "scanner": "scanner-primary", "fingerprint": "e121b5f1e38ef782", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7265b7c6c3e54043", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/stats/lead-sources?${params} (src/app/admin/stats/lead-sources/page.tsx:61)"}, "properties": {"repobilityId": "6ebec6af1a966442", "scanner": "scanner-primary", "fingerprint": "7265b7c6c3e54043", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74103d39029cf0ba", "level": "error", "message": {"text": "Dangling fetch: POST /api/location-partner/login (src/app/location/[partnerId]/page.tsx:57)"}, "properties": {"repobilityId": "483e56635e8188fc", "scanner": "scanner-primary", "fingerprint": "74103d39029cf0ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ebe64ae840003b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:83)"}, "properties": {"repobilityId": "473cc2cd916e772f", "scanner": "scanner-primary", "fingerprint": "1ebe64ae840003b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1895000639ec24d", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/page.tsx:119)"}, "properties": {"repobilityId": "564264b0a4de538c", "scanner": "scanner-primary", "fingerprint": "d1895000639ec24d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f712e1dde96089d8", "level": "error", "message": {"text": "Dangling fetch: POST /api/tap/track (src/app/location/[partnerId]/contest/page.tsx:119)"}, "properties": {"repobilityId": "9dfc764045cfaaec", "scanner": "scanner-primary", "fingerprint": "f712e1dde96089d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4bce904aebee4c6", "level": "error", "message": {"text": "Dangling fetch: POST /api/sightings (src/app/location/[partnerId]/contest/page.tsx:287)"}, "properties": {"repobilityId": "643f010772218dd4", "scanner": "scanner-primary", "fingerprint": "b4bce904aebee4c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1099bf40d07a0a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/sightings/${sightingId}/verify (src/app/location/[partnerId]/contest/page.tsx:417)"}, "properties": {"repobilityId": "434033547db38355", "scanner": "scanner-primary", "fingerprint": "d1099bf40d07a0a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9323066fcf01974f", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/availability?start_date=${startDate}&end_date=${endDate}&required_minutes=${requiredMinutes} (src/app/book/page.tsx:260)"}, "properties": {"repobilityId": "8fd26746f017208b", "scanner": "scanner-primary", "fingerprint": "9323066fcf01974f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe0d99e721d6298d", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/services (src/app/book/page.tsx:593)"}, "properties": {"repobilityId": "20e3abb4a99a7755", "scanner": "scanner-primary", "fingerprint": "fe0d99e721d6298d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c60bb85db122c4c", "level": "error", "message": {"text": "Dangling fetch: GET /api/public/lead-sources (src/app/book/page.tsx:601)"}, "properties": {"repobilityId": "12dc2638b547f005", "scanner": "scanner-primary", "fingerprint": "2c60bb85db122c4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2b2dae72d63a89d", "level": "error", "message": {"text": "Dangling fetch: POST /api/book (src/app/book/page.tsx:729)"}, "properties": {"repobilityId": "ab995c1b5eeb58cf", "scanner": "scanner-primary", "fingerprint": "e2b2dae72d63a89d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c72758e9bfa9bf2", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${BOT_TOKEN}/sendMessage (src/lib/harry-command-bot.ts:58)"}, "properties": {"repobilityId": "c8278c4ca44d1241", "scanner": "scanner-primary", "fingerprint": "6c72758e9bfa9bf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19aaa525b4ab56ec", "level": "error", "message": {"text": "Dangling fetch: POST https://google.serper.dev/search (src/lib/web-search.ts:17)"}, "properties": {"repobilityId": "6c17477e719463c8", "scanner": "scanner-primary", "fingerprint": "19aaa525b4ab56ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3514a50ebd5d3a7a", "level": "error", "message": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/gbp-reviews.ts:54)"}, "properties": {"repobilityId": "1ccfb012a9d14a2e", "scanner": "scanner-primary", "fingerprint": "3514a50ebd5d3a7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c01a89c05ca6d0cc", "level": "error", "message": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:120)"}, "properties": {"repobilityId": "c8b669d18c5e8e93", "scanner": "scanner-primary", "fingerprint": "c01a89c05ca6d0cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d432c42d4d7d6a8d", "level": "error", "message": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:268)"}, "properties": {"repobilityId": "2ee8d1eb16b4a780", "scanner": "scanner-primary", "fingerprint": "d432c42d4d7d6a8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd51a31832b39c4d", "level": "error", "message": {"text": "Dangling fetch: GET https://serpapi.com/search?${params.toString()} (src/lib/serpApi.ts:328)"}, "properties": {"repobilityId": "b3746521cd415dcd", "scanner": "scanner-primary", "fingerprint": "dd51a31832b39c4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b1283ba203442b0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/telegram.ts:43)"}, "properties": {"repobilityId": "95ebaeddf30fb36e", "scanner": "scanner-primary", "fingerprint": "4b1283ba203442b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75e0633a9df0f044", "level": "error", "message": {"text": "Dangling fetch: POST https://api.telegram.org/bot${RANGER_TELEGRAM_BOT_TOKEN}/sendMessage (src/lib/ranger/telegram.ts:67)"}, "properties": {"repobilityId": "2c362d70bcc77e31", "scanner": "scanner-primary", "fingerprint": "75e0633a9df0f044", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b49db410b72481f8", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/search (src/lib/ranger/research.ts:185)"}, "properties": {"repobilityId": "6e268d24d3f4fa54", "scanner": "scanner-primary", "fingerprint": "b49db410b72481f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ace6c499ce02837", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/gps/points (src/lib/gps/offlineQueue.ts:68)"}, "properties": {"repobilityId": "796f156d4285722d", "scanner": "scanner-primary", "fingerprint": "5ace6c499ce02837", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3226702bbdce6870", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/gps/points (src/hooks/useGpsTracker.ts:75)"}, "properties": {"repobilityId": "4142effc7681786c", "scanner": "scanner-primary", "fingerprint": "3226702bbdce6870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9966585c1daf32e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ops/gps/shifts/active (src/hooks/useGpsTracker.ts:211)"}, "properties": {"repobilityId": "c9f4783215022f3f", "scanner": "scanner-primary", "fingerprint": "f9966585c1daf32e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b24fe451fb83e6e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/start (src/hooks/useGpsTracker.ts:237)"}, "properties": {"repobilityId": "7dfbb7f68b08958e", "scanner": "scanner-primary", "fingerprint": "2b24fe451fb83e6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1334943ce023fbc1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ops/gps/shifts/end (src/hooks/useGpsTracker.ts:278)"}, "properties": {"repobilityId": "6856959aeb37ea26", "scanner": "scanner-primary", "fingerprint": "1334943ce023fbc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-180bb4c906e35805", "level": "error", "message": {"text": "Dangling fetch: GET /api/message (src/hooks/useGetMessage.ts:10)"}, "properties": {"repobilityId": "3385155998a913cb", "scanner": "scanner-primary", "fingerprint": "180bb4c906e35805", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-d5b7088b0b9f1b71", "level": "note", "message": {"text": "Unused endpoint: POST /restapi/v1.0/subscription"}, "properties": {"repobilityId": "8a668145c078df41", "scanner": "scanner-primary", "fingerprint": "d5b7088b0b9f1b71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7f71b9be131a20f", "level": "note", "message": {"text": "Unused endpoint: POST /restapi/v1.0/account/~/extension/~/sms"}, "properties": {"repobilityId": "5beb70d5cf698b57", "scanner": "scanner-primary", "fingerprint": "b7f71b9be131a20f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}