{"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: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "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: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, '"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_review_followup_gap", "name": "Foundry mined review feedback without structured fix: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined review feedback without structured fix: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Graph query export: Review feedback without structured fix chain\nQuery id: review_feedback_without_structured_fix\nQuery type: motif_query\nIntent: Weak-supervision examples for review comments lacking a traceable fix.\nMotif: review_feedback_without_structured_fix\nTraining usage: weak_supervision\nGraph gold label: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nEvidence:\nGraph motif: PR review feedback lacks a clearly structured fix chain\nMotif id: review_feedback_without_structured_fix\nPolarity: mixed\nTraining usage: weak_supervision\nSeverity: medium\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#5\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.72, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "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: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#7\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 7\nGraph consistency label: assumption_check\nNodes: 18\nEdges: 24\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thr"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined assumption checks: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\nOutcome: ambiguous_needs_more_evidence\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: Typenine/East-v-West-Website#8\nRepo: Typenine/East-v-West-Website\nThread label: thread_has_human_issue_without_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 12\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'docs_or_claims': 8, 'ui_or_frontend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-658c339f0394dd8b\",\n    \"k"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_docs_only_fix", "name": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_c"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.8, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined test ci gap after feedback: Typenine/East-v-West-Website"}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#2\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 43\nEdges: 85\nNode types: {'pr_file': 25, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, "}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined schema ui api mismatch: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 6\nGraph consistency label: assumption_check\nNodes: 25\nEdges: 52\nNode types: {'pr_file': 7, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'f"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\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: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\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: 1\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-bb42471311ec61eb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#1\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'thread': 1, 'repo"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: Typenine/East-v-West-Website", "shortDescription": {"text": "Foundry mined mock as real or placeholder: Typenine/East-v-West-Website"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 32\nEdges: 86\nNode types: {'pr_file': 17, 'link_quality': 5, 'comment_chain': 3, 'comment': "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-4a3b8dffa18d774f", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-media-to-r2.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-media-to-r2.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-9d0229d293512c7c", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-to-db.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-to-db.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-29ffca2ffb87e661", "name": "Stray `console.log` in TS/JS \u2014 scripts/refresh-ktc.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-ktc.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5bd31377733cf58", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-taxi-cron.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-taxi-cron.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-e0b928fdb1dc74f7", "name": "Stray `console.log` in TS/JS \u2014 ai-bot-project/src/index.js:247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ai-bot-project/src/index.js:247"}, "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-62e2550c3f732d1c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsFilters.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsFilters.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ede4fa6a59be562", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionCard.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionCard.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3e04ddededd16ea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/navbar.tsx:772", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/navbar.tsx:772"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3022f2dd8482da89", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/matchup-card.tsx:45", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/matchup-card.tsx:45"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb0eb3d48c899874", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/suggestions/SuggestionItemCard.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/suggestions/SuggestionItemCard.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76a01b27066db873", "name": "Icon-only button without accessible name \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:51", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:51"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-726c946c71dd97a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb4dbe9e6218591a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftOverlayLive.tsx:601", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftOverlayLive.tsx:601"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2184c15556f2b13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/RoundRecapOverlay.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/RoundRecapOverlay.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51e6493a9f7049d8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/teams/TeamBadge.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/teams/TeamBadge.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-744c12b3df71f75d", "name": "React Flow <Controls> without dark theming \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:876", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:876"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b98e8d9bf757ee8a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:259", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:259"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a44e6432b12c413", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/brackets/PlayoffBracketBoard.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/brackets/PlayoffBracketBoard.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afb8987caeef8fd4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/SeasonRecapGrid.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/SeasonRecapGrid.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f187c278c82597ea", "name": "Icon-only button without accessible name \u2014 src/components/admin/votes/AdminPollResults.tsx:151", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/admin/votes/AdminPollResults.tsx:151"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d75f81e7f5af44f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/votes/AdminPollResults.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/votes/AdminPollResults.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c55200229ff69f09", "name": "Icon-only button without accessible name \u2014 src/components/admin/votes/ui.tsx:24", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/admin/votes/ui.tsx:24"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17a711710c32d57d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/headtohead/NeverBeatenTracker.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/headtohead/NeverBeatenTracker.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ab021e10fc88b5d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/RosterColumn.tsx:624", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/RosterColumn.tsx:624"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c097bc39a055ac8b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/PlayerDrawer.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/PlayerDrawer.tsx:223"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a373c6a76b2080cd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/trades/TradeCard.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/trades/TradeCard.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6d5ae6cd33e6678", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:35"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-977259e919252992", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/rules/page.tsx:538", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/rules/page.tsx:538"}, "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-a37b116129a5a0a3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/taxi/cron/route.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/taxi/cron/route.ts:117"}, "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-6cce5fe3d8dfac7a", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trade-notifier/route.ts:440", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trade-notifier/route.ts:440"}, "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-8f633a72562820a9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/route.ts:515", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/route.ts:515"}, "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-e2f3943e0354e40f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/publish/route.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/publish/route.ts:67"}, "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-e347f26e901d3a28", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-section/route.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-section/route.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-6f0a8417470a363b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-step/route.ts:273", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-step/route.ts:273"}, "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-bdb392835cab034f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/edit/route.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/edit/route.ts:168"}, "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-614007a184044d90", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/trade-analyzer/values/route.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/trade-analyzer/values/route.ts:136"}, "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-78f8ea45c13599cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/DraftContent.tsx:780", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/DraftContent.tsx:780"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cddec05bf73703d7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/room/team/page.tsx:987", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/room/team/page.tsx:987"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a71410db3edaea2a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/teams/[id]/TeamContent.tsx:1185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/teams/[id]/TeamContent.tsx:1185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3f81f89bdb0a925", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/draft/page.tsx:419", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/draft/page.tsx:419"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f37f47b144553ae5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditorialCalendar.tsx:253", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditorialCalendar.tsx:253"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4700d4b8607a5c5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditModePanel.tsx:674", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditModePanel.tsx:674"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a203bea9825c6978", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/history/HistoryContent.tsx:723", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/history/HistoryContent.tsx:723"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a7b0f0cc864dd94", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/trades/analyzer/page.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/trades/analyzer/page.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb1cfdb94424dd11", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/rivalries/page.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/rivalries/page.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f18a62af148e2cf", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/newsletter/page.tsx:169", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/newsletter/page.tsx:169"}, "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-44c83a33c89b4da1", "name": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/call-logger.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/call-logger.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-3d54ce5cdb89b551", "name": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/widgets/team-card.ts:371", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/widgets/team-card.ts:371"}, "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-d4daab82b1a2ee43", "name": "Stray `console.log` in TS/JS \u2014 src/lib/utils/discord.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/discord.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8890be092e8d815d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-flusher.ts:237", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-flusher.ts:237"}, "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-db05a3bbe16b8ec4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-reporter.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-reporter.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdb1a0fc23a5dd2a", "name": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-narrative.ts:704", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-narrative.ts:704"}, "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-1520aff2dc91e0f2", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/draft-order-helper.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/draft-order-helper.ts:55"}, "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-42adbe0b83eacf56", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/guest-voice.ts:261", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/guest-voice.ts:261"}, "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-5294f1c9bd14b850", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/publish-memory.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/publish-memory.ts:98"}, "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-08f52852b09fb049", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/pick-ownership-context.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/pick-ownership-context.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-caf0069015bcc1f9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/generator.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/generator.ts:204"}, "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-6124288ef7f17f0b", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/newsletter/compose.ts:2141", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/newsletter/compose.ts:2141"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b83f1dde498b324", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose.ts:1247", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose.ts:1247"}, "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-7925db3d0ce11f98", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/data-integration.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/data-integration.ts:168"}, "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-c090af2bccaa5225", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose-step.ts:891", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose-step.ts:891"}, "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-2b6db8f85e5ee44e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/trade-section-compose.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/trade-section-compose.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a50a404535fc6b7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cache.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cache.ts:58"}, "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-4a4fbe85c27404cd", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cascade.ts:119", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cascade.ts:119"}, "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-eef074011e1a4cfa", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/gemini.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/gemini.ts:48"}, "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-9f05fea5afac2933", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/groq.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/groq.ts:111"}, "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-242d9a6f164ae2b6", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/anthropic-provider.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/anthropic-provider.ts:143"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45831fe1b0ae7c13", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/groq-provider.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/groq-provider.ts:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae9317c918c30fac", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini20-provider.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini20-provider.ts:116"}, "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-b754a6db1355771e", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini-provider.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini-provider.ts:125"}, "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-a6752c8ba239cfa7", "name": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/openrouter-provider.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/openrouter-provider.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8881aaf289d21d97", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/rivalry/algorithm.ts:140", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/rivalry/algorithm.ts:140"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00e5222c1a408efc", "name": "Stray `console.log` in TS/JS \u2014 src/server/storage/r2.ts:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/storage/r2.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-254221becbbce6f3", "name": "Insecure pattern 'direct_innerhtml_assignment' in newsletter-preview.html:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in newsletter-preview.html:63"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f15e555af3e0938", "name": "Insecure pattern 'node_child_process' in scripts/migrate-on-build.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/migrate-on-build.mjs:2"}, "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-4ac31f9639cb748c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:35"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97460160232359d1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/standings/page.tsx:277", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/standings/page.tsx:277"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb5b4e7bd22b3276", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/rules/page.tsx:538", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/rules/page.tsx:538"}, "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-442fd27cb1995d13", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/draft/DraftContent.tsx:772", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/draft/DraftContent.tsx:772"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c0b6537e128cf569", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/page.tsx:59", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/page.tsx:59"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3201f25c256724bc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/[id]/TeamContent.tsx:958", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/[id]/TeamContent.tsx:958"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9b389da697ea59e", "name": "Insecure pattern 'document_write' in src/app/admin/newsletter/page.tsx:970", "shortDescription": {"text": "Insecure pattern 'document_write' in src/app/admin/newsletter/page.tsx:970"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af93d04806d04efe", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/newsletter/page.tsx:169", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/newsletter/page.tsx:169"}, "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-bd9eec743a0cc4ef", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mcp/widgets/team-card.ts:364", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mcp/widgets/team-card.ts:364"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-51ef139eaed0385f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c329a1bf48669e93", "name": "Very large file: tests/mcp-tools.test.ts (1259 lines)", "shortDescription": {"text": "Very large file: tests/mcp-tools.test.ts (1259 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a77d782abbf53f1c", "name": "Very large file: src/components/draft/TeamProspectDraftboard.tsx (990 lines)", "shortDescription": {"text": "Very large file: src/components/draft/TeamProspectDraftboard.tsx (990 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-7329aa885e326ecd", "name": "Very large file: src/components/trade-tree/TradeTreeCanvas.tsx (1154 lines)", "shortDescription": {"text": "Very large file: src/components/trade-tree/TradeTreeCanvas.tsx (1154 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-18bdaa50b28e052d", "name": "Very large file: src/app/api/newsletter/route.ts (2094 lines)", "shortDescription": {"text": "Very large file: src/app/api/newsletter/route.ts (2094 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-5e50fd3a60d7898d", "name": "Very large file: src/app/draft/DraftContent.tsx (1267 lines)", "shortDescription": {"text": "Very large file: src/app/draft/DraftContent.tsx (1267 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3118abfb6903962a", "name": "Very large file: src/app/draft/room/team/page.tsx (1786 lines)", "shortDescription": {"text": "Very large file: src/app/draft/room/team/page.tsx (1786 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-0beeb25919037247", "name": "Very large file: src/app/teams/[id]/TeamContent.tsx (2301 lines)", "shortDescription": {"text": "Very large file: src/app/teams/[id]/TeamContent.tsx (2301 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-c0f946123e76a431", "name": "Very large file: src/app/admin/draft/page.tsx (2080 lines)", "shortDescription": {"text": "Very large file: src/app/admin/draft/page.tsx (2080 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-9701f5760da9875e", "name": "Very large file: src/app/admin/newsletter/EditModePanel.tsx (1083 lines)", "shortDescription": {"text": "Very large file: src/app/admin/newsletter/EditModePanel.tsx (1083 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-98d15d324e9d18a8", "name": "Very large file: src/app/history/HistoryContent.tsx (2168 lines)", "shortDescription": {"text": "Very large file: src/app/history/HistoryContent.tsx (2168 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-e7547f656063394a", "name": "Very large file: src/app/trades/analyzer/page.tsx (1082 lines)", "shortDescription": {"text": "Very large file: src/app/trades/analyzer/page.tsx (1082 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-1e6f32068c2199eb", "name": "Very large file: src/lib/mcp/handlers.ts (2587 lines)", "shortDescription": {"text": "Very large file: src/lib/mcp/handlers.ts (2587 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-d7dad40ad52ad34a", "name": "Very large file: src/lib/utils/sleeper-api.ts (2728 lines)", "shortDescription": {"text": "Very large file: src/lib/utils/sleeper-api.ts (2728 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-f988dcaec5c27d87", "name": "Very large file: src/lib/newsletter/template.ts (1567 lines)", "shortDescription": {"text": "Very large file: src/lib/newsletter/template.ts (1567 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-2ef3ab319342fd53", "name": "Very large file: src/lib/newsletter/compose.ts (3709 lines)", "shortDescription": {"text": "Very large file: src/lib/newsletter/compose.ts (3709 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-b4c8fdacf52f0753", "name": "Very large file: src/lib/newsletter/data-integration.ts (1377 lines)", "shortDescription": {"text": "Very large file: src/lib/newsletter/data-integration.ts (1377 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-e2417179d78100b3", "name": "Very large file: src/lib/newsletter/compose-step.ts (2391 lines)", "shortDescription": {"text": "Very large file: src/lib/newsletter/compose-step.ts (2391 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-ff26f595cd81302e", "name": "Very large file: src/lib/newsletter/memory.ts (1690 lines)", "shortDescription": {"text": "Very large file: src/lib/newsletter/memory.ts (1690 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-684dbc73a401bcf5", "name": "Very large file: src/server/db/queries.fixed.ts (2829 lines)", "shortDescription": {"text": "Very large file: src/server/db/queries.fixed.ts (2829 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": "18 test file(s) for 460 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b722badde023e270", "name": "Node manifest has dependencies but no lockfile: ai-bot-project/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: ai-bot-project/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 308 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 182 placeholder/mock markers across 48 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-280e5deb091fcee6", "name": "Commented-code block (5 lines) in tests/asset-routing.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/asset-routing.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5386127873d84cc", "name": "Commented-code block (6 lines) in tests/rivalry-algorithm.test.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in tests/rivalry-algorithm.test.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15c9c1282be20b5e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-presign.mjs:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-presign.mjs:10"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-934b8d75ea5b17b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/run-newsletter.mjs:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/run-newsletter.mjs:102"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5d5aeef530ab961", "name": "Commented-code block (5 lines) in scripts/migrate-on-build.mjs:10", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/migrate-on-build.mjs:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a9ff87f1bf09f32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:523", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:523"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-984c2e15cdc6e9c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftInfoBarTicker.tsx:380", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftInfoBarTicker.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-3a251a1408e43e67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/useDraftData.ts:316", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/useDraftData.ts:316"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b824c7d10b9ccb12", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/DraftTravelSubtab.tsx:205", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/DraftTravelSubtab.tsx:205"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c97570b54d8546db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/TeamProspectDraftboard.tsx:429", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/TeamProspectDraftboard.tsx:429"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f4b38ff63367aae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/AdminPollResults.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/AdminPollResults.tsx:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d830b766e34503dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/CreatePollWizard.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/CreatePollWizard.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-b8e1b550e1164ad6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/votes/FormQuestionFields.tsx:444", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/votes/FormQuestionFields.tsx:444"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54721b4021242da8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/trades/TradeBlockTab.tsx:243", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/trades/TradeBlockTab.tsx:243"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4009dc91817b6e81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/rules/ask/route.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/rules/ask/route.ts:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c232df8c59738e72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/suggestions/recover-from-resend/route.ts:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/suggestions/recover-from-resend/route.ts:31"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f98d47116de978b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trade-notifier/route.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trade-notifier/route.ts:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2332acd4511f902", "name": "Commented-code block (5 lines) in src/app/api/newsletter/route.ts:1114", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/route.ts:1114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75b61e518df23130", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/newsletter/route.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/newsletter/route.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3cb9fc848d3ca4c1", "name": "Commented-code block (5 lines) in src/app/api/newsletter/generate-section/route.ts:133", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/generate-section/route.ts:133"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64c7a4c280bab7a1", "name": "Commented-code block (5 lines) in src/app/api/newsletter/generate-step/route.ts:310", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/generate-step/route.ts:310"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4ed36a146d3e0c3", "name": "Commented-code block (7 lines) in src/app/api/newsletter/edit/route.ts:354", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/newsletter/edit/route.ts:354"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-781e02b14dfcbedc", "name": "Commented-code block (5 lines) in src/app/api/trade-analyzer/values/route.ts:325", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/trade-analyzer/values/route.ts:325"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edf821325fa6c12d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/draft/room/team/page.tsx:355", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/draft/room/team/page.tsx:355"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f5b9e300ae22594d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/teams/[id]/TeamContent.tsx:814", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/teams/[id]/TeamContent.tsx:814"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6c13dea07f212d46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/users/page.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/users/page.tsx:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c4c4a12a0ef00b28", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/taxi/page.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/taxi/page.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-83885c813bb873b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/draft/page.tsx:715", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/draft/page.tsx:715"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e16df6e37b708f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/storage-test/page.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/storage-test/page.tsx:45"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-22a282fde20c55b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/trades/AdminTradesContent.tsx:450", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/trades/AdminTradesContent.tsx:450"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d2ba0c417aedede", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/page.tsx:222", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/page.tsx:222"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a3f8e5261c9c30f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/EditModePanel.tsx:509", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/EditModePanel.tsx:509"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-028a0e83c1d0cdcf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/personality/page.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/personality/page.tsx:85"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d98b2fe8159eb7c2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/votes/[id]/page.tsx:540", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/votes/[id]/page.tsx:540"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd8aa81eaf96c4d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/rivalries/page.tsx:913", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/rivalries/page.tsx:913"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5782b0327356aaa2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/trade-block/page.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/trade-block/page.tsx:39"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-391c53c1ec006b10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/newsletter/page.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/newsletter/page.tsx:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-042475310b18ac2a", "name": "Commented-code block (11 lines) in src/lib/constants/league-roster-map.ts:8", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/constants/league-roster-map.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42f6b425946bf0b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/trades.ts:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/trades.ts:134"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-012291fae727108a", "name": "Legacy-named symbol `primary_backup` in src/lib/utils/player-availability.ts:27", "shortDescription": {"text": "Legacy-named symbol `primary_backup` in src/lib/utils/player-availability.ts:27"}, "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-9b9181f19597e751", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/espn-depth.ts:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/espn-depth.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-413a6387b7950f89", "name": "Legacy-named symbol `primary_backup` in src/lib/utils/sleeper-api.ts:1567", "shortDescription": {"text": "Legacy-named symbol `primary_backup` in src/lib/utils/sleeper-api.ts:1567"}, "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-444da97eca03e02a", "name": "Commented-code block (5 lines) in src/lib/utils/sleeper-api.ts:835", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/utils/sleeper-api.ts:835"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05f9535d86b7fb8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/draft/fetch-draft-travel-sheet.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/draft/fetch-draft-travel-sheet.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-205b564e74b0ca29", "name": "Commented-code block (6 lines) in src/lib/server/taxi-validator.ts:293", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/server/taxi-validator.ts:293"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49147a71ed1e7212", "name": "Commented-code block (7 lines) in src/lib/trades/asset-routing.ts:53", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/trades/asset-routing.ts:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2dffc5c17ca7407e", "name": "Commented-code block (6 lines) in src/lib/newsletter/guardrails.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/newsletter/guardrails.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4435f7fa1c30cd62", "name": "Commented-code block (5 lines) in src/lib/newsletter/guest-voice.ts:238", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/newsletter/guest-voice.ts:238"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed0f1486565cdd41", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/newsletter/data-integration.ts:1085", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/newsletter/data-integration.ts:1085"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-515c3dcb2f6a4777", "name": "Commented-code block (6 lines) in src/lib/newsletter/trade-facts.ts:173", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/newsletter/trade-facts.ts:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f9692d12dcb66f2", "name": "Commented-code block (7 lines) in src/lib/newsletter/llm/cascade.ts:68", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/newsletter/llm/cascade.ts:68"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6299c026b171425b", "name": "Commented-code block (5 lines) in src/lib/newsletter/llm/groq.ts:717", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/newsletter/llm/groq.ts:717"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24d0d2cfc8167d9b", "name": "Commented-code block (5 lines) in src/server/trade-tree.ts:96", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trade-tree.ts:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d93cdd132f357cbd", "name": "Commented-code block (5 lines) in src/server/trade-feed.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/trade-feed.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-293f9149d32a07c2", "name": "Commented-code block (5 lines) in src/server/db/queries.fixed.ts:1607", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/db/queries.fixed.ts:1607"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a41e2dbc307c1204", "name": "Dangling fetch: POST /api/admin-login (src/components/layout/navbar.tsx:388)", "shortDescription": {"text": "Dangling fetch: POST /api/admin-login (src/components/layout/navbar.tsx:388)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:388` calls `POST /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-cd77123b9f561164", "name": "Dangling fetch: GET /api/auth/me (src/components/layout/navbar.tsx:409)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/components/layout/navbar.tsx:409)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:409` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-632dae212923b2f4", "name": "Dangling fetch: GET /api/admin-login (src/components/layout/navbar.tsx:428)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/components/layout/navbar.tsx:428)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:428` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-1d172b7736b34d8b", "name": "Dangling fetch: POST /api/auth/logout (src/components/layout/navbar.tsx:488)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (src/components/layout/navbar.tsx:488)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:488` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fec0950747cb9f05", "name": "Dangling fetch: DELETE /api/admin-login (src/components/layout/navbar.tsx:495)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin-login (src/components/layout/navbar.tsx:495)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:495` calls `DELETE /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-cfb15f4d9afd6ee0", "name": "Dangling fetch: POST /api/auth/change-pin (src/components/layout/navbar.tsx:916)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/change-pin (src/components/layout/navbar.tsx:916)"}, "fullDescription": {"text": "`src/components/layout/navbar.tsx:916` calls `POST /api/auth/change-pin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/change-pin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5049ede847b63e6", "name": "Dangling fetch: POST /api/auth/login (src/components/auth/SignInForm.tsx:67)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/login (src/components/auth/SignInForm.tsx:67)"}, "fullDescription": {"text": "`src/components/auth/SignInForm.tsx:67` calls `POST /api/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/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-83249dfd73e009cc", "name": "Dangling fetch: POST /api/admin-login (src/components/auth/SignInForm.tsx:112)", "shortDescription": {"text": "Dangling fetch: POST /api/admin-login (src/components/auth/SignInForm.tsx:112)"}, "fullDescription": {"text": "`src/components/auth/SignInForm.tsx:112` calls `POST /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-d94318c05352e5a5", "name": "Dangling fetch: GET /api/taxi/flags (src/components/taxi/TaxiBanner.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/flags (src/components/taxi/TaxiBanner.tsx:22)"}, "fullDescription": {"text": "`src/components/taxi/TaxiBanner.tsx:22` calls `GET /api/taxi/flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a05360edb00fb8b9", "name": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draftId} (src/componen", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draftId} (src/components/draft-overlay/DraftTradeCenter.tsx:395)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftTradeCenter.tsx:395` calls `GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2e88f19b2c4d091", "name": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(team)}&draftId=${draftId} (src/componen", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(team)}&draftId=${draftId} (src/components/draft-overlay/DraftTradeCenter.tsx:422)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftTradeCenter.tsx:422` calls `GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(team)}&draftId=${draftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8ec277cebdba471", "name": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:506)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:506)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftTradeCenter.tsx:506` calls `POST /api/draft/trade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df185f8fc64e3b38", "name": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:523)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:523)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftTradeCenter.tsx:523` calls `POST /api/draft/trade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-423c375fd034b939", "name": "Dangling fetch: GET /api/draft/next-order (src/components/draft-overlay/DraftInfoBarTicker.tsx:305)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft-overlay/DraftInfoBarTicker.tsx:305)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftInfoBarTicker.tsx:305` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8cd10ae154df433", "name": "Dangling fetch: GET /api/draft/next-order?season=${year} (src/components/draft-overlay/DraftInfoBarTicker.tsx:318)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order?season=${year} (src/components/draft-overlay/DraftInfoBarTicker.tsx:318)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftInfoBarTicker.tsx:318` calls `GET /api/draft/next-order?season=${year}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eed31a1019222fac", "name": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(onClockTeam)}${draftParam} (src/component", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(onClockTeam)}${draftParam} (src/components/draft-overlay/DraftInfoBarTicker.tsx:380)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftInfoBarTicker.tsx:380` calls `GET /api/draft/trade?action=get_team&team=${encodeURIComponent(onClockTeam)}${draftParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d869bed29d20aabf", "name": "Dangling fetch: GET /api/draft/team-season-stats?team=${enc} (src/components/draft-overlay/DraftInfoBarTicker.tsx:419)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/team-season-stats?team=${enc} (src/components/draft-overlay/DraftInfoBarTicker.tsx:419)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftInfoBarTicker.tsx:419` calls `GET /api/draft/team-season-stats?team=${enc}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/team-season-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-33efd08b6e6e35b4", "name": "Dangling fetch: GET /api/draft/team-history?team=${enc}&_=${Date.now()} (src/components/draft-overlay/DraftInfoBarTicker", "shortDescription": {"text": "Dangling fetch: GET /api/draft/team-history?team=${enc}&_=${Date.now()} (src/components/draft-overlay/DraftInfoBarTicker.tsx:423)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftInfoBarTicker.tsx:423` calls `GET /api/draft/team-history?team=${enc}&_=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/team-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-4456eb79ef5cb4aa", "name": "Dangling fetch: GET /api/auth/me (src/components/draft-overlay/DraftOverlayLive.tsx:95)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/components/draft-overlay/DraftOverlayLive.tsx:95)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:95` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39c75327c6f7b221", "name": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:161)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:161` calls `GET /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8ff94c419c8dd03", "name": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:223)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:223)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:223` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-a0d08bf3f37cbc1b", "name": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:309)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:309)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:309` calls `GET /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19162e8209fc3017", "name": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(playerId)} (src/components/draft-overlay", "shortDescription": {"text": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(playerId)} (src/components/draft-overlay/DraftOverlayLive.tsx:356)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:356` calls `GET /api/draft?action=player_info&playerId=${encodeURIComponent(playerId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-458bea4b8243bf2f", "name": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:492)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:492)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:492` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-5a1fd07a7ef9b500", "name": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:885)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:885)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:885` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-6e4f402a82c30776", "name": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftOverlayLive.tsx:892)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftOverlayLive.tsx:892)"}, "fullDescription": {"text": "`src/components/draft-overlay/DraftOverlayLive.tsx:892` calls `POST /api/draft/trade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2baacefde0c21071", "name": "Dangling fetch: GET /api/draft/trade?action=list_approved&draftId=${encodeURIComponent(draftId)} (src/components/draft-o", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=list_approved&draftId=${encodeURIComponent(draftId)} (src/components/draft-overlay/RoundRecapOverlay.tsx:79)"}, "fullDescription": {"text": "`src/components/draft-overlay/RoundRecapOverlay.tsx:79` calls `GET /api/draft/trade?action=list_approved&draftId=${encodeURIComponent(draftId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f115d171fd752f5f", "name": "Dangling fetch: GET /api/draft?include=available (src/components/draft-overlay/useDraftData.ts:249)", "shortDescription": {"text": "Dangling fetch: GET /api/draft?include=available (src/components/draft-overlay/useDraftData.ts:249)"}, "fullDescription": {"text": "`src/components/draft-overlay/useDraftData.ts:249` calls `GET /api/draft?include=available` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-3cce1868b32cea3a", "name": "Dangling fetch: GET /api/draft?mode=live (src/components/draft-overlay/useDraftData.ts:269)", "shortDescription": {"text": "Dangling fetch: GET /api/draft?mode=live (src/components/draft-overlay/useDraftData.ts:269)"}, "fullDescription": {"text": "`src/components/draft-overlay/useDraftData.ts:269` calls `GET /api/draft?mode=live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-a7e15164186da806", "name": "Dangling fetch: POST /api/draft (src/components/draft-overlay/useDraftData.ts:316)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/useDraftData.ts:316)"}, "fullDescription": {"text": "`src/components/draft-overlay/useDraftData.ts:316` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-e3f339411f2d2b4e", "name": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:174)"}, "fullDescription": {"text": "`src/components/draft/DraftTravelSubtab.tsx:174` calls `GET /api/draft/travel?trip=${encodeURIComponent(trip)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/travel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8d81379b09a460e", "name": "Dangling fetch: POST /api/draft/travel (src/components/draft/DraftTravelSubtab.tsx:205)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/travel (src/components/draft/DraftTravelSubtab.tsx:205)"}, "fullDescription": {"text": "`src/components/draft/DraftTravelSubtab.tsx:205` calls `POST /api/draft/travel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/travel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-213b130f99bba1f5", "name": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:337)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:337)"}, "fullDescription": {"text": "`src/components/draft/DraftTravelSubtab.tsx:337` calls `GET /api/draft/travel?trip=${encodeURIComponent(trip)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/travel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fad6671ea1bbb6d3", "name": "Dangling fetch: GET /api/auth/me (src/components/draft/TeamProspectDraftboard.tsx:416)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/components/draft/TeamProspectDraftboard.tsx:416)"}, "fullDescription": {"text": "`src/components/draft/TeamProspectDraftboard.tsx:416` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a47c70075b82219", "name": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:487)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:487)"}, "fullDescription": {"text": "`src/components/draft/TeamProspectDraftboard.tsx:487` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d8c8fe0b0f434d7", "name": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:729)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:729)"}, "fullDescription": {"text": "`src/components/draft/TeamProspectDraftboard.tsx:729` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d974312abd57b3b3", "name": "Dangling fetch: GET /api/admin/votes/${pollId}/file?key=${encodeURIComponent(key)} (src/components/admin/votes/AdminPoll", "shortDescription": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/file?key=${encodeURIComponent(key)} (src/components/admin/votes/AdminPollResults.tsx:57)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminPollResults.tsx:57` calls `GET /api/admin/votes/${pollId}/file?key=${encodeURIComponent(key)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/votes/<p>/file`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-118056d0b3a52c8b", "name": "Dangling fetch: GET /api/admin/votes/${pollId}/results (src/components/admin/votes/AdminPollResults.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/results (src/components/admin/votes/AdminPollResults.tsx:125)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminPollResults.tsx:125` calls `GET /api/admin/votes/${pollId}/results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/votes/<p>/results`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84447aa71e6ea096", "name": "Dangling fetch: GET /api/admin/votes (src/components/admin/votes/AdminVotesDashboard.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/votes (src/components/admin/votes/AdminVotesDashboard.tsx:60)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminVotesDashboard.tsx:60` calls `GET /api/admin/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2da28485558d682", "name": "Dangling fetch: GET /api/suggestions (src/components/admin/votes/AdminVotesDashboard.tsx:81)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions (src/components/admin/votes/AdminVotesDashboard.tsx:81)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminVotesDashboard.tsx:81` calls `GET /api/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad240328e8d287fe", "name": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:104)", "shortDescription": {"text": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:104)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminVotesDashboard.tsx:104` calls `PATCH /api/votes/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d0c3f360bea8677", "name": "Dangling fetch: DELETE /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:128)", "shortDescription": {"text": "Dangling fetch: DELETE /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:128)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminVotesDashboard.tsx:128` calls `DELETE /api/votes/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ac031fc6a4b3f5e", "name": "Dangling fetch: GET /api/admin/votes/${pollId}/form (src/components/admin/votes/AdminVotesDashboard.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/form (src/components/admin/votes/AdminVotesDashboard.tsx:146)"}, "fullDescription": {"text": "`src/components/admin/votes/AdminVotesDashboard.tsx:146` calls `GET /api/admin/votes/${pollId}/form` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/votes/<p>/form`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8571b56c20efdfef", "name": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/CreatePollWizard.tsx:61)", "shortDescription": {"text": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/CreatePollWizard.tsx:61)"}, "fullDescription": {"text": "`src/components/admin/votes/CreatePollWizard.tsx:61` calls `PATCH /api/votes/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d32a224063d592e", "name": "Dangling fetch: PUT /api/admin/votes/${pollId}/form (src/components/admin/votes/CreatePollWizard.tsx:533)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/votes/${pollId}/form (src/components/admin/votes/CreatePollWizard.tsx:533)"}, "fullDescription": {"text": "`src/components/admin/votes/CreatePollWizard.tsx:533` calls `PUT /api/admin/votes/${pollId}/form` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/votes/<p>/form`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ca3866ffbf1edd6", "name": "Dangling fetch: POST /api/votes (src/components/admin/votes/CreatePollWizard.tsx:555)", "shortDescription": {"text": "Dangling fetch: POST /api/votes (src/components/admin/votes/CreatePollWizard.tsx:555)"}, "fullDescription": {"text": "`src/components/admin/votes/CreatePollWizard.tsx:555` calls `POST /api/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d3f5a920d65f034", "name": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/Roste", "shortDescription": {"text": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/RosterColumn.tsx:327)"}, "fullDescription": {"text": "`src/components/matchups/RosterColumn.tsx:327` calls `GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nfl-scoreboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1479123f423b4392", "name": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/Roste", "shortDescription": {"text": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/RosterColumn.tsx:348)"}, "fullDescription": {"text": "`src/components/matchups/RosterColumn.tsx:348` calls `GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nfl-week-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-ef40970d6dacaeba", "name": "Dangling fetch: GET /api/matchup-points?week=${week} (src/components/matchups/RosterColumn.tsx:372)", "shortDescription": {"text": "Dangling fetch: GET /api/matchup-points?week=${week} (src/components/matchups/RosterColumn.tsx:372)"}, "fullDescription": {"text": "`src/components/matchups/RosterColumn.tsx:372` calls `GET /api/matchup-points?week=${week}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/matchup-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-2081188697a96cbd", "name": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups", "shortDescription": {"text": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups/RosterColumn.tsx:415)"}, "fullDescription": {"text": "`src/components/matchups/RosterColumn.tsx:415` calls `GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/defense-strength`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ed4bf1a157d2ebc", "name": "Dangling fetch: GET /api/player-info?id=${pid} (src/components/matchups/PlayerDrawer.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /api/player-info?id=${pid} (src/components/matchups/PlayerDrawer.tsx:178)"}, "fullDescription": {"text": "`src/components/matchups/PlayerDrawer.tsx:178` calls `GET /api/player-info?id=${pid}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/player-info`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67df1c626df1b006", "name": "Dangling fetch: GET /api/player-logs?playerId=${pid}&season=${encodeURIComponent(logSeason)} (src/components/matchups/Pl", "shortDescription": {"text": "Dangling fetch: GET /api/player-logs?playerId=${pid}&season=${encodeURIComponent(logSeason)} (src/components/matchups/PlayerDrawer.tsx:195)"}, "fullDescription": {"text": "`src/components/matchups/PlayerDrawer.tsx:195` calls `GET /api/player-logs?playerId=${pid}&season=${encodeURIComponent(logSeason)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/player-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-d152dd5166dba34f", "name": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/WinPr", "shortDescription": {"text": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/WinProbability.tsx:109)"}, "fullDescription": {"text": "`src/components/matchups/WinProbability.tsx:109` calls `GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nfl-scoreboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c7855348bd533de8", "name": "Dangling fetch: GET /api/wp-model (src/components/matchups/WinProbability.tsx:133)", "shortDescription": {"text": "Dangling fetch: GET /api/wp-model (src/components/matchups/WinProbability.tsx:133)"}, "fullDescription": {"text": "`src/components/matchups/WinProbability.tsx:133` calls `GET /api/wp-model` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/wp-model`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bef7723f431e9fe", "name": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups", "shortDescription": {"text": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups/WinProbability.tsx:171)"}, "fullDescription": {"text": "`src/components/matchups/WinProbability.tsx:171` calls `GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/defense-strength`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02e4e5ca6a67e8e1", "name": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/WinPr", "shortDescription": {"text": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/WinProbability.tsx:188)"}, "fullDescription": {"text": "`src/components/matchups/WinProbability.tsx:188` calls `GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nfl-week-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-dca37f4e2c94099f", "name": "Dangling fetch: POST /api/votes/${pollId}/upload (src/components/votes/FormQuestionFields.tsx:436)", "shortDescription": {"text": "Dangling fetch: POST /api/votes/${pollId}/upload (src/components/votes/FormQuestionFields.tsx:436)"}, "fullDescription": {"text": "`src/components/votes/FormQuestionFields.tsx:436` calls `POST /api/votes/${pollId}/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>/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-fe02670a382b9a07", "name": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:80)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:80` calls `GET /api/teams/trade-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/teams/trade-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa32ad5e977e3ed7", "name": "Dangling fetch: GET /api/auth/me (src/components/trades/TradeBlockTab.tsx:81)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/components/trades/TradeBlockTab.tsx:81)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:81` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3a1439cff650e2d", "name": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:107)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:107` calls `GET /api/players/names?ids=${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/players/names`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f87714ced160d9a7", "name": "Dangling fetch: GET /api/me/assets (src/components/trades/TradeBlockTab.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/me/assets (src/components/trades/TradeBlockTab.tsx:119)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:119` calls `GET /api/me/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7aece2022f8145ce", "name": "Dangling fetch: GET /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:120)", "shortDescription": {"text": "Dangling fetch: GET /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:120)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:120` calls `GET /api/me/trade-block` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/trade-block`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22cd2ed651c990f3", "name": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:134)", "shortDescription": {"text": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:134)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:134` calls `GET /api/players/names?ids=${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/players/names`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8daf7a6faf33b5d", "name": "Dangling fetch: GET /api/draft/next-order (src/components/trades/TradeBlockTab.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/trades/TradeBlockTab.tsx:142)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:142` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d3c2063466b404e", "name": "Dangling fetch: PUT /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:226)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:226)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:226` calls `PUT /api/me/trade-block` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/trade-block`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb1c3dae2682ccc3", "name": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:243)", "shortDescription": {"text": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:243)"}, "fullDescription": {"text": "`src/components/trades/TradeBlockTab.tsx:243` calls `GET /api/teams/trade-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/teams/trade-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c7be7146b0e8b74", "name": "Dangling fetch: GET /api/taxi/flags (src/app/page.tsx:439)", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/flags (src/app/page.tsx:439)"}, "fullDescription": {"text": "`src/app/page.tsx:439` calls `GET /api/taxi/flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e29130db4a535d60", "name": "Dangling fetch: GET /api/rules/ask (src/app/rules/page.tsx:183)", "shortDescription": {"text": "Dangling fetch: GET /api/rules/ask (src/app/rules/page.tsx:183)"}, "fullDescription": {"text": "`src/app/rules/page.tsx:183` calls `GET /api/rules/ask` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rules/ask`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a163fa1fca1db29", "name": "Dangling fetch: POST /api/rules/ask (src/app/rules/page.tsx:201)", "shortDescription": {"text": "Dangling fetch: POST /api/rules/ask (src/app/rules/page.tsx:201)"}, "fullDescription": {"text": "`src/app/rules/page.tsx:201` calls `POST /api/rules/ask` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rules/ask`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09e315bdcc18377a", "name": "Dangling fetch: POST https://api.groq.com/openai/v1/chat/completions (src/app/api/rules/ask/route.ts:107)", "shortDescription": {"text": "Dangling fetch: POST https://api.groq.com/openai/v1/chat/completions (src/app/api/rules/ask/route.ts:107)"}, "fullDescription": {"text": "`src/app/api/rules/ask/route.ts:107` calls `POST https://api.groq.com/openai/v1/chat/completions` 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.groq.com/openai/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3df7712735d6616a", "name": "Dangling fetch: POST https://api.cerebras.ai/v1/chat/completions (src/app/api/rules/ask/route.ts:130)", "shortDescription": {"text": "Dangling fetch: POST https://api.cerebras.ai/v1/chat/completions (src/app/api/rules/ask/route.ts:130)"}, "fullDescription": {"text": "`src/app/api/rules/ask/route.ts:130` calls `POST https://api.cerebras.ai/v1/chat/completions` 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.cerebras.ai/v1/chat/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d197affdd0bc49eb", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/league/overview/route.ts:217", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/league/overview/route.ts:217)"}, "fullDescription": {"text": "`src/app/api/league/overview/route.ts:217` calls `GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6bfa786962b4bee", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${currentLeagueId}/traded_picks (src/app/api/mcp/drafts/route.ts:1", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${currentLeagueId}/traded_picks (src/app/api/mcp/drafts/route.ts:119)"}, "fullDescription": {"text": "`src/app/api/mcp/drafts/route.ts:119` calls `GET https://api.sleeper.app/v1/league/${currentLeagueId}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-459534d2663dd66a", "name": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/admin/refres", "shortDescription": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/admin/refresh-dynasty-rankings/route.ts:48)"}, "fullDescription": {"text": "`src/app/api/admin/refresh-dynasty-rankings/route.ts:48` calls `GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5` 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.fantasycalc.com/values/current`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3383235f7586fb2f", "name": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/newsletter/r", "shortDescription": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/newsletter/route.ts:1127)"}, "fullDescription": {"text": "`src/app/api/newsletter/route.ts:1127` calls `GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5` 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.fantasycalc.com/values/current`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5dd526f11bb17c49", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/export/drafts/route.ts:144)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/export/drafts/route.ts:144)"}, "fullDescription": {"text": "`src/app/api/export/drafts/route.ts:144` calls `GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-256e085651d526c0", "name": "Dangling fetch: GET /api/suggestions (src/app/suggestions/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions (src/app/suggestions/page.tsx:126)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:126` calls `GET /api/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-729cb60e524adf1b", "name": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:140)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:140)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:140` calls `GET /api/suggestions/tallies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions/tallies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-203ef381d577c709", "name": "Dangling fetch: GET /api/auth/me (src/app/suggestions/page.tsx:144)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/suggestions/page.tsx:144)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:144` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-964a5583567b3c80", "name": "Dangling fetch: GET /api/admin-login (src/app/suggestions/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/suggestions/page.tsx:148)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:148` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-47eddf654bf62e36", "name": "Dangling fetch: GET /api/me/suggestions/votes (src/app/suggestions/page.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /api/me/suggestions/votes (src/app/suggestions/page.tsx:152)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:152` calls `GET /api/me/suggestions/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/suggestions/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3570c92ef8b9c3b", "name": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/suggestions/page.tsx:160)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/suggestions/page.tsx:160)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:160` calls `GET /api/admin/suggestions/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d891bd135c9a40fb", "name": "Dangling fetch: PUT /api/me/suggestions/vote (src/app/suggestions/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/suggestions/vote (src/app/suggestions/page.tsx:185)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:185` calls `PUT /api/me/suggestions/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/suggestions/vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a0859e38e4d8fa1", "name": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:192)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:192)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:192` calls `GET /api/suggestions/tallies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions/tallies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05311d7c467fa684", "name": "Dangling fetch: POST /api/suggestions (src/app/suggestions/page.tsx:263)", "shortDescription": {"text": "Dangling fetch: POST /api/suggestions (src/app/suggestions/page.tsx:263)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:263` calls `POST /api/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c690a1f23cc51a1", "name": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/page.tsx:287)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/page.tsx:287)"}, "fullDescription": {"text": "`src/app/suggestions/page.tsx:287` calls `PUT /api/me/suggestions/endorse` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/suggestions/endorse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6d88dfc938a213b", "name": "Dangling fetch: GET /api/suggestions (src/app/suggestions/[id]/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions (src/app/suggestions/[id]/page.tsx:67)"}, "fullDescription": {"text": "`src/app/suggestions/[id]/page.tsx:67` calls `GET /api/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfcf3aa6fc2a11ec", "name": "Dangling fetch: GET /api/auth/me (src/app/suggestions/[id]/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/suggestions/[id]/page.tsx:86)"}, "fullDescription": {"text": "`src/app/suggestions/[id]/page.tsx:86` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acce73bff3313810", "name": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/[id]/page.tsx:136)", "shortDescription": {"text": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/[id]/page.tsx:136)"}, "fullDescription": {"text": "`src/app/suggestions/[id]/page.tsx:136` calls `PUT /api/me/suggestions/endorse` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/me/suggestions/endorse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00201cde58e5d45c", "name": "Dangling fetch: GET /api/admin-login (src/app/draft/DraftContent.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/draft/DraftContent.tsx:94)"}, "fullDescription": {"text": "`src/app/draft/DraftContent.tsx:94` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-3a3b0829f8e3ab5e", "name": "Dangling fetch: GET /api/draft/next-order?season=${orderSeason} (src/app/draft/DraftContent.tsx:1016)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order?season=${orderSeason} (src/app/draft/DraftContent.tsx:1016)"}, "fullDescription": {"text": "`src/app/draft/DraftContent.tsx:1016` calls `GET /api/draft/next-order?season=${orderSeason}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b272858907398775", "name": "Dangling fetch: GET /api/auth/me (src/app/draft/room/page.tsx:15)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/draft/room/page.tsx:15)"}, "fullDescription": {"text": "`src/app/draft/room/page.tsx:15` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b640a262262ecce", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:223)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:223)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:223` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-12ef1bdefea24b24", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:271)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:271)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:271` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-fec189fbc8f02e3b", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:286)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:286)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:286` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-bd933094c80b6f45", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:301)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:301)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:301` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-eadecc0bf4a5d215", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:313)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:313)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:313` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-868a9885bc1b07ec", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:338)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:338)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:338` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-63e7f2282bd9bfe2", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:355)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:355)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:355` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-8e27ce755523d5d1", "name": "Dangling fetch: GET /api/team-prospect-draftboard (src/app/draft/room/team/page.tsx:394)", "shortDescription": {"text": "Dangling fetch: GET /api/team-prospect-draftboard (src/app/draft/room/team/page.tsx:394)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:394` calls `GET /api/team-prospect-draftboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-prospect-draftboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e745971c499f4a8b", "name": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(myTeam)}${draftIdParam} (src/app/draft/room/team/pa", "shortDescription": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(myTeam)}${draftIdParam} (src/app/draft/room/team/page.tsx:429)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:429` calls `GET /api/draft/team-roster?team=${encodeURIComponent(myTeam)}${draftIdParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/team-roster`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b38b0e73575b3a3f", "name": "Dangling fetch: GET /api/auth/me (src/app/draft/room/team/page.tsx:442)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/draft/room/team/page.tsx:442)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:442` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a6271fe08486e19", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:471)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:471)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:471` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-cfbd595d56c1e3b6", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:482)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:482)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:482` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-27a09293e79cabe4", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:496)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:496)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:496` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-cb3e6e8ab920c568", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:541)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:541)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:541` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-5ced4d7896e9b730", "name": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:564)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:564)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:564` calls `GET /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff78a360e24adf7a", "name": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:599)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:599)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:599` calls `GET /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be38cd89dd04e29b", "name": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(pid)} (src/app/draft/room/team/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(pid)} (src/app/draft/room/team/page.tsx:646)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:646` calls `GET /api/draft?action=player_info&playerId=${encodeURIComponent(pid)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-be2cf90f288563e9", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:688)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:688)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:688` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-33ee37d0b7e4cd7c", "name": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draft.id} (src/app/dra", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draft.id} (src/app/draft/room/team/page.tsx:761)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:761` calls `GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${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: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb3f7c601100ae21", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1697)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1697)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:1697` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-ace729eabfef5925", "name": "Dangling fetch: POST /api/draft/trade (src/app/draft/room/team/page.tsx:1721)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/trade (src/app/draft/room/team/page.tsx:1721)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:1721` calls `POST /api/draft/trade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc0f2a9639e4cbfc", "name": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1753)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1753)"}, "fullDescription": {"text": "`src/app/draft/room/team/page.tsx:1753` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-be4ea91cb174d3c8", "name": "Dangling fetch: GET /api/taxi/validate?season=${encodeURIComponent(String(selectedYear))}&rosterId=${encodeURIComponent(", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/validate?season=${encodeURIComponent(String(selectedYear))}&rosterId=${encodeURIComponent(String(rosterId))} (src/app/teams/[id]/TeamContent.tsx:228)"}, "fullDescription": {"text": "`src/app/teams/[id]/TeamContent.tsx:228` calls `GET /api/taxi/validate?season=${encodeURIComponent(String(selectedYear))}&rosterId=${encodeURIComponent(String(rosterId))}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/validate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5738d0a44a64a6f", "name": "Dangling fetch: GET /api/lineups/snapshot?year=${encodeURIComponent(snapYear)}&week=${encodeURIComponent(String(snapWeek", "shortDescription": {"text": "Dangling fetch: GET /api/lineups/snapshot?year=${encodeURIComponent(snapYear)}&week=${encodeURIComponent(String(snapWeek))} (src/app/teams/[id]/TeamContent.tsx:266)"}, "fullDescription": {"text": "`src/app/teams/[id]/TeamContent.tsx:266` calls `GET /api/lineups/snapshot?year=${encodeURIComponent(snapYear)}&week=${encodeURIComponent(String(snapWeek))}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lineups/snapshot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89ec94240e8b3669", "name": "Dangling fetch: POST /api/lineups/snapshot (src/app/teams/[id]/TeamContent.tsx:281)", "shortDescription": {"text": "Dangling fetch: POST /api/lineups/snapshot (src/app/teams/[id]/TeamContent.tsx:281)"}, "fullDescription": {"text": "`src/app/teams/[id]/TeamContent.tsx:281` calls `POST /api/lineups/snapshot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lineups/snapshot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52599e910524e195", "name": "Dangling fetch: GET /api/lineups/snapshot/backfill?year=${encodeURIComponent(snapYear)}&overwrite=true (src/app/teams/[i", "shortDescription": {"text": "Dangling fetch: GET /api/lineups/snapshot/backfill?year=${encodeURIComponent(snapYear)}&overwrite=true (src/app/teams/[id]/TeamContent.tsx:299)"}, "fullDescription": {"text": "`src/app/teams/[id]/TeamContent.tsx:299` calls `GET /api/lineups/snapshot/backfill?year=${encodeURIComponent(snapYear)}&overwrite=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lineups/snapshot/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-72a41e0a8eaab41d", "name": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(teamName)} (src/app/teams/[id]/TeamCont", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(teamName)} (src/app/teams/[id]/TeamContent.tsx:796)"}, "fullDescription": {"text": "`src/app/teams/[id]/TeamContent.tsx:796` calls `GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(teamName)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-127158ba60e1b8be", "name": "Dangling fetch: GET /api/admin/pins (src/app/admin/users/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/pins (src/app/admin/users/page.tsx:43)"}, "fullDescription": {"text": "`src/app/admin/users/page.tsx:43` calls `GET /api/admin/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b3b908efe75b7da", "name": "Dangling fetch: POST /api/admin/pins/set (src/app/admin/users/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/pins/set (src/app/admin/users/page.tsx:63)"}, "fullDescription": {"text": "`src/app/admin/users/page.tsx:63` calls `POST /api/admin/pins/set` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pins/set`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97a3e0432c42b9e1", "name": "Dangling fetch: GET /api/admin/audit/logins?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/audit/logins?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:88)"}, "fullDescription": {"text": "`src/app/admin/users/page.tsx:88` calls `GET /api/admin/audit/logins?days=${encodeURIComponent(String(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/audit/logins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9a5e53e80ee7999", "name": "Dangling fetch: GET /api/admin/activity/time?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/activity/time?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:89)"}, "fullDescription": {"text": "`src/app/admin/users/page.tsx:89` calls `GET /api/admin/activity/time?days=${encodeURIComponent(String(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/activity/time`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47d85776137f7691", "name": "Dangling fetch: GET /api/admin-login (src/app/admin/taxi/page.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/taxi/page.tsx:80)"}, "fullDescription": {"text": "`src/app/admin/taxi/page.tsx:80` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-08d5b2731b18a8e0", "name": "Dangling fetch: GET /api/taxi/flags (src/app/admin/taxi/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/flags (src/app/admin/taxi/page.tsx:97)"}, "fullDescription": {"text": "`src/app/admin/taxi/page.tsx:97` calls `GET /api/taxi/flags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/flags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c12b980010c956d", "name": "Dangling fetch: GET /api/taxi/analysis?season=${encodeURIComponent(season)}&rosterId=${tm.rosterId} (src/app/admin/taxi/", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/analysis?season=${encodeURIComponent(season)}&rosterId=${tm.rosterId} (src/app/admin/taxi/page.tsx:110)"}, "fullDescription": {"text": "`src/app/admin/taxi/page.tsx:110` calls `GET /api/taxi/analysis?season=${encodeURIComponent(season)}&rosterId=${tm.rosterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/analysis`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0eca423c09c0dfcb", "name": "Dangling fetch: POST /api/admin-login (src/app/admin/taxi/page.tsx:157)", "shortDescription": {"text": "Dangling fetch: POST /api/admin-login (src/app/admin/taxi/page.tsx:157)"}, "fullDescription": {"text": "`src/app/admin/taxi/page.tsx:157` calls `POST /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-4d86a43a29607370", "name": "Dangling fetch: GET /api/taxi/report (src/app/admin/taxi/page.tsx:230)", "shortDescription": {"text": "Dangling fetch: GET /api/taxi/report (src/app/admin/taxi/page.tsx:230)"}, "fullDescription": {"text": "`src/app/admin/taxi/page.tsx:230` calls `GET /api/taxi/report` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/taxi/report`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2e75f1a75680b23", "name": "Dangling fetch: GET /api/suggestions (src/app/admin/suggestions/page.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/suggestions (src/app/admin/suggestions/page.tsx:43)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:43` calls `GET /api/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-199fe78e851f464a", "name": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/admin/suggestions/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/admin/suggestions/page.tsx:44)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:44` calls `GET /api/admin/suggestions/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-844dc131f0acb77a", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:133)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:133` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6da05d39ab8a68aa", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:233)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:233)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:233` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c4e6381585c9498", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:281)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:281` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68f96bce263f4af1", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:312)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:312)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:312` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1b96390e6c85590", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:343)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:343` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96feaedfaa360211", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:370)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:370)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:370` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0c85ae07f4164de", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:387)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:387)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:387` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-692f15ab8b355536", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:405)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:405)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:405` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15084650a013accd", "name": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:418)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:418)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:418` calls `PUT /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-576fdff638c59248", "name": "Dangling fetch: DELETE /api/admin/suggestions (src/app/admin/suggestions/page.tsx:432)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/suggestions (src/app/admin/suggestions/page.tsx:432)"}, "fullDescription": {"text": "`src/app/admin/suggestions/page.tsx:432` calls `DELETE /api/admin/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-139cc292f2fededc", "name": "Dangling fetch: GET /api/draft/player-images-files (src/app/admin/draft/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-images-files (src/app/admin/draft/page.tsx:62)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:62` calls `GET /api/draft/player-images-files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-images-files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36993c1c35ba4de7", "name": "Dangling fetch: GET /api/draft/player-videos (src/app/admin/draft/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/admin/draft/page.tsx:90)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:90` calls `GET /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b5d6d416420d348", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:108)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:108` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-3c590c8c1a07b311", "name": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:154)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:154` calls `POST /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fef27465a94531b2", "name": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:168)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:168` calls `POST /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92d97aab941dd58f", "name": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:192)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:192)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:192` calls `POST /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4af20843c703d542", "name": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:271)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:271)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:271` calls `POST /api/draft/player-media` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-media`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c3e48330fa8fce3", "name": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:343)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:343` calls `POST /api/draft/player-media` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-media`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4f146dbc006bf16", "name": "Dangling fetch: GET /api/draft/trade?action=get_admin_pending (src/app/admin/draft/page.tsx:528)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/trade?action=get_admin_pending (src/app/admin/draft/page.tsx:528)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:528` calls `GET /api/draft/trade?action=get_admin_pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb88c201fe701871", "name": "Dangling fetch: POST /api/draft/trade (src/app/admin/draft/page.tsx:545)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/trade (src/app/admin/draft/page.tsx:545)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:545` calls `POST /api/draft/trade` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/trade`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7947897d8040e2f1", "name": "Dangling fetch: GET /api/admin-login (src/app/admin/draft/page.tsx:566)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/draft/page.tsx:566)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:566` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-81372c93dd64e7a4", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:572)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:572)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:572` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-f21b51c42c9e951a", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:593)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:593)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:593` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-41c4a7874bb16fc7", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:715)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:715)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:715` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-9ad4a9732df4c3a8", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:739)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:739)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:739` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-00979146b45c2910", "name": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:753)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:753)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:753` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4fd0135f7d19260", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:794)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:794)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:794` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-eb2f89cf454db45d", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:897)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:897)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:897` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-14eb1f14041bb835", "name": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:918)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:918)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:918` calls `POST /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9d5a404582b7c78", "name": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:921)", "shortDescription": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:921)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:921` calls `POST /api/draft/player-videos` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/player-videos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48ba1f5598b118a0", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:937)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:937)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:937` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-c8d6e954a23dbd0b", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:988)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:988)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:988` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-0a669d149dde16fc", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1005)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1005)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1005` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-36f9232216e7b561", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1196)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1196)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1196` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-9546884ecf6fcd2d", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1216)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1216)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1216` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-9f71ee292e6041da", "name": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:1453)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:1453)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1453` calls `GET /api/draft/next-order` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/next-order`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d0e1c776d2e7f7d", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1686)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1686)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1686` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-084f30f30160f985", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1760)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1760)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1760` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-cd31b0f0ecdb3d82", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1881)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1881)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1881` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-c5e41f4f197ff4c2", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1943)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1943)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1943` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-f446bcb28f97da29", "name": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1970)", "shortDescription": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1970)"}, "fullDescription": {"text": "`src/app/admin/draft/page.tsx:1970` calls `POST /api/draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/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-ddb040014c7432f9", "name": "Dangling fetch: GET /api/health/storage (src/app/admin/storage-test/page.tsx:20)", "shortDescription": {"text": "Dangling fetch: GET /api/health/storage (src/app/admin/storage-test/page.tsx:20)"}, "fullDescription": {"text": "`src/app/admin/storage-test/page.tsx:20` calls `GET /api/health/storage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/health/storage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ba2f244699e56bd", "name": "Dangling fetch: POST /api/media/presign (src/app/admin/storage-test/page.tsx:37)", "shortDescription": {"text": "Dangling fetch: POST /api/media/presign (src/app/admin/storage-test/page.tsx:37)"}, "fullDescription": {"text": "`src/app/admin/storage-test/page.tsx:37` calls `POST /api/media/presign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/media/presign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fdaa20eae9bea633", "name": "Dangling fetch: GET /api/admin/diagnostics?runId=${encodeURIComponent(runId)} (src/app/admin/diagnostics/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/diagnostics?runId=${encodeURIComponent(runId)} (src/app/admin/diagnostics/page.tsx:133)"}, "fullDescription": {"text": "`src/app/admin/diagnostics/page.tsx:133` calls `GET /api/admin/diagnostics?runId=${encodeURIComponent(runId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/diagnostics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1a00bcdb23ea198", "name": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/diagnostics/page.tsx:149)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/diagnostics/page.tsx:149)"}, "fullDescription": {"text": "`src/app/admin/diagnostics/page.tsx:149` calls `POST /api/newsletter/generate-step` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/generate-step`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3848ab51db0456b1", "name": "Dangling fetch: GET /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:47)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:47` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-ef665df67dbc9fb2", "name": "Dangling fetch: GET /api/manual-trades?all=1 (src/app/admin/trades/AdminTradesContent.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/manual-trades?all=1 (src/app/admin/trades/AdminTradesContent.tsx:80)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:80` calls `GET /api/manual-trades?all=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/manual-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25e610924db5af2a", "name": "Dangling fetch: POST /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:129)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:129` calls `POST /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-6d65cd08379f8e00", "name": "Dangling fetch: GET /api/manual-trades (src/app/admin/trades/AdminTradesContent.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/manual-trades (src/app/admin/trades/AdminTradesContent.tsx:155)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:155` calls `GET /api/manual-trades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/manual-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2a88a1f5b5cd137", "name": "Dangling fetch: DELETE /api/manual-trades?id=${encodeURIComponent(id)} (src/app/admin/trades/AdminTradesContent.tsx:183)", "shortDescription": {"text": "Dangling fetch: DELETE /api/manual-trades?id=${encodeURIComponent(id)} (src/app/admin/trades/AdminTradesContent.tsx:183)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:183` calls `DELETE /api/manual-trades?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/manual-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7fdb15368e8f46b", "name": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(q)} (src/app/admin/trades/AdminTradesContent.tsx:321)", "shortDescription": {"text": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(q)} (src/app/admin/trades/AdminTradesContent.tsx:321)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:321` calls `GET /api/search/players?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: `/search/players`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f74daf140bff6f9d", "name": "Dangling fetch: GET /api/search/pick-became?${qs.toString()} (src/app/admin/trades/AdminTradesContent.tsx:450)", "shortDescription": {"text": "Dangling fetch: GET /api/search/pick-became?${qs.toString()} (src/app/admin/trades/AdminTradesContent.tsx:450)"}, "fullDescription": {"text": "`src/app/admin/trades/AdminTradesContent.tsx:450` calls `GET /api/search/pick-became?${qs.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/pick-became`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db31e92f3f4576d6", "name": "Dangling fetch: GET /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:86)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditorialCalendar.tsx:86` calls `GET /api/newsletter/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/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-969de10eaa29b961", "name": "Dangling fetch: POST /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:116)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:116)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditorialCalendar.tsx:116` calls `POST /api/newsletter/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/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-732aeed24bf7ac07", "name": "Dangling fetch: PATCH /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:143)", "shortDescription": {"text": "Dangling fetch: PATCH /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:143)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditorialCalendar.tsx:143` calls `PATCH /api/newsletter/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/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-41c492a72d2e69e7", "name": "Dangling fetch: DELETE /api/newsletter/queue?id=${encodeURIComponent(id)} (src/app/admin/newsletter/EditorialCalendar.ts", "shortDescription": {"text": "Dangling fetch: DELETE /api/newsletter/queue?id=${encodeURIComponent(id)} (src/app/admin/newsletter/EditorialCalendar.tsx:162)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditorialCalendar.tsx:162` calls `DELETE /api/newsletter/queue?id=${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/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-9154e9010505683a", "name": "Dangling fetch: GET /api/newsletter?list=true&season=${season}&draft=1 (src/app/admin/newsletter/SavedNewsletters.tsx:72", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?list=true&season=${season}&draft=1 (src/app/admin/newsletter/SavedNewsletters.tsx:72)"}, "fullDescription": {"text": "`src/app/admin/newsletter/SavedNewsletters.tsx:72` calls `GET /api/newsletter?list=true&season=${season}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66e3ecd9243e5145", "name": "Dangling fetch: DELETE /api/newsletter?week=${item.week}&season=${item.season} (src/app/admin/newsletter/SavedNewsletter", "shortDescription": {"text": "Dangling fetch: DELETE /api/newsletter?week=${item.week}&season=${item.season} (src/app/admin/newsletter/SavedNewsletters.tsx:96)"}, "fullDescription": {"text": "`src/app/admin/newsletter/SavedNewsletters.tsx:96` calls `DELETE /api/newsletter?week=${item.week}&season=${item.season}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a8a2df1c9378d55", "name": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/page.tsx:211)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:211` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-eb5c3e93cf3ea9c7", "name": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/admin/newsletter/page.tsx:222)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/admin/newsletter/page.tsx:222)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:222` calls `GET https://api.sleeper.app/v1/state/nfl` 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.sleeper.app/v1/state/nfl`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cfa23bec90fc6e3", "name": "Dangling fetch: GET /api/newsletter?list=true&season=${s}&draft=1 (src/app/admin/newsletter/page.tsx:233)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?list=true&season=${s}&draft=1 (src/app/admin/newsletter/page.tsx:233)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:233` calls `GET /api/newsletter?list=true&season=${s}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8c2b40b3dee0df9", "name": "Dangling fetch: GET /api/newsletter?season=${s}&week=${wNum}&draft=1 (src/app/admin/newsletter/page.tsx:252)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?season=${s}&week=${wNum}&draft=1 (src/app/admin/newsletter/page.tsx:252)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:252` calls `GET /api/newsletter?season=${s}&week=${wNum}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3088c215112aafc6", "name": "Dangling fetch: POST /api/newsletter (src/app/admin/newsletter/page.tsx:294)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter (src/app/admin/newsletter/page.tsx:294)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:294` calls `POST /api/newsletter` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-feef6e447984995b", "name": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:329)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:329)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:329` calls `POST /api/newsletter/generate-step` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/generate-step`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-623edf5c9750007e", "name": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:413)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:413)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:413` calls `GET /api/newsletter?week=${wNum}&season=${season}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5307b8bbb8012d4d", "name": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:480)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:480)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:480` calls `POST /api/newsletter/generate-step` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/generate-step`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffe3a6de59be7f88", "name": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:528)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:528)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:528` calls `GET /api/newsletter?week=${wNum}&season=${season}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6efe5d2c534c41e4", "name": "Dangling fetch: POST /api/newsletter/publish (src/app/admin/newsletter/page.tsx:553)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/publish (src/app/admin/newsletter/page.tsx:553)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:553` calls `POST /api/newsletter/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/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-d219aacfda13bde8", "name": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:582)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:582)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:582` calls `GET /api/newsletter?week=${wNum}&season=${season}&draft=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e10dcceab6a4c98", "name": "Dangling fetch: DELETE /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/page.tsx:608)", "shortDescription": {"text": "Dangling fetch: DELETE /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/page.tsx:608)"}, "fullDescription": {"text": "`src/app/admin/newsletter/page.tsx:608` calls `DELETE /api/newsletter?week=${wNum}&season=${season}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e7da993e89ecb3d", "name": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/EditModePanel.tsx:266)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/EditModePanel.tsx:266)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:266` calls `GET /api/newsletter?week=${wNum}&season=${season}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c5edb9998bd86bc", "name": "Dangling fetch: GET /api/admin/diagnostics?season=${season}&week=${wNum} (src/app/admin/newsletter/EditModePanel.tsx:289", "shortDescription": {"text": "Dangling fetch: GET /api/admin/diagnostics?season=${season}&week=${wNum} (src/app/admin/newsletter/EditModePanel.tsx:289)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:289` calls `GET /api/admin/diagnostics?season=${season}&week=${wNum}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/diagnostics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15c4e27841fa1d89", "name": "Dangling fetch: POST /api/newsletter/fact-audit (src/app/admin/newsletter/EditModePanel.tsx:305)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/fact-audit (src/app/admin/newsletter/EditModePanel.tsx:305)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:305` calls `POST /api/newsletter/fact-audit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/fact-audit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22e71cce07eea9eb", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:362)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:362)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:362` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6271478df13df747", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:408)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:408)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:408` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbf886de502b760c", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:436)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:436)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:436` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db480bee0f1ee048", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:459)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:459)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:459` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49eda13200258688", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:486)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:486)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:486` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f2f307f2d3248d7", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:509)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:509)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:509` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34e814804b22bab6", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:576)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:576)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:576` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a2b37a05c16e9be", "name": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:611)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:611)"}, "fullDescription": {"text": "`src/app/admin/newsletter/EditModePanel.tsx:611` calls `POST /api/newsletter/edit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/edit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c78671da9706113", "name": "Dangling fetch: POST /api/newsletter/generate-section (src/app/admin/newsletter/section-lab/page.tsx:179)", "shortDescription": {"text": "Dangling fetch: POST /api/newsletter/generate-section (src/app/admin/newsletter/section-lab/page.tsx:179)"}, "fullDescription": {"text": "`src/app/admin/newsletter/section-lab/page.tsx:179` calls `POST /api/newsletter/generate-section` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter/generate-section`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21fd7628ff86bc55", "name": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/personality/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/personality/page.tsx:98)"}, "fullDescription": {"text": "`src/app/admin/newsletter/personality/page.tsx:98` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-9948a3557a6239c5", "name": "Dangling fetch: GET /api/admin/pins (src/app/admin/pins/page.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/pins (src/app/admin/pins/page.tsx:33)"}, "fullDescription": {"text": "`src/app/admin/pins/page.tsx:33` calls `GET /api/admin/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-827e4a612df8516f", "name": "Dangling fetch: POST /api/admin/pins (src/app/admin/pins/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/pins (src/app/admin/pins/page.tsx:52)"}, "fullDescription": {"text": "`src/app/admin/pins/page.tsx:52` calls `POST /api/admin/pins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e262ca1d498ea919", "name": "Dangling fetch: GET /api/votes (src/app/votes/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/votes (src/app/votes/page.tsx:83)"}, "fullDescription": {"text": "`src/app/votes/page.tsx:83` calls `GET /api/votes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-781d4d6758198d54", "name": "Dangling fetch: GET /api/votes/${id} (src/app/votes/[id]/page.tsx:448)", "shortDescription": {"text": "Dangling fetch: GET /api/votes/${id} (src/app/votes/[id]/page.tsx:448)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:448` calls `GET /api/votes/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3b6ae8d05eaf998", "name": "Dangling fetch: GET /api/auth/me (src/app/votes/[id]/page.tsx:448)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/votes/[id]/page.tsx:448)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:448` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65549af20512848a", "name": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:497)", "shortDescription": {"text": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:497)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:497` calls `POST /api/votes/${id}/cast` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>/cast`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d08b5770a2dbe5a", "name": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:515)", "shortDescription": {"text": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:515)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:515` calls `POST /api/votes/${id}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77d2efe4e8d32b1d", "name": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:539)", "shortDescription": {"text": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:539)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:539` calls `POST /api/votes/${id}/cast` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>/cast`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f02b9095598b8f9d", "name": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:540)", "shortDescription": {"text": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:540)"}, "fullDescription": {"text": "`src/app/votes/[id]/page.tsx:540` calls `POST /api/votes/${id}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/votes/<p>/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fafd65a7872e8974", "name": "Dangling fetch: GET /api/admin-login (src/app/trades/TradesFeedClient.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/trades/TradesFeedClient.tsx:129)"}, "fullDescription": {"text": "`src/app/trades/TradesFeedClient.tsx:129` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-6c9f5d0be12a27a1", "name": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(query)} (src/app/trades/tracker/TrackerContent.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(query)} (src/app/trades/tracker/TrackerContent.tsx:35)"}, "fullDescription": {"text": "`src/app/trades/tracker/TrackerContent.tsx:35` calls `GET /api/search/players?q=${encodeURIComponent(query)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/search/players`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9110daeff3643b4b", "name": "Dangling fetch: GET /api/trade-tree?${query} (src/app/trades/tracker/TrackerContent.tsx:158)", "shortDescription": {"text": "Dangling fetch: GET /api/trade-tree?${query} (src/app/trades/tracker/TrackerContent.tsx:158)"}, "fullDescription": {"text": "`src/app/trades/tracker/TrackerContent.tsx:158` calls `GET /api/trade-tree?${query}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trade-tree`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b5dc472e570e652", "name": "Dangling fetch: GET /api/admin-login (src/app/trades/[id]/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/admin-login (src/app/trades/[id]/page.tsx:58)"}, "fullDescription": {"text": "`src/app/trades/[id]/page.tsx:58` calls `GET /api/admin-login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin-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-750e7e2f2f0ed31e", "name": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:391)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:391)"}, "fullDescription": {"text": "`src/app/trades/analyzer/page.tsx:391` calls `GET /api/draft/team-roster?team=${encodeURIComponent(t)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/team-roster`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78805fdef6f732c7", "name": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:714)", "shortDescription": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:714)"}, "fullDescription": {"text": "`src/app/trades/analyzer/page.tsx:714` calls `GET /api/draft/team-roster?team=${encodeURIComponent(t)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/draft/team-roster`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7873b832fff658b", "name": "Dangling fetch: GET /api/trade-analyzer/values (src/app/trades/analyzer/page.tsx:798)", "shortDescription": {"text": "Dangling fetch: GET /api/trade-analyzer/values (src/app/trades/analyzer/page.tsx:798)"}, "fullDescription": {"text": "`src/app/trades/analyzer/page.tsx:798` calls `GET /api/trade-analyzer/values` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trade-analyzer/values`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7d3534e6d247fea", "name": "Dangling fetch: GET /api/auth/me (src/app/trades/analyzer/page.tsx:799)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/trades/analyzer/page.tsx:799)"}, "fullDescription": {"text": "`src/app/trades/analyzer/page.tsx:799` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f830303be9c7efa6", "name": "Dangling fetch: POST /api/rivalries/submit (src/app/rivalries/page.tsx:278)", "shortDescription": {"text": "Dangling fetch: POST /api/rivalries/submit (src/app/rivalries/page.tsx:278)"}, "fullDescription": {"text": "`src/app/rivalries/page.tsx:278` calls `POST /api/rivalries/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rivalries/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7dc4c442348dd36", "name": "Dangling fetch: POST /api/rivalries/admin (src/app/rivalries/page.tsx:741)", "shortDescription": {"text": "Dangling fetch: POST /api/rivalries/admin (src/app/rivalries/page.tsx:741)"}, "fullDescription": {"text": "`src/app/rivalries/page.tsx:741` calls `POST /api/rivalries/admin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rivalries/admin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fe1e4edb039eac8", "name": "Dangling fetch: GET /api/auth/me (src/app/rivalries/page.tsx:905)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/rivalries/page.tsx:905)"}, "fullDescription": {"text": "`src/app/rivalries/page.tsx:905` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2d2b343328db07a", "name": "Dangling fetch: GET /api/rivalries/status (src/app/rivalries/page.tsx:906)", "shortDescription": {"text": "Dangling fetch: GET /api/rivalries/status (src/app/rivalries/page.tsx:906)"}, "fullDescription": {"text": "`src/app/rivalries/page.tsx:906` calls `GET /api/rivalries/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rivalries/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-51c36c456a21a86c", "name": "Dangling fetch: GET /api/rivalries/pairings (src/app/rivalries/page.tsx:913)", "shortDescription": {"text": "Dangling fetch: GET /api/rivalries/pairings (src/app/rivalries/page.tsx:913)"}, "fullDescription": {"text": "`src/app/rivalries/page.tsx:913` calls `GET /api/rivalries/pairings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/rivalries/pairings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caded8275b852736", "name": "Dangling fetch: GET /api/auth/me (src/app/trade-block/page.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (src/app/trade-block/page.tsx:26)"}, "fullDescription": {"text": "`src/app/trade-block/page.tsx:26` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99d6ef67046aa1fe", "name": "Dangling fetch: GET /api/trade-block (src/app/trade-block/page.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /api/trade-block (src/app/trade-block/page.tsx:39)"}, "fullDescription": {"text": "`src/app/trade-block/page.tsx:39` calls `GET /api/trade-block` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trade-block`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-679eadc062d9d955", "name": "Dangling fetch: POST /api/trade-block (src/app/trade-block/page.tsx:60)", "shortDescription": {"text": "Dangling fetch: POST /api/trade-block (src/app/trade-block/page.tsx:60)"}, "fullDescription": {"text": "`src/app/trade-block/page.tsx:60` calls `POST /api/trade-block` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trade-block`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b8fb42fa57ab18a", "name": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/newsletter/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/newsletter/page.tsx:48)"}, "fullDescription": {"text": "`src/app/newsletter/page.tsx:48` calls `GET https://api.sleeper.app/v1/state/nfl` 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.sleeper.app/v1/state/nfl`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41f7a2595b87ff9e", "name": "Dangling fetch: GET /api/newsletter?season=${currentSeason}&week=${week} (src/app/newsletter/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/newsletter?season=${currentSeason}&week=${week} (src/app/newsletter/page.tsx:90)"}, "fullDescription": {"text": "`src/app/newsletter/page.tsx:90` calls `GET /api/newsletter?season=${currentSeason}&week=${week}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/newsletter`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-563efc40d458689a", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${LEAGUE_IDS.CURRENT}/traded_picks (src/lib/mcp/handlers.ts:644)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${LEAGUE_IDS.CURRENT}/traded_picks (src/lib/mcp/handlers.ts:644)"}, "fullDescription": {"text": "`src/lib/mcp/handlers.ts:644` calls `GET https://api.sleeper.app/v1/league/${LEAGUE_IDS.CURRENT}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01553c230dd56bb3", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2061)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2061)"}, "fullDescription": {"text": "`src/lib/mcp/handlers.ts:2061` calls `GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-686fcc9e4901dd39", "name": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2399)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2399)"}, "fullDescription": {"text": "`src/lib/mcp/handlers.ts:2399` calls `GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks` 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.sleeper.app/v1/league/<p>/traded_picks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb47ca397b3e48ea", "name": "Dangling fetch: POST https://api.resend.com/emails (src/lib/utils/email.ts:27)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/lib/utils/email.ts:27)"}, "fullDescription": {"text": "`src/lib/utils/email.ts:27` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dec659b31c54e60b", "name": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/lib/newsletter/data-", "shortDescription": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/lib/newsletter/data-integration.ts:662)"}, "fullDescription": {"text": "`src/lib/newsletter/data-integration.ts:662` calls `GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5` 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.fantasycalc.com/values/current`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25bc928c5e77d06d", "name": "Dangling fetch: GET https://api.sleeper.app/v1/players/nfl (src/lib/newsletter/data-integration.ts:1089)", "shortDescription": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/players/nfl (src/lib/newsletter/data-integration.ts:1089)"}, "fullDescription": {"text": "`src/lib/newsletter/data-integration.ts:1089` calls `GET https://api.sleeper.app/v1/players/nfl` 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.sleeper.app/v1/players/nfl`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c97e1b032e336c7", "name": "Dangling fetch: HEAD https://www.cloudflare.com (src/server/storage/r2.ts:65)", "shortDescription": {"text": "Dangling fetch: HEAD https://www.cloudflare.com (src/server/storage/r2.ts:65)"}, "fullDescription": {"text": "`src/server/storage/r2.ts:65` calls `HEAD https://www.cloudflare.com` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.cloudflare.com`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09d407f3624361f2", "name": "Unused endpoint: GET /state/nfl", "shortDescription": {"text": "Unused endpoint: GET /state/nfl"}, "fullDescription": {"text": "`ai-bot-project/src/ingest/sleeper.js` declares `GET /state/nfl` 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/21808"}, "properties": {"repository": "Typenine/East-v-West-Website", "repoUrl": "https://github.com/Typenine/East-v-West-Website", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361792, "scanner": "foundry_dataset", "fingerprint": "aa655043e1fd2d4f39e0d1209fe4c10d9304a963f858eefd78d4e933062a480e", "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": {"docs_or_claims": 1, "deployment_env_gap": 1, "build_install_failure": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#9", "issue_number": "9", "quality_tiers": {"unresolved": 4}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-5106c4c18f109db6", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 5}}, "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: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'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, 'build_install_failure': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-ee5aa8f3053528dd", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361791, "scanner": "foundry_dataset", "fingerprint": "2bf2fbdcf3ff172b1ff1ce9313c51b8bffba0fdf359d7c3b3ff241116bb81c23", "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": {"docs_or_claims": 8, "ui_or_frontend": 4, "deployment_env_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 64, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 12, "chain_has_link_quality": 4, "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": 24, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 12, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#8", "issue_number": "8", "quality_tiers": {"unresolved": 4}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-972ba7f43c681114", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 40, "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: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#8\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 64\nNode types: {'pr_file': 12, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 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}\nLabels: {'docs_or_claims': 8, 'ui_or_frontend': 4, 'ambiguous_needs_more_evidence': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'deployment_env_gap': 1, 'unlinked_human_feedback': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'unresolved': 4}\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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-dbef20885e4ca4d3", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361790, "scanner": "foundry_dataset", "fingerprint": "f9dc1ebd7308177c5ac56a98406a4fe51bf454a098a4b4e93f75d4b2be4d46ee", "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_workflow_gap": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "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, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 18, "node_types": {"repo": 1, "thread": 1, "comment": 2, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#7", "issue_number": "7", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-4636911a03ceedc3", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#7\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 7\nGraph consistency label: assumption_check\nNodes: 18\nEdges: 24\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'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: {'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_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-1ab122990f3315c6", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361789, "scanner": "foundry_dataset", "fingerprint": "ec6b5244d43be1c5a12cb4383e4cd4b5d523b9c5e2af0a60d073f45e3ff62deb", "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": {"api_or_backend": 3, "docs_or_claims": 4, "deployment_env_gap": 1, "partial blueprint fit": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 52, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 7, "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": 7, "thread_has_comment_chain": 2, "comment_chain_touches_file": 14, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 7, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#6", "issue_number": "6", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-7591e0d7dc3474ff", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 15, "docs_or_claims": 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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 6\nGraph consistency label: assumption_check\nNodes: 25\nEdges: 52\nNode types: {'pr_file': 7, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 14, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, '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: {'docs_or_claims': 4, 'not_resolved_or_not_observed': 4, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-a5ddeeef56ff20e9", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361788, "scanner": "foundry_dataset", "fingerprint": "b29cc24c30b367cb2dd74f495630a893ced40bd8b7dd6859d8eb298756a21ae2", "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": {"api_or_backend": 2, "deployment_env_gap": 1, "api_integration_gap": 1, "partial blueprint fit": 1, "positive_human_signal": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "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, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "alignment": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#5", "issue_number": "5", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-15b7d2a18d8bf31c", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 12}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#5\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5, '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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-050c6c52b151646e", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361787, "scanner": "foundry_dataset", "fingerprint": "73e966699ba322c58b5c40f561d3e87c36886b33b59512d3bfa7d9ee4fc3fdbf", "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": {"api_or_backend": 3, "docs_or_claims": 11, "ui_or_frontend": 3, "mock_placeholder": 1, "deployment_env_gap": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "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, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 86, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 17, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#4", "issue_number": "4", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-25395df3cc6c8eeb", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 18, "docs_or_claims": 66, "ui_or_frontend": 18}}, "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: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 32\nEdges: 86\nNode types: {'pr_file': 17, 'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'docs_or_claims': 11, 'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-410013e9aceef136", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361786, "scanner": "foundry_dataset", "fingerprint": "18e5460116f44b58c7284f331c96ae256cd55aa7d9b4ee2996d76f8afbe6165b", "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": 3, "ui_workflow_gap": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 36, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 3, "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": 3, "thread_has_comment_chain": 2, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 21, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 3, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#3", "issue_number": "3", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-d1ba2ad946325c9b", "graph_gold_label": "assumption_check", "changed_file_labels": {"ui_or_frontend": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#3\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#3\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 3\nGraph consistency label: assumption_check\nNodes: 21\nEdges: 36\nNode types: {'link_quality': 6, 'pr_file': 3, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 6, 'thread_touches_file': 3, 'issue_chain_touches_file': 3, '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: {'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, '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_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-0e71c769c994cf94", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361785, "scanner": "foundry_dataset", "fingerprint": "a9d928ba946ef8354ef7f82761da86083746d307589727621d26d6f4ae1b44d8", "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": 11, "ui_or_frontend": 12, "source_or_other": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 85, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 25, "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": 43, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 25, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-5a6c488252aa8909", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 55, "ui_or_frontend": 60, "source_or_other": 5}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#2\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 43\nEdges: 85\nNode types: {'pr_file': 25, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 25, 'comment_chain_touches_file': 24, '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': 12, 'api_or_backend': 11, '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, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'test_or_ci': 1, 'source_or_other': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-9a52bc779ce5b77e", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361784, "scanner": "foundry_dataset", "fingerprint": "70998d510c29b8267739ca54de1cf3f6b431de09f9af7ab83c9ebbb1c527b359", "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": 3, "test_ci_gap": 1, "api_or_backend": 29, "ui_or_frontend": 8, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 103, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 43, "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": 61, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 43, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#11", "issue_number": "11", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0eb87bff782979c3", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 15, "api_or_backend": 145, "ui_or_frontend": 40, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#11\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 11\nGraph consistency label: assumption_check\nNodes: 61\nEdges: 103\nNode types: {'pr_file': 43, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 43, 'comment_chain_touches_file': 24, '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: {'api_or_backend': 29, 'ui_or_frontend': 8, 'not_resolved_or_not_observed': 4, 'test_or_ci': 3, 'dependency_or_build': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-33ebbfc0d1c311c3", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361783, "scanner": "foundry_dataset", "fingerprint": "1616d8c75b840b2622c4862b7b252689d42a11b1f8824ce1aba96965a038a14d", "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": 2, "test_ci_gap": 1, "api_or_backend": 3, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 8, "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": 8, "thread_has_comment_chain": 2, "comment_chain_touches_file": 16, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 26, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 8, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#10", "issue_number": "10", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-95473d244119076c", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 10, "api_or_backend": 15, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#10\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 26\nEdges: 56\nNode types: {'pr_file': 8, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 16, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, '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: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 3, 'api_or_backend': 3, 'test_or_ci': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-dd63d0d5b40b23cd", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 361782, "scanner": "foundry_dataset", "fingerprint": "0be3242aa29c381ee10f09d2e360e7309175767c6d3ad534623d06529df36920", "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": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "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, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 17, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#1", "issue_number": "1", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-d520818307ecfdf7", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 12}}, "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: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#1\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-488330eba2633e98", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_review_followup_gap", "level": "warning", "message": {"text": "Foundry mined review feedback without structured fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358352, "scanner": "foundry_dataset", "fingerprint": "ab48edeb52f3ace25567874dd207e9266dfb138f292a86d5e6627f3210a80465", "category": "practices", "severity": "medium", "confidence": 0.72, "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": "Review feedback without structured fix chain", "intent": "Weak-supervision examples for review comments lacking a traceable fix.", "labels": {"api_or_backend": 2, "deployment_env_gap": 1, "api_integration_gap": 1, "partial blueprint fit": 1, "positive_human_signal": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "review_feedback_without_structured_fix", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "mixed", "query_id": "review_feedback_without_structured_fix", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "alignment": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#5", "issue_number": "5", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "weak_supervision", "source_motif_id": "graph-pattern-motif-thread-7db1450dad6167dd", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 12}}, "text": "Graph query export: Review feedback without structured fix chain\nQuery id: review_feedback_without_structured_fix\nQuery type: motif_query\nIntent: Weak-supervision examples for review comments lacking a traceable fix.\nMotif: review_feedback_without_structured_fix\nTraining usage: weak_supervision\nGraph gold label: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nEvidence:\nGraph motif: PR review feedback lacks a clearly structured fix chain\nMotif id: review_feedback_without_structured_fix\nPolarity: mixed\nTraining usage: weak_supervision\nSeverity: medium\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#5\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Normalize PR reviews into finding, fix, verification, and residual-risk fields.\n- Teach agents to answer review comments with traceable code and test changes.\nAssumption checks:\n- Can each review comment be mapped to a changed file or commit?\n- Was the review resolved by evidence or only left as commentary?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-8002b2a1f6b2083e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/review_feedback_without_structured_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/review_feedback_without_structured_fix", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_review_followup_gap", "level": "warning", "message": {"text": "Foundry mined review feedback without structured fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358351, "scanner": "foundry_dataset", "fingerprint": "e7eb3c970729ce76ccc0c28869a9fb9b375d08137a43d1dda391c002460700c5", "category": "practices", "severity": "medium", "confidence": 0.72, "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": "Review feedback without structured fix chain", "intent": "Weak-supervision examples for review comments lacking a traceable fix.", "labels": {"api_or_backend": 3, "docs_or_claims": 11, "ui_or_frontend": 3, "mock_placeholder": 1, "deployment_env_gap": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "review_feedback_without_structured_fix", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "mixed", "query_id": "review_feedback_without_structured_fix", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 86, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 17, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#4", "issue_number": "4", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "weak_supervision", "source_motif_id": "graph-pattern-motif-thread-3982726486571721", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 18, "docs_or_claims": 66, "ui_or_frontend": 18}}, "text": "Graph query export: Review feedback without structured fix chain\nQuery id: review_feedback_without_structured_fix\nQuery type: motif_query\nIntent: Weak-supervision examples for review comments lacking a traceable fix.\nMotif: review_feedback_without_structured_fix\nTraining usage: weak_supervision\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nEvidence:\nGraph motif: PR review feedback lacks a clearly structured fix chain\nMotif id: review_feedback_without_structured_fix\nPolarity: mixed\nTraining usage: weak_supervision\nSeverity: medium\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 32\nEdges: 86\nNode types: {'pr_file': 17, 'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'docs_or_claims': 11, 'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Normalize PR reviews into finding, fix, verification, and residual-risk fields.\n- Teach agents to answer review comments with traceable code and test changes.\nAssumption checks:\n- Can each review comment be mapped to a changed file or commit?\n- Was the review resolved by evidence or only left as commentary?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-12e61530cfe4ca80", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/review_feedback_without_structured_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/review_feedback_without_structured_fix", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_review_followup_gap", "level": "warning", "message": {"text": "Foundry mined review feedback without structured fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358350, "scanner": "foundry_dataset", "fingerprint": "c840e1189aed992c47442c8a2dbc89921302f2ba5d739c855a03efcdc4ffabb1", "category": "practices", "severity": "medium", "confidence": 0.72, "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": "Review feedback without structured fix chain", "intent": "Weak-supervision examples for review comments lacking a traceable fix.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "review_feedback_without_structured_fix", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "mixed", "query_id": "review_feedback_without_structured_fix", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 17, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#1", "issue_number": "1", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "weak_supervision", "source_motif_id": "graph-pattern-motif-thread-2015a36a23cad3fa", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 12}}, "text": "Graph query export: Review feedback without structured fix chain\nQuery id: review_feedback_without_structured_fix\nQuery type: motif_query\nIntent: Weak-supervision examples for review comments lacking a traceable fix.\nMotif: review_feedback_without_structured_fix\nTraining usage: weak_supervision\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nEvidence:\nGraph motif: PR review feedback lacks a clearly structured fix chain\nMotif id: review_feedback_without_structured_fix\nPolarity: mixed\nTraining usage: weak_supervision\nSeverity: medium\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#1\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Normalize PR reviews into finding, fix, verification, and residual-risk fields.\n- Teach agents to answer review comments with traceable code and test changes.\nAssumption checks:\n- Can each review comment be mapped to a changed file or commit?\n- Was the review resolved by evidence or only left as commentary?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-652e9f2d1df466f0", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/review_feedback_without_structured_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/review_feedback_without_structured_fix", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345547, "scanner": "foundry_dataset", "fingerprint": "e45596a068daa8f4156fd7cd1020a29625b8454d1d4aa69b8159ffd9bd8b4e28", "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_workflow_gap": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "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, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 18, "node_types": {"repo": 1, "thread": 1, "comment": 2, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#7", "issue_number": "7", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-041b3ed28b403f71", "graph_gold_label": "assumption_check", "changed_file_labels": {}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#7\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 7\nGraph consistency label: assumption_check\nNodes: 18\nEdges: 24\nNode types: {'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'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: {'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_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-aae09d1c1d4e52bb", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345546, "scanner": "foundry_dataset", "fingerprint": "24362a2626bad21d508db78d3b780e427982a1f1e4a052630106eef7ea296177", "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": {"api_or_backend": 3, "docs_or_claims": 4, "deployment_env_gap": 1, "partial blueprint fit": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 52, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 7, "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": 7, "thread_has_comment_chain": 2, "comment_chain_touches_file": 14, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 7, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#6", "issue_number": "6", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-ef5163173fe95f45", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 15, "docs_or_claims": 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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 6\nGraph consistency label: assumption_check\nNodes: 25\nEdges: 52\nNode types: {'pr_file': 7, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 14, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, '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: {'docs_or_claims': 4, 'not_resolved_or_not_observed': 4, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-7f128fb6a2295455", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345545, "scanner": "foundry_dataset", "fingerprint": "c3c3e12b9ebdb9df90afcb13c184cf5af2988fbcfb3046e3654dfc436ce6208d", "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": {"api_or_backend": 2, "deployment_env_gap": 1, "api_integration_gap": 1, "partial blueprint fit": 1, "positive_human_signal": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "blueprint_human_gap_disagreement": 1, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 39, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 7, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 23, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "alignment": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 7, "comment_chain": 3, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#5", "issue_number": "5", "quality_tiers": {"unresolved": 5, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-a085ccb0418c4a95", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 12}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#5\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 5\nGraph consistency label: assumption_check\nNodes: 23\nEdges: 39\nNode types: {'link_quality': 7, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 7, 'comment_chain_touches_file': 6, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5, '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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-7a54a765f1b675ff", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345544, "scanner": "foundry_dataset", "fingerprint": "f83ebb29590bc6f24b33c237bde17693ea0d6f744075f29f22683b0eedbc7d80", "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": 3, "ui_workflow_gap": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 36, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 3, "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": 3, "thread_has_comment_chain": 2, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 21, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 3, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#3", "issue_number": "3", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-1170c39cbcee8049", "graph_gold_label": "assumption_check", "changed_file_labels": {"ui_or_frontend": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#3\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#3\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 3\nGraph consistency label: assumption_check\nNodes: 21\nEdges: 36\nNode types: {'link_quality': 6, 'pr_file': 3, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 6, 'thread_touches_file': 3, 'issue_chain_touches_file': 3, '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: {'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, '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_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-2e6380c471f576a5", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345543, "scanner": "foundry_dataset", "fingerprint": "2aaf8b369bb0dd5ca8d7075aa612aa18a347e13d97b8bbef4c9d91a6541578be", "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": 11, "ui_or_frontend": 12, "source_or_other": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 85, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 25, "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": 43, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 25, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-bb193a125802a32b", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 55, "ui_or_frontend": 60, "source_or_other": 5}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#2\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 43\nEdges: 85\nNode types: {'pr_file': 25, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 25, 'comment_chain_touches_file': 24, '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': 12, 'api_or_backend': 11, '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, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'test_or_ci': 1, 'source_or_other': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-7df75ff8ca0c3101", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345542, "scanner": "foundry_dataset", "fingerprint": "a558e131feb20c770186a98c1f74a8be266b3eec7ea45bf858c62b91a8f28d5d", "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": 3, "test_ci_gap": 1, "api_or_backend": 29, "ui_or_frontend": 8, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 103, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 43, "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": 61, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 43, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#11", "issue_number": "11", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-c0337ad6474b9794", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 15, "api_or_backend": 145, "ui_or_frontend": 40, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#11\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 11\nGraph consistency label: assumption_check\nNodes: 61\nEdges: 103\nNode types: {'pr_file': 43, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 43, 'comment_chain_touches_file': 24, '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: {'api_or_backend': 29, 'ui_or_frontend': 8, 'not_resolved_or_not_observed': 4, 'test_or_ci': 3, 'dependency_or_build': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-42e31697878471cb", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 345541, "scanner": "foundry_dataset", "fingerprint": "1d0e50acae8c0b63ddb2c3a52370e1018d17105eb391fee96b4eac1fe8cc657f", "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": 2, "test_ci_gap": 1, "api_or_backend": 3, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 8, "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": 8, "thread_has_comment_chain": 2, "comment_chain_touches_file": 16, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 26, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 8, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#10", "issue_number": "10", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-7cab23a3eac19cd4", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 10, "api_or_backend": 15, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#10\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 26\nEdges: 56\nNode types: {'pr_file': 8, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 16, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, '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: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 3, 'api_or_backend': 3, 'test_or_ci': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-89745b2290e0fa2f", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 301207, "scanner": "foundry_dataset", "fingerprint": "8d3385e5e6564d36744e9f3300cc9c534d7f81474560b1edaeb4f1a8708a95a7", "category": "practices", "severity": "medium", "confidence": 0.62, "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": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "Typenine/East-v-West-Website#8", "human_labels": ["deployment_env_gap", "docs_or_claims", "human_feedback_general", "ui_or_frontend"], "issue_number": "8", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-29904e87ad375552", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 12, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 8, "ui_or_frontend": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\nOutcome: ambiguous_needs_more_evidence\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: Typenine/East-v-West-Website#8\nRepo: Typenine/East-v-West-Website\nThread label: thread_has_human_issue_without_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 12\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'docs_or_claims': 8, 'ui_or_frontend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-658c339f0394dd8b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/8\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/8\\nTitle: Menu navigation update 1\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-90ac8d8d9a10b67d\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/8#issuecomment-3902801285\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/8#issuecomment-3902801285\\nTitle: \\nBody:\\n[vc]: #b8zQLGNNlcztwBeWLNcctWv09UJvVcNCpg8pDWtl/W4=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJlYXN0LXYtd2VzdC13ZWJzaXRlIiwicHJvamVjdElkIjoicHJqX0JsYmxJMjk4RUxOck9RVFFLTGlhN29MUFBNMXgiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS90eXBlbmluZXMtcHJvamVjdHMvZWFzdC12LXdlc3Qtd2Vic2l0ZS9DV2JFV1liWTJSUHdpd0ExMVducHFvaVhQOHRIIiwicHJldmlld1VybCI6IiIsIm5leHRDb21taXRTdGF0dXMiOiJGQUlMRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [east-v-west-website](https://vercel.com/typenines-projects/east-v-west-website) | ![Error](https://vercel.com/static/status/error.svg) [Error](https://vercel.com/typenines-projects/east-v-west-website/CWbEWYbY2RPwiwA11WnpqoiXP8tH) |  | Feb 14, 2026 11:50pm |\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a51084441276e4\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-assumption_checks-68673e5ca0ff159a", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358134, "scanner": "foundry_dataset", "fingerprint": "2dab78e080c2311fbacfa32c4567c76b734dd1d3414957e7ccb2521e184d949a", "category": "practices", "severity": "high", "confidence": 0.8, "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": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"docs_or_claims": 1, "deployment_env_gap": 1, "build_install_failure": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#9", "issue_number": "9", "quality_tiers": {"unresolved": 4}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-ad08351525abb94d", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 5}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 9\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'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, 'build_install_failure': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-79b02631d8c44028", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358133, "scanner": "foundry_dataset", "fingerprint": "6aae1a64776469f01e6d5aa7c616122323a8050018917356be29628360a8cf59", "category": "practices", "severity": "high", "confidence": 0.8, "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": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"docs_or_claims": 8, "ui_or_frontend": 4, "deployment_env_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 64, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 12, "chain_has_link_quality": 4, "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": 24, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 12, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#8", "issue_number": "8", "quality_tiers": {"unresolved": 4}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-f7a1f7d823081b29", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 40, "ui_or_frontend": 20}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#8\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 24\nEdges: 64\nNode types: {'pr_file': 12, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 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}\nLabels: {'docs_or_claims': 8, 'ui_or_frontend': 4, 'ambiguous_needs_more_evidence': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'deployment_env_gap': 1, 'unlinked_human_feedback': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-e4812e24b845f622", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358132, "scanner": "foundry_dataset", "fingerprint": "d4f716d53ee4c1ba76e1a1aca5a66bbf42c2277720e93a4cb6cbcff1f2f25e0b", "category": "practices", "severity": "high", "confidence": 0.8, "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": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"api_or_backend": 3, "docs_or_claims": 4, "deployment_env_gap": 1, "partial blueprint fit": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 52, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 7, "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": 7, "thread_has_comment_chain": 2, "comment_chain_touches_file": 14, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 7, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#6", "issue_number": "6", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-e3b1be6a5ee4e120", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 15, "docs_or_claims": 20}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 6\nGraph consistency label: assumption_check\nNodes: 25\nEdges: 52\nNode types: {'pr_file': 7, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 14, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, '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: {'docs_or_claims': 4, 'not_resolved_or_not_observed': 4, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-bde002b89156b133", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 358131, "scanner": "foundry_dataset", "fingerprint": "91de7ee7cabcb4234cd4fefe8941660588e47ada72e91286ee47c19528b7a4e7", "category": "practices", "severity": "high", "confidence": 0.8, "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": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"api_or_backend": 3, "docs_or_claims": 11, "ui_or_frontend": 3, "mock_placeholder": 1, "deployment_env_gap": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 86, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 17, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#4", "issue_number": "4", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-1ad251592f5296c0", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 18, "docs_or_claims": 66, "ui_or_frontend": 18}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 32\nEdges: 86\nNode types: {'pr_file': 17, 'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'docs_or_claims': 11, 'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-0ef5a20276cadc94", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 336853, "scanner": "foundry_dataset", "fingerprint": "dcdb53a0943f7cbfc4d46c0ecbd878180ac7c85f1f5a7f0aee57e7d0fa16cd9f", "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": 11, "ui_or_frontend": 12, "source_or_other": 1, "deployment_env_gap": 1, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": "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": 85, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 25, "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": 43, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 25, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#2", "issue_number": "2", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-67f918facc93a08b", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 55, "ui_or_frontend": 60, "source_or_other": 5}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#2\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 43\nEdges: 85\nNode types: {'pr_file': 25, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 25, 'comment_chain_touches_file': 24, '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': 12, 'api_or_backend': 11, '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, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'test_or_ci': 1, 'source_or_other': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-934d90b51b50b474", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 336852, "scanner": "foundry_dataset", "fingerprint": "43f1dba1a883313c44db9dada6e625b71641040cedc074bb8ac48d41cf343e3a", "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": 3, "test_ci_gap": 1, "api_or_backend": 29, "ui_or_frontend": 8, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": "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": 103, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 43, "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": 61, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 43, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#11", "issue_number": "11", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-0464f359b8096f00", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 15, "api_or_backend": 145, "ui_or_frontend": 40, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#11\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 11\nGraph consistency label: assumption_check\nNodes: 61\nEdges: 103\nNode types: {'pr_file': 43, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 43, 'comment_chain_touches_file': 24, '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: {'api_or_backend': 29, 'ui_or_frontend': 8, 'not_resolved_or_not_observed': 4, 'test_or_ci': 3, 'dependency_or_build': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-b309e657c658e93f", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 336851, "scanner": "foundry_dataset", "fingerprint": "2cbdf9478139ff3bfa888310af9529c2039ddb5cd76331171451164a4ae8b325", "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": 2, "test_ci_gap": 1, "api_or_backend": 3, "deployment_env_gap": 1, "dependency_or_build": 3, "partial blueprint fit": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": "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": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 8, "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": 8, "thread_has_comment_chain": 2, "comment_chain_touches_file": 16, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 26, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 8, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#10", "issue_number": "10", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-1a256b74a8ddd2d3", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 10, "api_or_backend": 15, "dependency_or_build": 15}}, "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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\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: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#10\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 10\nGraph consistency label: assumption_check\nNodes: 26\nEdges: 56\nNode types: {'pr_file': 8, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 16, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, '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: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 3, 'api_or_backend': 3, 'test_or_ci': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 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/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-e0c5f3f02db27107", "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": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 328443, "scanner": "foundry_dataset", "fingerprint": "196415b5d840bcd5ad6394d8ed71186191a339f248f365f8fcf622daffe64585", "category": "quality", "severity": "high", "confidence": 0.76, "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": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"api_or_backend": 3, "docs_or_claims": 4, "deployment_env_gap": 1, "partial blueprint fit": 1, "data_schema_persistence": 1, "mostly follows blueprint": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "blueprint_human_gap_alignment": 1, "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": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 52, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 7, "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": 7, "thread_has_comment_chain": 2, "comment_chain_touches_file": 14, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 7, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 2, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#6", "issue_number": "6", "quality_tiers": {"unresolved": 4, "assumption_check": 2}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-e8e83c1831632091", "graph_gold_label": "assumption_check", "changed_file_labels": {"api_or_backend": 15, "docs_or_claims": 20}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: assumption_check\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 6\nGraph consistency label: assumption_check\nNodes: 25\nEdges: 52\nNode types: {'pr_file': 7, 'link_quality': 6, 'comment': 2, 'comment_chain': 2, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 14, 'thread_touches_file': 7, 'issue_chain_touches_file': 7, '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: {'docs_or_claims': 4, 'not_resolved_or_not_observed': 4, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'blueprint_human_gap_alignment': 1, 'partial blueprint fit': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-a0989d32c9200b47", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316687, "scanner": "foundry_dataset", "fingerprint": "14f22e769344b6c339d00e1826c306a1c52c9f811d076e0cf10baf7ed29f71ab", "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": "Typenine/East-v-West-Website#9", "human_labels": ["build_install_failure", "deployment_env_gap", "docs_or_claims"], "issue_number": "9", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-2595fb53922cbed5", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#9\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: Typenine/East-v-West-Website#9\nRepo: Typenine/East-v-West-Website\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: 1\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-bb42471311ec61eb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/9\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/9\\nTitle: Add AGENTS.md with Cursor Cloud development instructions\\nBody:\\n<!-- CURSOR_AGENT_PR_BODY_BEGIN -->\\n## Summary\\n\\nAdds `AGENTS.md` with Cursor Cloud-specific development instructions for future cloud agents working on this codebase.\\n\\n### What's included\\n\\n- Overview of the tech stack (Next.js 15, React 19, PostgreSQL/Drizzle, Sleeper API)\\n- Instructions for starting PostgreSQL and the dev server\\n- Notes on the Neon serverless driver, database migrations, linting, and environment variables\\n- Clarifications about optional services (R2, Groq, Discord, Resend, Vercel KV)\\n\\n### Development environment verification\\n\\nThe following was verified during setup:\\n\\n- **Node.js 20** installed and working\\n- **npm install** completed successfully (565 packages)\\n- **PostgreSQL 16** running locally with `evw` database\\n- **Database migrations** applied (5 migration files)\\n- **Lint** passes with only pre-existing warnings\\n- **Dev server** (`npm run dev --turbopack`) runs on port 3000\\n- **API endpoints** work\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7e0e03540ff3e446\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/9#issuecomment-4363373204\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/9#issuecomment-4363373204\\nTitle: \\nBody:\\n[vc]: #atRKXxrrtYP+i+5sZhbEBXtgBoLasqZ/nrmm6Y7dDFw=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-934de0d14544963d", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316686, "scanner": "foundry_dataset", "fingerprint": "00246304e04f1435a64532530d65e61866e2aa8233ebb79c5910ecc08a5072a7", "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": "Typenine/East-v-West-Website#7", "human_labels": ["deployment_env_gap", "ui_workflow_gap"], "issue_number": "7", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-19b41f8416b4127a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#7\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: Typenine/East-v-West-Website#7\nRepo: Typenine/East-v-West-Website\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: 0\nLabels: {'ui_workflow_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-cb10a9e7b3ca7804\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/7\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Copilot (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/7\\nTitle: [WIP] Fix black screen issue on start meeting button\\nBody:\\nThanks for asking me to work on this. I will get started on it and keep this PR's description up to date as I form a plan and make progress.\\n\\n\\n<!-- START COPILOT ORIGINAL PROMPT -->\\n\\n\\n\\n<details>\\n\\n<summary>Original prompt</summary>\\n\\n> after our last change, the screen now goes black as soon as I hit the \\\"Start Meeting\\\" button. So I can't actually enter the meeting\\n\\n\\n</details>\\n\\n\\n\\n<!-- START COPILOT CODING AGENT TIPS -->\\n---\\n\\n\ud83d\udcac We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey).\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-1bdedc6071a7988d\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/7#issuecomment-3874054337\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/7#issuecomment-3874054337\\nTitle: \\nBody:\\n[vc]: #MOO6mGNDDVm/jNKuXsgwd+b4s//0M19JgD4hZnLIxfQ=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJlYXN0LXYtd2VzdC13ZWJzaXRlIiwicHJvamVjdElkIjoicHJqX0JsYmxJMjk4RUxOck9RVFFLTGlhN29MUFBNMXgiLCJyb290RGlyZWN0b3J5IjpudWxsLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vdHlwZW5pbmVzLXByb2plY3RzL2Vhc3Qtdi13ZXN0LXdlYnNpdGUvRnhBWE1vVHh2UUJqbWVubnN4dGJvTkI5amI5aiIsInByZXZpZXdVcmwiOiJlYXN0LXYtd2VzdC13ZWJzaXRlLWdpdC1jb3BpbG90LWZpeC1zLWZlNWYzNy10eXBlbmluZXMtcHJvamVjdHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiO\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-df48baa87bd243be", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316685, "scanner": "foundry_dataset", "fingerprint": "5bb13400707faa8a6aa363d34e682c71e8c806f3d514f8772b4705e68f0b8cea", "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": "Typenine/East-v-West-Website#6", "human_labels": ["api_or_backend", "data_schema_persistence", "deployment_env_gap", "docs_or_claims"], "issue_number": "6", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-fe4d0838d487a063", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 7, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 3, "docs_or_claims": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#6\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: Typenine/East-v-West-Website#6\nRepo: Typenine/East-v-West-Website\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: 7\nLabels: {'data_schema_persistence': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 4, 'api_or_backend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b244b2ccf1536263\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/6\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Copilot (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/6\\nTitle: Fix admin suggestion title persistence with proper error handling\\nBody:\\nAdmin suggestion titles were not persisting after page refresh due to silent failures in the save/load pipeline. The implementation was correct but lacked error visibility.\\n\\n## Changes\\n\\n### Database Layer (`src/server/db/queries.fixed.ts`)\\n- Enhanced `setSuggestionTitle()` return type from `boolean` to `{ success: boolean; rowCount?: number; error?: string }`\\n- Enables validation that updates actually affect rows (catches invalid suggestion IDs)\\n\\n**Before:**\\n```typescript\\nexport async function setSuggestionTitle(id: string, title: string | null) {\\n  try {\\n    await db.execute(sql`UPDATE suggestions SET title = ${title} WHERE id = ${id}::uuid`);\\n    return true;\\n  } catch {\\n    return false;\\n  }\\n}\\n```\\n\\n**After:**\\n```typescript\\nexport async function setSuggestionTitle(id: string, title: string | null): Promise<{ success: boolean; rowCount?: number; error?: string }> {\\n  try {\\n    const result = await db.execute(sq\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f0c17cf75dbf0441\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/6#issuecomment-3844352759\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/6#issuecomment-3844352759\\nTitle: \\nBody:\\n[vc]: #9DMexEa17/EolCsq7jVANZytcVp6OOuIoCm83S0WESo=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-c623615d6fa823da", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316684, "scanner": "foundry_dataset", "fingerprint": "6f4a084566bab2e341d37cb633fd7e437f5e033c89051ef9d333f474eaecebb7", "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": "Typenine/East-v-West-Website#5", "human_labels": ["api_integration_gap", "api_or_backend", "deployment_env_gap", "positive_human_signal"], "issue_number": "5", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-3f5ac5e644809283", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#5\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: Typenine/East-v-West-Website#5\nRepo: Typenine/East-v-West-Website\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1}\nPolarities: {'bad': 2, 'good': 1}\nChanged file labels: {'api_or_backend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5be84c56263b940c\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/5\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Copilot (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/5\\nTitle: Fix Discord webhook URL derivation and message formatting\\nBody:\\nDiscord webhooks for new suggestions and ballot-eligible notifications were often missing links due to relying solely on `process.env.SITE_URL`, which isn't set in preview deployments.\\n\\n## Changes\\n\\n**URL construction**\\n- Added `buildBaseUrl()` helper: prefers `SITE_URL`, falls back to `x-forwarded-proto` + `x-forwarded-host`/`host` headers\\n- Works across production and preview environments\\n- Logs warning and shows \\\"(link unavailable)\\\" when URL construction fails\\n\\n**New suggestion webhook** (`/api/suggestions`)\\n```typescript\\n// Before: often undefined, no synopsis\\ncontent: link ? `\ud83d\udccb **New Suggestion**: ${link}` : undefined\\n\\n// After: always present with structured info\\ncontent: `New suggestion: ${link}\\\\n**${title}**`\\ndescription: `**Category:** ${category}\\\\n**Proposed by:** ${team}\\\\n\\\\n${synopsis}...`\\n```\\n- Plain text link on first line (required format: `New suggestion: <URL>`)\\n- Includes title, category, proposer, synopsis \"\n  },\n  {\n    \"id\": \"github-feedback-comment-7b307846ba38931c\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/5#issuecomment-3844302791\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/5#issuecomment-3844302791\\nTitle: \\nBody:\\n[vc]: #gph4Hs6JSILlJreDC++RDKjDoOsDMsvhMOMpwxV9DC4=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0e\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-a05ea089ceb2d351", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316683, "scanner": "foundry_dataset", "fingerprint": "2cd6f5c4f5d293f10ba8704bddb5843a74ff7df24df12ec8e166194d90b1e707", "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": "Typenine/East-v-West-Website#4", "human_labels": ["api_or_backend", "deployment_env_gap", "docs_or_claims", "mock_placeholder", "positive_human_signal", "ui_or_frontend"], "issue_number": "4", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-084a0f10d0ef5fdf", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 17, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 3, "docs_or_claims": 11, "ui_or_frontend": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\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: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 17\nLabels: {'mock_placeholder': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1}\nPolarities: {'bad': 2, 'good': 1}\nChanged file labels: {'docs_or_claims': 11, 'ui_or_frontend': 3, 'api_or_backend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-76e8254aefb26327\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/4\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Copilot (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/4\\nTitle: Fix admin title save blocked by onChange/onBlur race condition\\nBody:\\nTitle edits in admin suggestions UI were silently failing due to onChange updating local state before onBlur comparison, causing early return without persisting to server.\\n\\n## Changes\\n\\n**Save logic fix**\\n- Store original title in `data-original-title` attribute on focus\\n- Compare against stored original on blur instead of current state\\n\\n**Visual feedback**\\n- Save status indicators: \\\"Saving...\\\" (blue), \\\"\u2713 Saved\\\" (green, 2s timeout), \\\"Failed to save\\\" (red)\\n- Updated placeholder: \\\"(auto-saves on blur)\\\"\\n- Error state reverts to original value\\n\\n## Before/After\\n\\n```typescript\\n// Before: Always matched after onChange\\nonBlur={async (e) => {\\n  const val = e.target.value.trim();\\n  const currentTitle = (s.title || '').trim(); // Already updated!\\n  if (val === currentTitle) return; // Never saves\\n}}\\n\\n// After: Compare with original\\nonFocus={(e) => {\\n  e.target.setAttribute('data-original-title', s.title || '');\\n}}\\nonBlur={async (e) =\"\n  },\n  {\n    \"id\": \"github-feedback-comment-b323e5b16a217087\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/4#issuecomment-3843812220\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/4#issuecomment-3843812220\\nTitle: \\nBody:\\n[vc]: #wJlitl+j2yc+XOkt7icKv5P5vq\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-d6d5b4ecebc6e88b", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316682, "scanner": "foundry_dataset", "fingerprint": "b5d61eff0ba4154dc7ca04001a184b225669b666a4071f57f0882bbfd58d7bc5", "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": "Typenine/East-v-West-Website#3", "human_labels": ["deployment_env_gap", "ui_or_frontend", "ui_workflow_gap"], "issue_number": "3", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-918704d03b3c6fbc", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#3\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: Typenine/East-v-West-Website#3\nRepo: Typenine/East-v-West-Website\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: 3\nLabels: {'ui_workflow_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e29cb5edf4b295e8\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/3\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/3\\nTitle: home page update\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-545d9b04df45ecb8\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/3#issuecomment-3708353174\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/3#issuecomment-3708353174\\nTitle: \\nBody:\\n[vc]: #8Iu+uyXLcP6aD66YU7kxkWSdnfMpAk8TMxrSBXvu37M=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJlYXN0LXYtd2VzdC13ZWJzaXRlIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vdHlwZW5pbmVzLXByb2plY3RzL2Vhc3Qtdi13ZXN0LXdlYnNpdGUvNkVrdWt4ZVZvS01jdzdSQXo1QnZORVZUV0Q1TCIsInByZXZpZXdVcmwiOiIiLCJuZXh0Q29tbWl0U3RhdHVzIjoiQ0FOQ0VMRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Review | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [east-v-west-website](https://vercel.com/typenines-projects/east-v-west-website) | ![Canceled](https://vercel.com/static/status/canceled.svg) [Canceled](https://vercel.com/typenines-projects/east-v-west-website/6EkukxeVoKMcw7RAz5BvNEVTWD5L) |  | Jan 4, 2026 7:21pm |\\n\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-5be13b0339a19cba\",\n    \"filename\": \"src/app/history/page.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"del\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-72995b9f6038c2b7", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316681, "scanner": "foundry_dataset", "fingerprint": "e44465184b644ae1eafa265cf84181421b384dcb4e1571121a25f9ee443e546f", "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": "Typenine/East-v-West-Website#2", "human_labels": ["api_or_backend", "deployment_env_gap", "source_or_other", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-737228c17d5e41c8", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 25, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "api_or_backend": 11, "ui_or_frontend": 12, "source_or_other": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website#2\nRepo: Typenine/East-v-West-Website\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: 25\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 1, 'ui_or_frontend': 12, 'api_or_backend': 11, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e244bf260f1dcd5c\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/2\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/2\\nTitle: Move hourly taxi cron off Vercel; add GitHub Actions scheduler + secr\u2026\\nBody:\\n\u2026et auth\"\n  },\n  {\n    \"id\": \"github-feedback-comment-9ae3d1b2ac878e3b\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/2#issuecomment-3706237967\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/2#issuecomment-3706237967\\nTitle: \\nBody:\\n[vc]: #q0YjwG27F4OKtdXBmAonBozSzD+CAuwfV5laMDh2/o0=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJlYXN0LXYtd2VzdC13ZWJzaXRlIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImVhc3Qtdi13ZXN0LXdlYnNpdGUtZ2l0LWZpeC10YXhpLWNyb24tdHlwZW5pbmVzLXByb2plY3RzLnZlcmNlbC5hcHAifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3R5cGVuaW5lcy1wcm9qZWN0cy9lYXN0LXYtd2VzdC13ZWJzaXRlLzQ4UzlpQmdzUUhSb3NlU3JGaEJVZHg5RXh3aFMiLCJwcmV2aWV3VXJsIjoiZWFzdC12LXdlc3Qtd2Vic2l0ZS1naXQtZml4LXRheGktY3Jvbi10eXBlbmluZXMtcHJvamVjdHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCIsInJvb3REaXJlY3RvcnkiOm51bGx9XX0=\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Review | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [east-v-west-website](https://vercel.com/typenines-projects/east-v-west-website) | ![Ready](https://vercel.com/st\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"gith\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-4afd6de5dfa8fd18", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316680, "scanner": "foundry_dataset", "fingerprint": "cb98bc0890c6f9bac2c0c86fc9ead3386ea9b792a0e9c77872a6876393f019cd", "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": "Typenine/East-v-West-Website#11", "human_labels": ["api_or_backend", "dependency_or_build", "deployment_env_gap", "test_ci_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "11", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-541adfeec2facdeb", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 43, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 3, "api_or_backend": 29, "ui_or_frontend": 8, "dependency_or_build": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#11\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: Typenine/East-v-West-Website#11\nRepo: Typenine/East-v-West-Website\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: 43\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 3, 'dependency_or_build': 3, 'ui_or_frontend': 8, 'api_or_backend': 29}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-dc35f7d20930574a\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/11\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/11\\nTitle: Fix taxi cron auth and add audit QoL improvements\\nBody:\\n<!-- CURSOR_AGENT_PR_BODY_BEGIN -->\\n### Summary\\n- Fix taxi cron auth to accept a dedicated `TAXI_CRON_SECRET` or shared `CRON_SECRET`, and send both supported auth headers from GitHub Actions.\\n- Keep hourly taxi cron calls useful by refreshing taxi movement observations on off-window runs without overwriting scheduled compliance snapshots.\\n- Add audit-driven QoL and hardening improvements while preserving simple `002023` admin access when no `EVW_ADMIN_SECRET` is configured.\\n- Harden scheduled endpoints and media presigning, fix malformed-session handling, reduce draft trade team spoofing, and clean up Draft/admin UI polish.\\n\\n### Walkthrough\\n[audit_qol_ui_walkthrough.mp4](https://cursor.com/agents/bc-4eee0777-7187-4a02-b758-19fc2e0fe09e/artifacts?path=%2Fopt%2Fcursor%2Fartifacts%2Faudit_qol_ui_walkthrough.mp4)\\n\\n### Testing\\n- `npx vitest run tests/taxi-rules.test.ts tests/taxi-cron-route.test.ts tests/auth-security.test.ts`\\n- `npx tsc --\"\n  },\n  {\n    \"id\": \"github-feedback-comment-9907e362786d3bcf\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/11#issuecomment-4363873358\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/11#issuecomment-4363873358\\nTitle: \\nBody:\\n[vc]: #+hjhS2CUYpjmFCP08VSiisVW2KQwF/E9lxp0/Wa1gsk=:eyJpc01vbm9yZXBvIjp0cnVlLC\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-b0561d5a26c63908", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316679, "scanner": "foundry_dataset", "fingerprint": "1bd510dd4b9f473137fa173a1044ce4f5f956e330053aeb0506f5e2ea7e5c598", "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": "Typenine/East-v-West-Website#10", "human_labels": ["api_or_backend", "dependency_or_build", "deployment_env_gap", "test_ci_gap", "test_or_ci"], "issue_number": "10", "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-67ffdb2e370dfb13", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 8, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "api_or_backend": 3, "dependency_or_build": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#10\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: Typenine/East-v-West-Website#10\nRepo: Typenine/East-v-West-Website\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: 8\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 2, 'dependency_or_build': 3, 'api_or_backend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ff0e9b67880110b6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/10\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: Typenine (User)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/10\\nTitle: Fix taxi cron auth and movement tracking\\nBody:\\n<!-- CURSOR_AGENT_PR_BODY_BEGIN -->\\n### Summary\\n- Fix taxi cron auth to accept a dedicated `TAXI_CRON_SECRET` or shared `CRON_SECRET`, and send both supported auth headers from GitHub Actions.\\n- Keep hourly taxi cron calls useful by refreshing taxi movement observations on off-window runs without overwriting scheduled compliance snapshots.\\n- Update taxi warning copy to match the rulebook's four-player limit.\\n- Add focused Vitest coverage for unauthorized cron requests and off-window movement tracking.\\n\\n### Testing\\n- `npx vitest run tests/taxi-rules.test.ts tests/taxi-cron-route.test.ts`\\n- `npx tsc --noEmit`\\n- `npm run build`\\n\\n### Notes\\nRecent GitHub Actions logs show the taxi cron failures are `HTTP 401 {\\\"ok\\\":false,\\\"error\\\":\\\"unauthorized\\\"}` before validation runs. After deployment, the GitHub secret selected by the workflow (`TAXI_CRON_SECRET` preferred, otherwise `CRON_SECRET`) must match the same environment variable configured on the deployed \"\n  },\n  {\n    \"id\": \"github-feedback-comment-96c09717719fb802\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/10#issuecomment-4363403685\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/10#issuecomment-4363403685\\nTitle: \\nBody:\\n[vc]: #iD4C/7xYBZHkCSZs/B29Uasu8vnq0LOrvpPHQJjRzCA=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aH\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-ee435f0ca6827c6d", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 316678, "scanner": "foundry_dataset", "fingerprint": "cd582a8f2d92c1fc48107cef3b03ce736e73399689ae8939228a7985f147e11a", "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": "Typenine/East-v-West-Website#1", "human_labels": ["dependency_or_build", "deployment_env_gap", "positive_human_signal", "security_auth_secret"], "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": "Typenine/East-v-West-Website", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-36714ea6cdee0568", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "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": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#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: Typenine/East-v-West-Website#1\nRepo: Typenine/East-v-West-Website\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1}\nPolarities: {'bad': 2, 'good': 1}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9ca9f3735579c7f1\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/1\\nTitle: Fix React Server Components CVE vulnerabilities\\nBody:\\n> [!IMPORTANT]\\n> This is an automatic PR generated by Vercel to help you with patching efforts. We can't guarantee it's comprehensive, and it may contain mistakes. Please review our [guidance](https://vercel.link/additional-checks) before merging these changes.\\n\\nA critical remote code execution (RCE) vulnerability in React Server Components, impacting frameworks such as Next.js, was identified in the project [east-v-west-website](https://vercel.com/typenines-projects/east-v-west-website). The vulnerability enables unauthenticated RCE on the server via insecure deserialization in the React Flight protocol.\\n\\nThis issue is tracked under:\\n\\n- GitHub Security Advisory: [GHSA-9qr9-h5gf-34mp](https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp)\\n- React Advisory: [CVE-2025-55182](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)\\n- Next.js Advisory: [CVE-2025-66478](https:/\"\n  },\n  {\n    \"id\": \"github-feedback-comment-c432e450481f5d71\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Typenine/East-v-West-Website/pull/1#issuecomment-3658232356\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: Typenine/East-v-West-Website\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/Typenine/East-v-West-Website/pull/1#issuecomment-3658232356\\nTitle: \\nBody:\\nDeployment failed with the following error:\\n~~~\\nHobby accounts are limited to daily cron\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "comment-chain-pattern-bad_chains-eda70bbda3aa78a5", "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": "Typenine/East-v-West-Website", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 332245, "scanner": "foundry_dataset", "fingerprint": "8fa71a879328b1eb7194dfe6d03fc0e18a36ca426253b578f284b584bb2c5933", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 2, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 17, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#1", "issue_number": "1", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-ce0facb6543a0866", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 12}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#1\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'pr_file': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-5fd5d3d5de6b6afa", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: Typenine/East-v-West-Website"}, "properties": {"repobilityId": 324969, "scanner": "foundry_dataset", "fingerprint": "3a2f1addb2d0fff45081e7a570568c124500125bf8f32d1e437a281e48f29aa6", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 3, "docs_or_claims": 11, "ui_or_frontend": 3, "mock_placeholder": 1, "deployment_env_gap": 1, "positive_human_signal": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "positive_feedback_no_linked_change": 1, "human_positive_or_acceptance_signal": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"not_resolved_or_not_observed": 8, "human_positive_or_acceptance_signal": 2}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 86, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 17, "thread_has_pr_review": 1, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 32, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "Typenine/East-v-West-Website#4", "issue_number": "4", "quality_tiers": {"unresolved": 5}, "repo_full_name": "Typenine/East-v-West-Website", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-9d2a212ee636eb3f", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 18, "docs_or_claims": 66, "ui_or_frontend": 18}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: Typenine/East-v-West-Website\nThread: Typenine/East-v-West-Website#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Typenine/East-v-West-Website#4\nRepo: Typenine/East-v-West-Website\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 32\nEdges: 86\nNode types: {'pr_file': 17, 'link_quality': 5, 'comment_chain': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'docs_or_claims': 11, 'not_resolved_or_not_observed': 4, 'ui_or_frontend': 3, 'api_or_backend': 3, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'positive_human_signal': 1, 'positive_feedback_no_linked_change': 1, 'human_positive_or_acceptance_signal': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'human_positive_or_acceptance_signal': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Typenine/East-v-West-Website", "source_id": "graph-query-motif_query-62f5fa5d2d6fc17b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Typenine/East-v-West-Website", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-4a3b8dffa18d774f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-media-to-r2.ts:25"}, "properties": {"repobilityId": "6a3955a3848ae408", "scanner": "scanner-primary", "fingerprint": "4a3b8dffa18d774f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d0229d293512c7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-blob-to-db.ts:23"}, "properties": {"repobilityId": "2cdadf1d36a0fd8d", "scanner": "scanner-primary", "fingerprint": "9d0229d293512c7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29ffca2ffb87e661", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-ktc.ts:52"}, "properties": {"repobilityId": "793a910f25ed0a2d", "scanner": "scanner-primary", "fingerprint": "29ffca2ffb87e661", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5bd31377733cf58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-taxi-cron.ts:28"}, "properties": {"repobilityId": "5c10c6be762c2081", "scanner": "scanner-primary", "fingerprint": "a5bd31377733cf58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0b928fdb1dc74f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ai-bot-project/src/index.js:247"}, "properties": {"repobilityId": "01a3b4ebc0578469", "scanner": "scanner-primary", "fingerprint": "e0b928fdb1dc74f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62e2550c3f732d1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionsFilters.tsx:158"}, "properties": {"repobilityId": "14104c0bb8e3a48d", "scanner": "scanner-primary", "fingerprint": "62e2550c3f732d1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ede4fa6a59be562", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/transactions/TransactionCard.tsx:44"}, "properties": {"repobilityId": "8b944cdeeb36b001", "scanner": "scanner-primary", "fingerprint": "1ede4fa6a59be562", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3e04ddededd16ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/navbar.tsx:772"}, "properties": {"repobilityId": "54d3ce9182227fbd", "scanner": "scanner-primary", "fingerprint": "c3e04ddededd16ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3022f2dd8482da89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/matchup-card.tsx:45"}, "properties": {"repobilityId": "7b680b4920331892", "scanner": "scanner-primary", "fingerprint": "3022f2dd8482da89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb0eb3d48c899874", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/suggestions/SuggestionItemCard.tsx:106"}, "properties": {"repobilityId": "12c3033be9a66426", "scanner": "scanner-primary", "fingerprint": "bb0eb3d48c899874", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76a01b27066db873", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:51"}, "properties": {"repobilityId": "c82a4853820ebcbe", "scanner": "scanner-primary", "fingerprint": "76a01b27066db873", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-726c946c71dd97a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:90"}, "properties": {"repobilityId": "8a0bf5e9cc79fec2", "scanner": "scanner-primary", "fingerprint": "726c946c71dd97a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb4dbe9e6218591a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/DraftOverlayLive.tsx:601"}, "properties": {"repobilityId": "d8b0ddd40a4d4da0", "scanner": "scanner-primary", "fingerprint": "bb4dbe9e6218591a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2184c15556f2b13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/draft-overlay/RoundRecapOverlay.tsx:200"}, "properties": {"repobilityId": "48db5b987632b4d5", "scanner": "scanner-primary", "fingerprint": "f2184c15556f2b13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51e6493a9f7049d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/teams/TeamBadge.tsx:54"}, "properties": {"repobilityId": "09ca84e6d91d3425", "scanner": "scanner-primary", "fingerprint": "51e6493a9f7049d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-744c12b3df71f75d", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:876"}, "properties": {"repobilityId": "6ad19fc184861248", "scanner": "scanner-primary", "fingerprint": "744c12b3df71f75d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-b98e8d9bf757ee8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/trade-tree/TradeTreeCanvas.tsx:259"}, "properties": {"repobilityId": "080debca79ef93c4", "scanner": "scanner-primary", "fingerprint": "b98e8d9bf757ee8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a44e6432b12c413", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/brackets/PlayoffBracketBoard.tsx:103"}, "properties": {"repobilityId": "5201a83e650c819b", "scanner": "scanner-primary", "fingerprint": "3a44e6432b12c413", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-afb8987caeef8fd4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/SeasonRecapGrid.tsx:88"}, "properties": {"repobilityId": "61dde0b1f0e4b9ed", "scanner": "scanner-primary", "fingerprint": "afb8987caeef8fd4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f187c278c82597ea", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/admin/votes/AdminPollResults.tsx:151"}, "properties": {"repobilityId": "9cc6ed5c86a818ea", "scanner": "scanner-primary", "fingerprint": "f187c278c82597ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d75f81e7f5af44f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/votes/AdminPollResults.tsx:40"}, "properties": {"repobilityId": "b82c9079bda7736d", "scanner": "scanner-primary", "fingerprint": "d75f81e7f5af44f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c55200229ff69f09", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/admin/votes/ui.tsx:24"}, "properties": {"repobilityId": "14075a11ab414477", "scanner": "scanner-primary", "fingerprint": "c55200229ff69f09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-17a711710c32d57d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/headtohead/NeverBeatenTracker.tsx:59"}, "properties": {"repobilityId": "4ab7a3f7390dbbea", "scanner": "scanner-primary", "fingerprint": "17a711710c32d57d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ab021e10fc88b5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/RosterColumn.tsx:624"}, "properties": {"repobilityId": "770ded9584951186", "scanner": "scanner-primary", "fingerprint": "5ab021e10fc88b5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c097bc39a055ac8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/matchups/PlayerDrawer.tsx:223"}, "properties": {"repobilityId": "7ab0a77ba44598a1", "scanner": "scanner-primary", "fingerprint": "c097bc39a055ac8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a373c6a76b2080cd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/trades/TradeCard.tsx:204"}, "properties": {"repobilityId": "028baf860783a15c", "scanner": "scanner-primary", "fingerprint": "a373c6a76b2080cd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6d5ae6cd33e6678", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:35"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "c6d5ae6cd33e6678", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-977259e919252992", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/rules/page.tsx:538"}, "properties": {"repobilityId": "22ab72eff5cfd452", "scanner": "scanner-primary", "fingerprint": "977259e919252992", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a37b116129a5a0a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/taxi/cron/route.ts:117"}, "properties": {"repobilityId": "dfe3e7dc548cdc6d", "scanner": "scanner-primary", "fingerprint": "a37b116129a5a0a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cce5fe3d8dfac7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/trade-notifier/route.ts:440"}, "properties": {"repobilityId": "8bad38dbdac10f91", "scanner": "scanner-primary", "fingerprint": "6cce5fe3d8dfac7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f633a72562820a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/route.ts:515"}, "properties": {"repobilityId": "2789605278f32f64", "scanner": "scanner-primary", "fingerprint": "8f633a72562820a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2f3943e0354e40f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/publish/route.ts:67"}, "properties": {"repobilityId": "1d5e10763e1affd9", "scanner": "scanner-primary", "fingerprint": "e2f3943e0354e40f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e347f26e901d3a28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-section/route.ts:103"}, "properties": {"repobilityId": "c2735e1bc6926798", "scanner": "scanner-primary", "fingerprint": "e347f26e901d3a28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f0a8417470a363b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/generate-step/route.ts:273"}, "properties": {"repobilityId": "d6e81d0d8f4329d8", "scanner": "scanner-primary", "fingerprint": "6f0a8417470a363b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bdb392835cab034f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/newsletter/edit/route.ts:168"}, "properties": {"repobilityId": "ed2c48402d7e09b9", "scanner": "scanner-primary", "fingerprint": "bdb392835cab034f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-614007a184044d90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/trade-analyzer/values/route.ts:136"}, "properties": {"repobilityId": "1e7a9f8da017bca2", "scanner": "scanner-primary", "fingerprint": "614007a184044d90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78f8ea45c13599cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/DraftContent.tsx:780"}, "properties": {"repobilityId": "9d7d968e66aef303", "scanner": "scanner-primary", "fingerprint": "78f8ea45c13599cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cddec05bf73703d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/draft/room/team/page.tsx:987"}, "properties": {"repobilityId": "ec72bc7413b76722", "scanner": "scanner-primary", "fingerprint": "cddec05bf73703d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a71410db3edaea2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/teams/[id]/TeamContent.tsx:1185"}, "properties": {"repobilityId": "b0742e7c0b2f6b17", "scanner": "scanner-primary", "fingerprint": "a71410db3edaea2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3f81f89bdb0a925", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/draft/page.tsx:419"}, "properties": {"repobilityId": "15882fbdf2858ce5", "scanner": "scanner-primary", "fingerprint": "c3f81f89bdb0a925", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f37f47b144553ae5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditorialCalendar.tsx:253"}, "properties": {"repobilityId": "b7b1bb3591c1249a", "scanner": "scanner-primary", "fingerprint": "f37f47b144553ae5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4700d4b8607a5c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/newsletter/EditModePanel.tsx:674"}, "properties": {"repobilityId": "419b759376f91062", "scanner": "scanner-primary", "fingerprint": "d4700d4b8607a5c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a203bea9825c6978", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/history/HistoryContent.tsx:723"}, "properties": {"repobilityId": "0ad08e3e6f25830d", "scanner": "scanner-primary", "fingerprint": "a203bea9825c6978", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2a7b0f0cc864dd94", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/trades/analyzer/page.tsx:216"}, "properties": {"repobilityId": "4886f94d7850c57a", "scanner": "scanner-primary", "fingerprint": "2a7b0f0cc864dd94", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb1cfdb94424dd11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/rivalries/page.tsx:204"}, "properties": {"repobilityId": "dc9442075fc7cb19", "scanner": "scanner-primary", "fingerprint": "fb1cfdb94424dd11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f18a62af148e2cf", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/newsletter/page.tsx:169"}, "properties": {"repobilityId": "cf5dbc3826def2bb", "scanner": "scanner-primary", "fingerprint": "4f18a62af148e2cf", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-44c83a33c89b4da1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/call-logger.ts:43"}, "properties": {"repobilityId": "77551fe39b1075f9", "scanner": "scanner-primary", "fingerprint": "44c83a33c89b4da1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d54ce5cdb89b551", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/mcp/widgets/team-card.ts:371"}, "properties": {"repobilityId": "7e949ac8d25f05d2", "scanner": "scanner-primary", "fingerprint": "3d54ce5cdb89b551", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4daab82b1a2ee43", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/utils/discord.ts:50"}, "properties": {"repobilityId": "1cbae635bff5a289", "scanner": "scanner-primary", "fingerprint": "d4daab82b1a2ee43", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8890be092e8d815d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-flusher.ts:237"}, "properties": {"repobilityId": "c30e33235fa701a2", "scanner": "scanner-primary", "fingerprint": "8890be092e8d815d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-db05a3bbe16b8ec4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-reporter.ts:46"}, "properties": {"repobilityId": "3f4e64912757b30f", "scanner": "scanner-primary", "fingerprint": "db05a3bbe16b8ec4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bdb1a0fc23a5dd2a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/server/trade-block-narrative.ts:704"}, "properties": {"repobilityId": "e8de4c9d4be161a0", "scanner": "scanner-primary", "fingerprint": "bdb1a0fc23a5dd2a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1520aff2dc91e0f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/draft-order-helper.ts:55"}, "properties": {"repobilityId": "db25ead16051a018", "scanner": "scanner-primary", "fingerprint": "1520aff2dc91e0f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42adbe0b83eacf56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/guest-voice.ts:261"}, "properties": {"repobilityId": "f11d099b247aa8b8", "scanner": "scanner-primary", "fingerprint": "42adbe0b83eacf56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5294f1c9bd14b850", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/publish-memory.ts:98"}, "properties": {"repobilityId": "3432ad34c92fbd1e", "scanner": "scanner-primary", "fingerprint": "5294f1c9bd14b850", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08f52852b09fb049", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/pick-ownership-context.ts:33"}, "properties": {"repobilityId": "a386910475e75d83", "scanner": "scanner-primary", "fingerprint": "08f52852b09fb049", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-caf0069015bcc1f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/generator.ts:204"}, "properties": {"repobilityId": "1a128c98def0bcc2", "scanner": "scanner-primary", "fingerprint": "caf0069015bcc1f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6124288ef7f17f0b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/newsletter/compose.ts:2141"}, "properties": {"repobilityId": "26407a0d26992118", "scanner": "scanner-primary", "fingerprint": "6124288ef7f17f0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0b83f1dde498b324", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose.ts:1247"}, "properties": {"repobilityId": "b66bad2c20f066ca", "scanner": "scanner-primary", "fingerprint": "0b83f1dde498b324", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7925db3d0ce11f98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/data-integration.ts:168"}, "properties": {"repobilityId": "9858062ca0726f00", "scanner": "scanner-primary", "fingerprint": "7925db3d0ce11f98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c090af2bccaa5225", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/compose-step.ts:891"}, "properties": {"repobilityId": "483a6b45581e98cf", "scanner": "scanner-primary", "fingerprint": "c090af2bccaa5225", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b6db8f85e5ee44e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/trade-section-compose.ts:76"}, "properties": {"repobilityId": "143d1e30144926f3", "scanner": "scanner-primary", "fingerprint": "2b6db8f85e5ee44e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a50a404535fc6b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cache.ts:58"}, "properties": {"repobilityId": "f20973ac47fa565e", "scanner": "scanner-primary", "fingerprint": "8a50a404535fc6b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a4fbe85c27404cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/cascade.ts:119"}, "properties": {"repobilityId": "a758f888670dc733", "scanner": "scanner-primary", "fingerprint": "4a4fbe85c27404cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eef074011e1a4cfa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/gemini.ts:48"}, "properties": {"repobilityId": "06a690499cb7bbee", "scanner": "scanner-primary", "fingerprint": "eef074011e1a4cfa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f05fea5afac2933", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/groq.ts:111"}, "properties": {"repobilityId": "2d4a4f9adaf7a33a", "scanner": "scanner-primary", "fingerprint": "9f05fea5afac2933", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-242d9a6f164ae2b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/anthropic-provider.ts:143"}, "properties": {"repobilityId": "d545a5f0612e87f4", "scanner": "scanner-primary", "fingerprint": "242d9a6f164ae2b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45831fe1b0ae7c13", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/groq-provider.ts:77"}, "properties": {"repobilityId": "c939a4eda12e2277", "scanner": "scanner-primary", "fingerprint": "45831fe1b0ae7c13", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae9317c918c30fac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini20-provider.ts:116"}, "properties": {"repobilityId": "f448be4f2b8e1ee8", "scanner": "scanner-primary", "fingerprint": "ae9317c918c30fac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b754a6db1355771e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/gemini-provider.ts:125"}, "properties": {"repobilityId": "a965f064ed287372", "scanner": "scanner-primary", "fingerprint": "b754a6db1355771e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a6752c8ba239cfa7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/newsletter/llm/providers/openrouter-provider.ts:78"}, "properties": {"repobilityId": "2caa65759166e974", "scanner": "scanner-primary", "fingerprint": "a6752c8ba239cfa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8881aaf289d21d97", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/rivalry/algorithm.ts:140"}, "properties": {"repobilityId": "e6ee928381218764", "scanner": "scanner-primary", "fingerprint": "8881aaf289d21d97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-00e5222c1a408efc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/storage/r2.ts:142"}, "properties": {"repobilityId": "3c38ed242c8cb0f1", "scanner": "scanner-primary", "fingerprint": "00e5222c1a408efc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-254221becbbce6f3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in newsletter-preview.html:63"}, "properties": {"repobilityId": "bc9fcfd8c661cb07", "scanner": "scanner-primary", "fingerprint": "254221becbbce6f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "newsletter-preview.html"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-9f15e555af3e0938", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/migrate-on-build.mjs:2"}, "properties": {"repobilityId": "7320b68e02b9c876", "scanner": "scanner-primary", "fingerprint": "9f15e555af3e0938", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/migrate-on-build.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-4ac31f9639cb748c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:35"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "4ac31f9639cb748c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-97460160232359d1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/standings/page.tsx:277"}, "properties": {"repobilityId": "1e793003153b1bdb", "scanner": "scanner-primary", "fingerprint": "97460160232359d1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/standings/page.tsx"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-eb5b4e7bd22b3276", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/rules/page.tsx:538"}, "properties": {"repobilityId": "e0afdf1450e03d31", "scanner": "scanner-primary", "fingerprint": "eb5b4e7bd22b3276", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/rules/page.tsx"}, "region": {"startLine": 538}}}]}, {"ruleId": "scanner-442fd27cb1995d13", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/draft/DraftContent.tsx:772"}, "properties": {"repobilityId": "c1e8b3fd21ba3fc9", "scanner": "scanner-primary", "fingerprint": "442fd27cb1995d13", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/draft/DraftContent.tsx"}, "region": {"startLine": 772}}}]}, {"ruleId": "scanner-c0b6537e128cf569", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/page.tsx:59"}, "properties": {"repobilityId": "ae0aa9278bbcb320", "scanner": "scanner-primary", "fingerprint": "c0b6537e128cf569", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/teams/page.tsx"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-3201f25c256724bc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/app/teams/[id]/TeamContent.tsx:958"}, "properties": {"repobilityId": "265061810d1cab4e", "scanner": "scanner-primary", "fingerprint": "3201f25c256724bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/teams/[id]/TeamContent.tsx"}, "region": {"startLine": 958}}}]}, {"ruleId": "scanner-b9b389da697ea59e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/app/admin/newsletter/page.tsx:970"}, "properties": {"repobilityId": "e4f387121a92837f", "scanner": "scanner-primary", "fingerprint": "b9b389da697ea59e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/admin/newsletter/page.tsx"}, "region": {"startLine": 970}}}]}, {"ruleId": "scanner-af93d04806d04efe", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/newsletter/page.tsx:169"}, "properties": {"repobilityId": "f4cf2d433f62f555", "scanner": "scanner-primary", "fingerprint": "af93d04806d04efe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/newsletter/page.tsx"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-bd9eec743a0cc4ef", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/mcp/widgets/team-card.ts:364"}, "properties": {"repobilityId": "507623497ac2f35e", "scanner": "scanner-primary", "fingerprint": "bd9eec743a0cc4ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/mcp/widgets/team-card.ts"}, "region": {"startLine": 364}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-51ef139eaed0385f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0f181ca560e88785", "scanner": "scanner-primary", "fingerprint": "51ef139eaed0385f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/newsletter-scheduler.yml"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-51ef139eaed0385f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7e265fcb64bae7fc", "scanner": "scanner-primary", "fingerprint": "51ef139eaed0385f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/newsletter-scheduler.yml"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-51ef139eaed0385f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "90c104da179dadb7", "scanner": "scanner-primary", "fingerprint": "51ef139eaed0385f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/newsletter-scheduler.yml"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-c329a1bf48669e93", "level": "note", "message": {"text": "Very large file: tests/mcp-tools.test.ts (1259 lines)"}, "properties": {"repobilityId": "94e07e13ea0b3b62", "scanner": "scanner-primary", "fingerprint": "c329a1bf48669e93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a77d782abbf53f1c", "level": "note", "message": {"text": "Very large file: src/components/draft/TeamProspectDraftboard.tsx (990 lines)"}, "properties": {"repobilityId": "01abaab573e7c9bd", "scanner": "scanner-primary", "fingerprint": "a77d782abbf53f1c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7329aa885e326ecd", "level": "note", "message": {"text": "Very large file: src/components/trade-tree/TradeTreeCanvas.tsx (1154 lines)"}, "properties": {"repobilityId": "7ffc06b04b7946cc", "scanner": "scanner-primary", "fingerprint": "7329aa885e326ecd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18bdaa50b28e052d", "level": "note", "message": {"text": "Very large file: src/app/api/newsletter/route.ts (2094 lines)"}, "properties": {"repobilityId": "8551f9dcdf9003d1", "scanner": "scanner-primary", "fingerprint": "18bdaa50b28e052d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5e50fd3a60d7898d", "level": "note", "message": {"text": "Very large file: src/app/draft/DraftContent.tsx (1267 lines)"}, "properties": {"repobilityId": "2e5397e077a3a2a6", "scanner": "scanner-primary", "fingerprint": "5e50fd3a60d7898d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3118abfb6903962a", "level": "note", "message": {"text": "Very large file: src/app/draft/room/team/page.tsx (1786 lines)"}, "properties": {"repobilityId": "6c0fa716b02f8504", "scanner": "scanner-primary", "fingerprint": "3118abfb6903962a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0beeb25919037247", "level": "note", "message": {"text": "Very large file: src/app/teams/[id]/TeamContent.tsx (2301 lines)"}, "properties": {"repobilityId": "c6d766a2bcbaf1a1", "scanner": "scanner-primary", "fingerprint": "0beeb25919037247", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0f946123e76a431", "level": "note", "message": {"text": "Very large file: src/app/admin/draft/page.tsx (2080 lines)"}, "properties": {"repobilityId": "689c81c45e707560", "scanner": "scanner-primary", "fingerprint": "c0f946123e76a431", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9701f5760da9875e", "level": "note", "message": {"text": "Very large file: src/app/admin/newsletter/EditModePanel.tsx (1083 lines)"}, "properties": {"repobilityId": "f44a73edb284ed82", "scanner": "scanner-primary", "fingerprint": "9701f5760da9875e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-98d15d324e9d18a8", "level": "note", "message": {"text": "Very large file: src/app/history/HistoryContent.tsx (2168 lines)"}, "properties": {"repobilityId": "6a3327a895c1599c", "scanner": "scanner-primary", "fingerprint": "98d15d324e9d18a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7547f656063394a", "level": "note", "message": {"text": "Very large file: src/app/trades/analyzer/page.tsx (1082 lines)"}, "properties": {"repobilityId": "2c031637042e693b", "scanner": "scanner-primary", "fingerprint": "e7547f656063394a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e6f32068c2199eb", "level": "note", "message": {"text": "Very large file: src/lib/mcp/handlers.ts (2587 lines)"}, "properties": {"repobilityId": "db36c2a14e5fc448", "scanner": "scanner-primary", "fingerprint": "1e6f32068c2199eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7dad40ad52ad34a", "level": "note", "message": {"text": "Very large file: src/lib/utils/sleeper-api.ts (2728 lines)"}, "properties": {"repobilityId": "cf8564a8dbdd761a", "scanner": "scanner-primary", "fingerprint": "d7dad40ad52ad34a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f988dcaec5c27d87", "level": "note", "message": {"text": "Very large file: src/lib/newsletter/template.ts (1567 lines)"}, "properties": {"repobilityId": "1388617d8e2ce769", "scanner": "scanner-primary", "fingerprint": "f988dcaec5c27d87", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2ef3ab319342fd53", "level": "note", "message": {"text": "Very large file: src/lib/newsletter/compose.ts (3709 lines)"}, "properties": {"repobilityId": "189e9a173d1579f1", "scanner": "scanner-primary", "fingerprint": "2ef3ab319342fd53", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b4c8fdacf52f0753", "level": "note", "message": {"text": "Very large file: src/lib/newsletter/data-integration.ts (1377 lines)"}, "properties": {"repobilityId": "1b7047031d963fd6", "scanner": "scanner-primary", "fingerprint": "b4c8fdacf52f0753", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2417179d78100b3", "level": "note", "message": {"text": "Very large file: src/lib/newsletter/compose-step.ts (2391 lines)"}, "properties": {"repobilityId": "ae271e124e8059eb", "scanner": "scanner-primary", "fingerprint": "e2417179d78100b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ff26f595cd81302e", "level": "note", "message": {"text": "Very large file: src/lib/newsletter/memory.ts (1690 lines)"}, "properties": {"repobilityId": "1c93a852578e2096", "scanner": "scanner-primary", "fingerprint": "ff26f595cd81302e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-684dbc73a401bcf5", "level": "note", "message": {"text": "Very large file: src/server/db/queries.fixed.ts (2829 lines)"}, "properties": {"repobilityId": "9d6be911db552c78", "scanner": "scanner-primary", "fingerprint": "684dbc73a401bcf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "aad614226925f425", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b722badde023e270", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: ai-bot-project/package.json"}, "properties": {"repobilityId": "6466d8ba37139d35", "scanner": "scanner-primary", "fingerprint": "b722badde023e270", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ai-bot-project/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c4fb8e9f9bfd1f52", "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": "647850e487d8321a", "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": "e625900fcdf36ba9", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4d4dbc653dde7a57", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "d23f307b2c42e498", "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": "25442651fa5701ed", "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": "238c78ffbb5929e6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-280e5deb091fcee6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/asset-routing.test.ts:5"}, "properties": {"repobilityId": "e3ba80f80b406f11", "scanner": "scanner-primary", "fingerprint": "280e5deb091fcee6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5386127873d84cc", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/rivalry-algorithm.test.ts:14"}, "properties": {"repobilityId": "84d155de155fbb53", "scanner": "scanner-primary", "fingerprint": "c5386127873d84cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15c9c1282be20b5e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-presign.mjs:10"}, "properties": {"repobilityId": "f154744ee04c4f59", "scanner": "scanner-primary", "fingerprint": "15c9c1282be20b5e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-934b8d75ea5b17b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/run-newsletter.mjs:102"}, "properties": {"repobilityId": "6fe6ca4e67699edc", "scanner": "scanner-primary", "fingerprint": "934b8d75ea5b17b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5d5aeef530ab961", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/migrate-on-build.mjs:10"}, "properties": {"repobilityId": "3a41c6931cb84f64", "scanner": "scanner-primary", "fingerprint": "e5d5aeef530ab961", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a9ff87f1bf09f32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftTradeCenter.tsx:523"}, "properties": {"repobilityId": "7c844f39d919980c", "scanner": "scanner-primary", "fingerprint": "4a9ff87f1bf09f32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-984c2e15cdc6e9c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/DraftInfoBarTicker.tsx:380"}, "properties": {"repobilityId": "dbb0b7374e3c412b", "scanner": "scanner-primary", "fingerprint": "984c2e15cdc6e9c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a251a1408e43e67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft-overlay/useDraftData.ts:316"}, "properties": {"repobilityId": "bea3ca45f6552927", "scanner": "scanner-primary", "fingerprint": "3a251a1408e43e67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b824c7d10b9ccb12", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/DraftTravelSubtab.tsx:205"}, "properties": {"repobilityId": "450cfdf1fa09d59a", "scanner": "scanner-primary", "fingerprint": "b824c7d10b9ccb12", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c97570b54d8546db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/draft/TeamProspectDraftboard.tsx:429"}, "properties": {"repobilityId": "67eff1687e9e9a19", "scanner": "scanner-primary", "fingerprint": "c97570b54d8546db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5f4b38ff63367aae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/AdminPollResults.tsx:57"}, "properties": {"repobilityId": "50058aa0270f28de", "scanner": "scanner-primary", "fingerprint": "5f4b38ff63367aae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d830b766e34503dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/votes/CreatePollWizard.tsx:61"}, "properties": {"repobilityId": "8e91cfd9d592b8dc", "scanner": "scanner-primary", "fingerprint": "d830b766e34503dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b8e1b550e1164ad6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/votes/FormQuestionFields.tsx:444"}, "properties": {"repobilityId": "7cc1c1e89c235708", "scanner": "scanner-primary", "fingerprint": "b8e1b550e1164ad6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54721b4021242da8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/trades/TradeBlockTab.tsx:243"}, "properties": {"repobilityId": "fb07e3576bb4373f", "scanner": "scanner-primary", "fingerprint": "54721b4021242da8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4009dc91817b6e81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/rules/ask/route.ts:107"}, "properties": {"repobilityId": "d584555a763ca817", "scanner": "scanner-primary", "fingerprint": "4009dc91817b6e81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c232df8c59738e72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/suggestions/recover-from-resend/route.ts:31"}, "properties": {"repobilityId": "a2cb59cfdb37a74f", "scanner": "scanner-primary", "fingerprint": "c232df8c59738e72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f98d47116de978b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cron/trade-notifier/route.ts:91"}, "properties": {"repobilityId": "4ff5cd4f05bad343", "scanner": "scanner-primary", "fingerprint": "9f98d47116de978b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2332acd4511f902", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/route.ts:1114"}, "properties": {"repobilityId": "161278c7067ad9b7", "scanner": "scanner-primary", "fingerprint": "a2332acd4511f902", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75b61e518df23130", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/newsletter/route.ts:74"}, "properties": {"repobilityId": "337069c658c4c505", "scanner": "scanner-primary", "fingerprint": "75b61e518df23130", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cb9fc848d3ca4c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/generate-section/route.ts:133"}, "properties": {"repobilityId": "c1cf2e8dc0a6f875", "scanner": "scanner-primary", "fingerprint": "3cb9fc848d3ca4c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64c7a4c280bab7a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/newsletter/generate-step/route.ts:310"}, "properties": {"repobilityId": "b414f00705bdc703", "scanner": "scanner-primary", "fingerprint": "64c7a4c280bab7a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4ed36a146d3e0c3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/newsletter/edit/route.ts:354"}, "properties": {"repobilityId": "c4a68dd991a22ab9", "scanner": "scanner-primary", "fingerprint": "c4ed36a146d3e0c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-781e02b14dfcbedc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/trade-analyzer/values/route.ts:325"}, "properties": {"repobilityId": "fa33ee6dffdc51af", "scanner": "scanner-primary", "fingerprint": "781e02b14dfcbedc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edf821325fa6c12d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/draft/room/team/page.tsx:355"}, "properties": {"repobilityId": "4e4d6ab7e3775944", "scanner": "scanner-primary", "fingerprint": "edf821325fa6c12d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f5b9e300ae22594d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/teams/[id]/TeamContent.tsx:814"}, "properties": {"repobilityId": "9d9d3e76bcb65a1c", "scanner": "scanner-primary", "fingerprint": "f5b9e300ae22594d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c13dea07f212d46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/users/page.tsx:89"}, "properties": {"repobilityId": "c1a4922c80f1471f", "scanner": "scanner-primary", "fingerprint": "6c13dea07f212d46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4c4a12a0ef00b28", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/taxi/page.tsx:97"}, "properties": {"repobilityId": "56cc77ad6cbd0be9", "scanner": "scanner-primary", "fingerprint": "c4c4a12a0ef00b28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83885c813bb873b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/draft/page.tsx:715"}, "properties": {"repobilityId": "4f8a7573d39c8198", "scanner": "scanner-primary", "fingerprint": "83885c813bb873b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e16df6e37b708f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/storage-test/page.tsx:45"}, "properties": {"repobilityId": "6e88690267727a7f", "scanner": "scanner-primary", "fingerprint": "9e16df6e37b708f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22a282fde20c55b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/trades/AdminTradesContent.tsx:450"}, "properties": {"repobilityId": "0afd158157c5a7b2", "scanner": "scanner-primary", "fingerprint": "22a282fde20c55b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d2ba0c417aedede", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/page.tsx:222"}, "properties": {"repobilityId": "ec8ccb525d9898c5", "scanner": "scanner-primary", "fingerprint": "2d2ba0c417aedede", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a3f8e5261c9c30f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/EditModePanel.tsx:509"}, "properties": {"repobilityId": "917f13969a4ea407", "scanner": "scanner-primary", "fingerprint": "4a3f8e5261c9c30f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-028a0e83c1d0cdcf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/newsletter/personality/page.tsx:85"}, "properties": {"repobilityId": "c8200a2e1e235b97", "scanner": "scanner-primary", "fingerprint": "028a0e83c1d0cdcf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d98b2fe8159eb7c2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/votes/[id]/page.tsx:540"}, "properties": {"repobilityId": "d1fa3cc09f240871", "scanner": "scanner-primary", "fingerprint": "d98b2fe8159eb7c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd8aa81eaf96c4d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/rivalries/page.tsx:913"}, "properties": {"repobilityId": "ea3a94e0405033f5", "scanner": "scanner-primary", "fingerprint": "dd8aa81eaf96c4d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5782b0327356aaa2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/trade-block/page.tsx:39"}, "properties": {"repobilityId": "367d853fbcb3f89d", "scanner": "scanner-primary", "fingerprint": "5782b0327356aaa2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-391c53c1ec006b10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/newsletter/page.tsx:48"}, "properties": {"repobilityId": "e201e33261a7c82a", "scanner": "scanner-primary", "fingerprint": "391c53c1ec006b10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-042475310b18ac2a", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/constants/league-roster-map.ts:8"}, "properties": {"repobilityId": "50ea286f552baa7f", "scanner": "scanner-primary", "fingerprint": "042475310b18ac2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42f6b425946bf0b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/trades.ts:134"}, "properties": {"repobilityId": "6d94af3d61317e83", "scanner": "scanner-primary", "fingerprint": "42f6b425946bf0b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-012291fae727108a", "level": "note", "message": {"text": "Legacy-named symbol `primary_backup` in src/lib/utils/player-availability.ts:27"}, "properties": {"repobilityId": "04fe52c6948d6079", "scanner": "scanner-primary", "fingerprint": "012291fae727108a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b9181f19597e751", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/utils/espn-depth.ts:15"}, "properties": {"repobilityId": "12a827daaefb5c14", "scanner": "scanner-primary", "fingerprint": "9b9181f19597e751", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-413a6387b7950f89", "level": "note", "message": {"text": "Legacy-named symbol `primary_backup` in src/lib/utils/sleeper-api.ts:1567"}, "properties": {"repobilityId": "9597443ba6c22889", "scanner": "scanner-primary", "fingerprint": "413a6387b7950f89", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-444da97eca03e02a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/utils/sleeper-api.ts:835"}, "properties": {"repobilityId": "2e88269976405606", "scanner": "scanner-primary", "fingerprint": "444da97eca03e02a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05f9535d86b7fb8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/draft/fetch-draft-travel-sheet.ts:104"}, "properties": {"repobilityId": "257bc32fb82b3032", "scanner": "scanner-primary", "fingerprint": "05f9535d86b7fb8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-205b564e74b0ca29", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/server/taxi-validator.ts:293"}, "properties": {"repobilityId": "54bbee100aed433a", "scanner": "scanner-primary", "fingerprint": "205b564e74b0ca29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49147a71ed1e7212", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/trades/asset-routing.ts:53"}, "properties": {"repobilityId": "377c889c85864328", "scanner": "scanner-primary", "fingerprint": "49147a71ed1e7212", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dffc5c17ca7407e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/newsletter/guardrails.ts:92"}, "properties": {"repobilityId": "7cefd37077809237", "scanner": "scanner-primary", "fingerprint": "2dffc5c17ca7407e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4435f7fa1c30cd62", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/newsletter/guest-voice.ts:238"}, "properties": {"repobilityId": "514cd500ca3a5f9d", "scanner": "scanner-primary", "fingerprint": "4435f7fa1c30cd62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed0f1486565cdd41", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/newsletter/data-integration.ts:1085"}, "properties": {"repobilityId": "02b0e8ac3034de32", "scanner": "scanner-primary", "fingerprint": "ed0f1486565cdd41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-515c3dcb2f6a4777", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/newsletter/trade-facts.ts:173"}, "properties": {"repobilityId": "55f2545d8a4ba170", "scanner": "scanner-primary", "fingerprint": "515c3dcb2f6a4777", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f9692d12dcb66f2", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/newsletter/llm/cascade.ts:68"}, "properties": {"repobilityId": "1c75c408d8b127f4", "scanner": "scanner-primary", "fingerprint": "9f9692d12dcb66f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6299c026b171425b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/newsletter/llm/groq.ts:717"}, "properties": {"repobilityId": "b00e2d21e312c04f", "scanner": "scanner-primary", "fingerprint": "6299c026b171425b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24d0d2cfc8167d9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trade-tree.ts:96"}, "properties": {"repobilityId": "e180c3cecec25ce0", "scanner": "scanner-primary", "fingerprint": "24d0d2cfc8167d9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d93cdd132f357cbd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/trade-feed.ts:95"}, "properties": {"repobilityId": "99bafd7f36f14e0d", "scanner": "scanner-primary", "fingerprint": "d93cdd132f357cbd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-293f9149d32a07c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/db/queries.fixed.ts:1607"}, "properties": {"repobilityId": "89d341853d5bbee7", "scanner": "scanner-primary", "fingerprint": "293f9149d32a07c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a41e2dbc307c1204", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin-login (src/components/layout/navbar.tsx:388)"}, "properties": {"repobilityId": "4f21f37151c33643", "scanner": "scanner-primary", "fingerprint": "a41e2dbc307c1204", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd77123b9f561164", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/components/layout/navbar.tsx:409)"}, "properties": {"repobilityId": "a64d0953230dd474", "scanner": "scanner-primary", "fingerprint": "cd77123b9f561164", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-632dae212923b2f4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/components/layout/navbar.tsx:428)"}, "properties": {"repobilityId": "4dfe11a36056c0b5", "scanner": "scanner-primary", "fingerprint": "632dae212923b2f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d172b7736b34d8b", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (src/components/layout/navbar.tsx:488)"}, "properties": {"repobilityId": "e26285855e0d75d1", "scanner": "scanner-primary", "fingerprint": "1d172b7736b34d8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fec0950747cb9f05", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin-login (src/components/layout/navbar.tsx:495)"}, "properties": {"repobilityId": "919c04ac9a097837", "scanner": "scanner-primary", "fingerprint": "fec0950747cb9f05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfb15f4d9afd6ee0", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/change-pin (src/components/layout/navbar.tsx:916)"}, "properties": {"repobilityId": "1789d674e4e198e3", "scanner": "scanner-primary", "fingerprint": "cfb15f4d9afd6ee0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5049ede847b63e6", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/login (src/components/auth/SignInForm.tsx:67)"}, "properties": {"repobilityId": "0b0e581e880546bd", "scanner": "scanner-primary", "fingerprint": "c5049ede847b63e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83249dfd73e009cc", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin-login (src/components/auth/SignInForm.tsx:112)"}, "properties": {"repobilityId": "79fd9f872f43a218", "scanner": "scanner-primary", "fingerprint": "83249dfd73e009cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d94318c05352e5a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/flags (src/components/taxi/TaxiBanner.tsx:22)"}, "properties": {"repobilityId": "3e4cfb4d83a055ee", "scanner": "scanner-primary", "fingerprint": "d94318c05352e5a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a05360edb00fb8b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draftId} (src/components/draft-overlay/DraftTradeCenter.tsx:395)"}, "properties": {"repobilityId": "5525e687b283eac8", "scanner": "scanner-primary", "fingerprint": "a05360edb00fb8b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2e88f19b2c4d091", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(team)}&draftId=${draftId} (src/components/draft-overlay/DraftTradeCenter.tsx:422)"}, "properties": {"repobilityId": "8510c1300d95af84", "scanner": "scanner-primary", "fingerprint": "a2e88f19b2c4d091", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8ec277cebdba471", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:506)"}, "properties": {"repobilityId": "6dfd719783010087", "scanner": "scanner-primary", "fingerprint": "f8ec277cebdba471", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df185f8fc64e3b38", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftTradeCenter.tsx:523)"}, "properties": {"repobilityId": "7c4e93945cf5f964", "scanner": "scanner-primary", "fingerprint": "df185f8fc64e3b38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-423c375fd034b939", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft-overlay/DraftInfoBarTicker.tsx:305)"}, "properties": {"repobilityId": "5f3f851566fd309c", "scanner": "scanner-primary", "fingerprint": "423c375fd034b939", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8cd10ae154df433", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order?season=${year} (src/components/draft-overlay/DraftInfoBarTicker.tsx:318)"}, "properties": {"repobilityId": "b227d160e1678ca9", "scanner": "scanner-primary", "fingerprint": "a8cd10ae154df433", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eed31a1019222fac", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(onClockTeam)}${draftParam} (src/components/draft-overlay/DraftInfoBarTicker.tsx:380)"}, "properties": {"repobilityId": "b73935eb0c4f7161", "scanner": "scanner-primary", "fingerprint": "eed31a1019222fac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d869bed29d20aabf", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/team-season-stats?team=${enc} (src/components/draft-overlay/DraftInfoBarTicker.tsx:419)"}, "properties": {"repobilityId": "776e096c18a10b58", "scanner": "scanner-primary", "fingerprint": "d869bed29d20aabf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33efd08b6e6e35b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/team-history?team=${enc}&_=${Date.now()} (src/components/draft-overlay/DraftInfoBarTicker.tsx:423)"}, "properties": {"repobilityId": "ba1284a0f10474ad", "scanner": "scanner-primary", "fingerprint": "33efd08b6e6e35b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4456eb79ef5cb4aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/components/draft-overlay/DraftOverlayLive.tsx:95)"}, "properties": {"repobilityId": "99f6fd43bcf790ec", "scanner": "scanner-primary", "fingerprint": "4456eb79ef5cb4aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39c75327c6f7b221", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:161)"}, "properties": {"repobilityId": "69742ebb99f7bf9b", "scanner": "scanner-primary", "fingerprint": "39c75327c6f7b221", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8ff94c419c8dd03", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:223)"}, "properties": {"repobilityId": "9bffc6dd34aedde3", "scanner": "scanner-primary", "fingerprint": "c8ff94c419c8dd03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0d08bf3f37cbc1b", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-videos (src/components/draft-overlay/DraftOverlayLive.tsx:309)"}, "properties": {"repobilityId": "7726f88490ce50dd", "scanner": "scanner-primary", "fingerprint": "a0d08bf3f37cbc1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19162e8209fc3017", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(playerId)} (src/components/draft-overlay/DraftOverlayLive.tsx:356)"}, "properties": {"repobilityId": "2b1899586737fcf5", "scanner": "scanner-primary", "fingerprint": "19162e8209fc3017", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-458bea4b8243bf2f", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:492)"}, "properties": {"repobilityId": "900e47acbcc9feb9", "scanner": "scanner-primary", "fingerprint": "458bea4b8243bf2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a1fd07a7ef9b500", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/DraftOverlayLive.tsx:885)"}, "properties": {"repobilityId": "26ec5531104b32ef", "scanner": "scanner-primary", "fingerprint": "5a1fd07a7ef9b500", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e4f402a82c30776", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/trade (src/components/draft-overlay/DraftOverlayLive.tsx:892)"}, "properties": {"repobilityId": "12a1dc8eed7068e1", "scanner": "scanner-primary", "fingerprint": "6e4f402a82c30776", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2baacefde0c21071", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=list_approved&draftId=${encodeURIComponent(draftId)} (src/components/draft-overlay/RoundRecapOverlay.tsx:79)"}, "properties": {"repobilityId": "aadbe14fb3d21ff6", "scanner": "scanner-primary", "fingerprint": "2baacefde0c21071", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f115d171fd752f5f", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft?include=available (src/components/draft-overlay/useDraftData.ts:249)"}, "properties": {"repobilityId": "de2ac2edd8a57122", "scanner": "scanner-primary", "fingerprint": "f115d171fd752f5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3cce1868b32cea3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft?mode=live (src/components/draft-overlay/useDraftData.ts:269)"}, "properties": {"repobilityId": "91a589db777cd51c", "scanner": "scanner-primary", "fingerprint": "3cce1868b32cea3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7e15164186da806", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/components/draft-overlay/useDraftData.ts:316)"}, "properties": {"repobilityId": "7a04208061b0ca40", "scanner": "scanner-primary", "fingerprint": "a7e15164186da806", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3f339411f2d2b4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:174)"}, "properties": {"repobilityId": "88645a58463445b5", "scanner": "scanner-primary", "fingerprint": "e3f339411f2d2b4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8d81379b09a460e", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/travel (src/components/draft/DraftTravelSubtab.tsx:205)"}, "properties": {"repobilityId": "b516986911a0a6e2", "scanner": "scanner-primary", "fingerprint": "d8d81379b09a460e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-213b130f99bba1f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/travel?trip=${encodeURIComponent(trip)} (src/components/draft/DraftTravelSubtab.tsx:337)"}, "properties": {"repobilityId": "33b6dd73582aa99c", "scanner": "scanner-primary", "fingerprint": "213b130f99bba1f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fad6671ea1bbb6d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/components/draft/TeamProspectDraftboard.tsx:416)"}, "properties": {"repobilityId": "00feeb96553842d6", "scanner": "scanner-primary", "fingerprint": "fad6671ea1bbb6d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a47c70075b82219", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:487)"}, "properties": {"repobilityId": "9b7ab367e2ca511d", "scanner": "scanner-primary", "fingerprint": "6a47c70075b82219", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d8c8fe0b0f434d7", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/draft/TeamProspectDraftboard.tsx:729)"}, "properties": {"repobilityId": "834329a519bb808c", "scanner": "scanner-primary", "fingerprint": "2d8c8fe0b0f434d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d974312abd57b3b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/file?key=${encodeURIComponent(key)} (src/components/admin/votes/AdminPollResults.tsx:57)"}, "properties": {"repobilityId": "21421952f783d7b9", "scanner": "scanner-primary", "fingerprint": "d974312abd57b3b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-118056d0b3a52c8b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/results (src/components/admin/votes/AdminPollResults.tsx:125)"}, "properties": {"repobilityId": "b9c144d5e7083b66", "scanner": "scanner-primary", "fingerprint": "118056d0b3a52c8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84447aa71e6ea096", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/votes (src/components/admin/votes/AdminVotesDashboard.tsx:60)"}, "properties": {"repobilityId": "bd71942cbe8bb581", "scanner": "scanner-primary", "fingerprint": "84447aa71e6ea096", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2da28485558d682", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions (src/components/admin/votes/AdminVotesDashboard.tsx:81)"}, "properties": {"repobilityId": "8c3eaaaf863abd1b", "scanner": "scanner-primary", "fingerprint": "b2da28485558d682", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad240328e8d287fe", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:104)"}, "properties": {"repobilityId": "f2372c9e509cfdf8", "scanner": "scanner-primary", "fingerprint": "ad240328e8d287fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d0c3f360bea8677", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/votes/${pollId} (src/components/admin/votes/AdminVotesDashboard.tsx:128)"}, "properties": {"repobilityId": "4e70532bc7731c4c", "scanner": "scanner-primary", "fingerprint": "1d0c3f360bea8677", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ac031fc6a4b3f5e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/votes/${pollId}/form (src/components/admin/votes/AdminVotesDashboard.tsx:146)"}, "properties": {"repobilityId": "d77508918ae73ae7", "scanner": "scanner-primary", "fingerprint": "4ac031fc6a4b3f5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8571b56c20efdfef", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/votes/${pollId} (src/components/admin/votes/CreatePollWizard.tsx:61)"}, "properties": {"repobilityId": "21216b6094898ffe", "scanner": "scanner-primary", "fingerprint": "8571b56c20efdfef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d32a224063d592e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/votes/${pollId}/form (src/components/admin/votes/CreatePollWizard.tsx:533)"}, "properties": {"repobilityId": "6dbdbfe1b88e8d7a", "scanner": "scanner-primary", "fingerprint": "6d32a224063d592e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ca3866ffbf1edd6", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes (src/components/admin/votes/CreatePollWizard.tsx:555)"}, "properties": {"repobilityId": "9984389eaa934ba8", "scanner": "scanner-primary", "fingerprint": "2ca3866ffbf1edd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d3f5a920d65f034", "level": "error", "message": {"text": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/RosterColumn.tsx:327)"}, "properties": {"repobilityId": "d9d8d327ab1690f2", "scanner": "scanner-primary", "fingerprint": "8d3f5a920d65f034", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1479123f423b4392", "level": "error", "message": {"text": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/RosterColumn.tsx:348)"}, "properties": {"repobilityId": "17d65980721b0cb0", "scanner": "scanner-primary", "fingerprint": "1479123f423b4392", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef40970d6dacaeba", "level": "error", "message": {"text": "Dangling fetch: GET /api/matchup-points?week=${week} (src/components/matchups/RosterColumn.tsx:372)"}, "properties": {"repobilityId": "4c73f9afb17794ac", "scanner": "scanner-primary", "fingerprint": "ef40970d6dacaeba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2081188697a96cbd", "level": "error", "message": {"text": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups/RosterColumn.tsx:415)"}, "properties": {"repobilityId": "56d9e496e1ab5734", "scanner": "scanner-primary", "fingerprint": "2081188697a96cbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ed4bf1a157d2ebc", "level": "error", "message": {"text": "Dangling fetch: GET /api/player-info?id=${pid} (src/components/matchups/PlayerDrawer.tsx:178)"}, "properties": {"repobilityId": "0f12992d7390bf00", "scanner": "scanner-primary", "fingerprint": "9ed4bf1a157d2ebc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67df1c626df1b006", "level": "error", "message": {"text": "Dangling fetch: GET /api/player-logs?playerId=${pid}&season=${encodeURIComponent(logSeason)} (src/components/matchups/PlayerDrawer.tsx:195)"}, "properties": {"repobilityId": "5f3e672207d744e6", "scanner": "scanner-primary", "fingerprint": "67df1c626df1b006", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d152dd5166dba34f", "level": "error", "message": {"text": "Dangling fetch: GET /api/nfl-scoreboard?week=${week}&season=${encodeURIComponent(season)} (src/components/matchups/WinProbability.tsx:109)"}, "properties": {"repobilityId": "11d61d249b176c3c", "scanner": "scanner-primary", "fingerprint": "d152dd5166dba34f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c7855348bd533de8", "level": "error", "message": {"text": "Dangling fetch: GET /api/wp-model (src/components/matchups/WinProbability.tsx:133)"}, "properties": {"repobilityId": "e0487c6d02fc93e1", "scanner": "scanner-primary", "fingerprint": "c7855348bd533de8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bef7723f431e9fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/defense-strength?season=${encodeURIComponent(season)}&uptoWeek=${upto} (src/components/matchups/WinProbability.tsx:171)"}, "properties": {"repobilityId": "1675482bb23c82bc", "scanner": "scanner-primary", "fingerprint": "3bef7723f431e9fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02e4e5ca6a67e8e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/nfl-week-stats?season=${encodeURIComponent(season)}&week=${week} (src/components/matchups/WinProbability.tsx:188)"}, "properties": {"repobilityId": "cc45a4c77eb22081", "scanner": "scanner-primary", "fingerprint": "02e4e5ca6a67e8e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dca37f4e2c94099f", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes/${pollId}/upload (src/components/votes/FormQuestionFields.tsx:436)"}, "properties": {"repobilityId": "f10f9db23b19c3e7", "scanner": "scanner-primary", "fingerprint": "dca37f4e2c94099f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe02670a382b9a07", "level": "error", "message": {"text": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:80)"}, "properties": {"repobilityId": "596bb5068d630a88", "scanner": "scanner-primary", "fingerprint": "fe02670a382b9a07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa32ad5e977e3ed7", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/components/trades/TradeBlockTab.tsx:81)"}, "properties": {"repobilityId": "657f2db064b32843", "scanner": "scanner-primary", "fingerprint": "aa32ad5e977e3ed7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3a1439cff650e2d", "level": "error", "message": {"text": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:107)"}, "properties": {"repobilityId": "a338fdbc433fa72a", "scanner": "scanner-primary", "fingerprint": "e3a1439cff650e2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f87714ced160d9a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/assets (src/components/trades/TradeBlockTab.tsx:119)"}, "properties": {"repobilityId": "fe9231825b5d628b", "scanner": "scanner-primary", "fingerprint": "f87714ced160d9a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aece2022f8145ce", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:120)"}, "properties": {"repobilityId": "5cc91476465fe890", "scanner": "scanner-primary", "fingerprint": "7aece2022f8145ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22cd2ed651c990f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/players/names?ids=${qs} (src/components/trades/TradeBlockTab.tsx:134)"}, "properties": {"repobilityId": "a7201ed20c62cae8", "scanner": "scanner-primary", "fingerprint": "22cd2ed651c990f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8daf7a6faf33b5d", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/components/trades/TradeBlockTab.tsx:142)"}, "properties": {"repobilityId": "2bc6557a8491cc7f", "scanner": "scanner-primary", "fingerprint": "f8daf7a6faf33b5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d3c2063466b404e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/trade-block (src/components/trades/TradeBlockTab.tsx:226)"}, "properties": {"repobilityId": "d56f2788a722ebb8", "scanner": "scanner-primary", "fingerprint": "8d3c2063466b404e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb1c3dae2682ccc3", "level": "error", "message": {"text": "Dangling fetch: GET /api/teams/trade-blocks (src/components/trades/TradeBlockTab.tsx:243)"}, "properties": {"repobilityId": "9ecacd8fb97c5f28", "scanner": "scanner-primary", "fingerprint": "fb1c3dae2682ccc3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c7be7146b0e8b74", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/flags (src/app/page.tsx:439)"}, "properties": {"repobilityId": "c21b214a19b473e3", "scanner": "scanner-primary", "fingerprint": "8c7be7146b0e8b74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e29130db4a535d60", "level": "error", "message": {"text": "Dangling fetch: GET /api/rules/ask (src/app/rules/page.tsx:183)"}, "properties": {"repobilityId": "77f67b5e639bf90f", "scanner": "scanner-primary", "fingerprint": "e29130db4a535d60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a163fa1fca1db29", "level": "error", "message": {"text": "Dangling fetch: POST /api/rules/ask (src/app/rules/page.tsx:201)"}, "properties": {"repobilityId": "cadd093e3468fb59", "scanner": "scanner-primary", "fingerprint": "4a163fa1fca1db29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09e315bdcc18377a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.groq.com/openai/v1/chat/completions (src/app/api/rules/ask/route.ts:107)"}, "properties": {"repobilityId": "bffbab112b5973c0", "scanner": "scanner-primary", "fingerprint": "09e315bdcc18377a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3df7712735d6616a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cerebras.ai/v1/chat/completions (src/app/api/rules/ask/route.ts:130)"}, "properties": {"repobilityId": "fd3f4fd0f1607188", "scanner": "scanner-primary", "fingerprint": "3df7712735d6616a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d197affdd0bc49eb", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/league/overview/route.ts:217)"}, "properties": {"repobilityId": "6ba4d1fe8dfb00d8", "scanner": "scanner-primary", "fingerprint": "d197affdd0bc49eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6bfa786962b4bee", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${currentLeagueId}/traded_picks (src/app/api/mcp/drafts/route.ts:119)"}, "properties": {"repobilityId": "c91f3b1872b73d69", "scanner": "scanner-primary", "fingerprint": "c6bfa786962b4bee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-459534d2663dd66a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/admin/refresh-dynasty-rankings/route.ts:48)"}, "properties": {"repobilityId": "892bc41e34151ddb", "scanner": "scanner-primary", "fingerprint": "459534d2663dd66a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3383235f7586fb2f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/app/api/newsletter/route.ts:1127)"}, "properties": {"repobilityId": "b861cd1f99fdda06", "scanner": "scanner-primary", "fingerprint": "3383235f7586fb2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5dd526f11bb17c49", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/app/api/export/drafts/route.ts:144)"}, "properties": {"repobilityId": "992056453d4da4c0", "scanner": "scanner-primary", "fingerprint": "5dd526f11bb17c49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-256e085651d526c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions (src/app/suggestions/page.tsx:126)"}, "properties": {"repobilityId": "b98504b9e795728f", "scanner": "scanner-primary", "fingerprint": "256e085651d526c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-729cb60e524adf1b", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:140)"}, "properties": {"repobilityId": "7d503cc39b3998ff", "scanner": "scanner-primary", "fingerprint": "729cb60e524adf1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-203ef381d577c709", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/suggestions/page.tsx:144)"}, "properties": {"repobilityId": "da82f578a5388359", "scanner": "scanner-primary", "fingerprint": "203ef381d577c709", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-964a5583567b3c80", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/suggestions/page.tsx:148)"}, "properties": {"repobilityId": "8d4df254dad51021", "scanner": "scanner-primary", "fingerprint": "964a5583567b3c80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47eddf654bf62e36", "level": "error", "message": {"text": "Dangling fetch: GET /api/me/suggestions/votes (src/app/suggestions/page.tsx:152)"}, "properties": {"repobilityId": "f51abb17d413e212", "scanner": "scanner-primary", "fingerprint": "47eddf654bf62e36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3570c92ef8b9c3b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/suggestions/page.tsx:160)"}, "properties": {"repobilityId": "5b0dfad397826f3f", "scanner": "scanner-primary", "fingerprint": "a3570c92ef8b9c3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d891bd135c9a40fb", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/suggestions/vote (src/app/suggestions/page.tsx:185)"}, "properties": {"repobilityId": "f6f9350481ef3434", "scanner": "scanner-primary", "fingerprint": "d891bd135c9a40fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a0859e38e4d8fa1", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions/tallies (src/app/suggestions/page.tsx:192)"}, "properties": {"repobilityId": "1acb7938345c1ce8", "scanner": "scanner-primary", "fingerprint": "3a0859e38e4d8fa1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05311d7c467fa684", "level": "error", "message": {"text": "Dangling fetch: POST /api/suggestions (src/app/suggestions/page.tsx:263)"}, "properties": {"repobilityId": "1d0cbb278bc36cc8", "scanner": "scanner-primary", "fingerprint": "05311d7c467fa684", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c690a1f23cc51a1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/page.tsx:287)"}, "properties": {"repobilityId": "3caa42aba88f2497", "scanner": "scanner-primary", "fingerprint": "2c690a1f23cc51a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6d88dfc938a213b", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions (src/app/suggestions/[id]/page.tsx:67)"}, "properties": {"repobilityId": "81674cdbcd72b640", "scanner": "scanner-primary", "fingerprint": "e6d88dfc938a213b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfcf3aa6fc2a11ec", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/suggestions/[id]/page.tsx:86)"}, "properties": {"repobilityId": "b15bbf58a909d4ac", "scanner": "scanner-primary", "fingerprint": "cfcf3aa6fc2a11ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-acce73bff3313810", "level": "error", "message": {"text": "Dangling fetch: PUT /api/me/suggestions/endorse (src/app/suggestions/[id]/page.tsx:136)"}, "properties": {"repobilityId": "e75a9814f75e39ce", "scanner": "scanner-primary", "fingerprint": "acce73bff3313810", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00201cde58e5d45c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/draft/DraftContent.tsx:94)"}, "properties": {"repobilityId": "bb213a1c4976c13a", "scanner": "scanner-primary", "fingerprint": "00201cde58e5d45c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a3b0829f8e3ab5e", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order?season=${orderSeason} (src/app/draft/DraftContent.tsx:1016)"}, "properties": {"repobilityId": "b41c52f6da8b2ee3", "scanner": "scanner-primary", "fingerprint": "3a3b0829f8e3ab5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b272858907398775", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/draft/room/page.tsx:15)"}, "properties": {"repobilityId": "519d633fa70f330a", "scanner": "scanner-primary", "fingerprint": "b272858907398775", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b640a262262ecce", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:223)"}, "properties": {"repobilityId": "661cae5e196faf13", "scanner": "scanner-primary", "fingerprint": "3b640a262262ecce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12ef1bdefea24b24", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:271)"}, "properties": {"repobilityId": "8f23fe86193f9221", "scanner": "scanner-primary", "fingerprint": "12ef1bdefea24b24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fec189fbc8f02e3b", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:286)"}, "properties": {"repobilityId": "423a518385201220", "scanner": "scanner-primary", "fingerprint": "fec189fbc8f02e3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd933094c80b6f45", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:301)"}, "properties": {"repobilityId": "bde16048014119a0", "scanner": "scanner-primary", "fingerprint": "bd933094c80b6f45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eadecc0bf4a5d215", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:313)"}, "properties": {"repobilityId": "bd1f9681029cd0fb", "scanner": "scanner-primary", "fingerprint": "eadecc0bf4a5d215", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-868a9885bc1b07ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:338)"}, "properties": {"repobilityId": "61c14d198d7180e3", "scanner": "scanner-primary", "fingerprint": "868a9885bc1b07ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63e7f2282bd9bfe2", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:355)"}, "properties": {"repobilityId": "13055a146ee55faf", "scanner": "scanner-primary", "fingerprint": "63e7f2282bd9bfe2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e27ce755523d5d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/team-prospect-draftboard (src/app/draft/room/team/page.tsx:394)"}, "properties": {"repobilityId": "3a3f3d3e8f1415d7", "scanner": "scanner-primary", "fingerprint": "8e27ce755523d5d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e745971c499f4a8b", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(myTeam)}${draftIdParam} (src/app/draft/room/team/page.tsx:429)"}, "properties": {"repobilityId": "af27a6b496bc39d5", "scanner": "scanner-primary", "fingerprint": "e745971c499f4a8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b38b0e73575b3a3f", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/draft/room/team/page.tsx:442)"}, "properties": {"repobilityId": "a0df20478b2fc3f2", "scanner": "scanner-primary", "fingerprint": "b38b0e73575b3a3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a6271fe08486e19", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:471)"}, "properties": {"repobilityId": "ac86277d4c04b199", "scanner": "scanner-primary", "fingerprint": "9a6271fe08486e19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfbd595d56c1e3b6", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:482)"}, "properties": {"repobilityId": "ce23baebb161c043", "scanner": "scanner-primary", "fingerprint": "cfbd595d56c1e3b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27a09293e79cabe4", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:496)"}, "properties": {"repobilityId": "c631fc9c1e8f6d52", "scanner": "scanner-primary", "fingerprint": "27a09293e79cabe4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb3e6e8ab920c568", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:541)"}, "properties": {"repobilityId": "a976cf73fc47ef07", "scanner": "scanner-primary", "fingerprint": "cb3e6e8ab920c568", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ced4d7896e9b730", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:564)"}, "properties": {"repobilityId": "8720535e6e0800cd", "scanner": "scanner-primary", "fingerprint": "5ced4d7896e9b730", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff78a360e24adf7a", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/draft/room/team/page.tsx:599)"}, "properties": {"repobilityId": "42c21edcc49d4df0", "scanner": "scanner-primary", "fingerprint": "ff78a360e24adf7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be38cd89dd04e29b", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft?action=player_info&playerId=${encodeURIComponent(pid)} (src/app/draft/room/team/page.tsx:646)"}, "properties": {"repobilityId": "3a74322ca4c8e7fd", "scanner": "scanner-primary", "fingerprint": "be38cd89dd04e29b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be2cf90f288563e9", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:688)"}, "properties": {"repobilityId": "711536cdd7adda48", "scanner": "scanner-primary", "fingerprint": "be2cf90f288563e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33ee37d0b7e4cd7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_team&team=${encodeURIComponent(myTeam)}&draftId=${draft.id} (src/app/draft/room/team/page.tsx:761)"}, "properties": {"repobilityId": "55aefc0017deb23c", "scanner": "scanner-primary", "fingerprint": "33ee37d0b7e4cd7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb3f7c601100ae21", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1697)"}, "properties": {"repobilityId": "61b71b9e5362b2d4", "scanner": "scanner-primary", "fingerprint": "cb3f7c601100ae21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ace729eabfef5925", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/trade (src/app/draft/room/team/page.tsx:1721)"}, "properties": {"repobilityId": "c8db1cb5a9dea75d", "scanner": "scanner-primary", "fingerprint": "ace729eabfef5925", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc0f2a9639e4cbfc", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/draft/room/team/page.tsx:1753)"}, "properties": {"repobilityId": "54504d3eabdabbdf", "scanner": "scanner-primary", "fingerprint": "dc0f2a9639e4cbfc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be4ea91cb174d3c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/validate?season=${encodeURIComponent(String(selectedYear))}&rosterId=${encodeURIComponent(String(rosterId))} (src/app/teams/[id]/TeamContent.tsx:228)"}, "properties": {"repobilityId": "0153661ceee4e18d", "scanner": "scanner-primary", "fingerprint": "be4ea91cb174d3c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5738d0a44a64a6f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lineups/snapshot?year=${encodeURIComponent(snapYear)}&week=${encodeURIComponent(String(snapWeek))} (src/app/teams/[id]/TeamContent.tsx:266)"}, "properties": {"repobilityId": "3759cd9eab7164e3", "scanner": "scanner-primary", "fingerprint": "c5738d0a44a64a6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89ec94240e8b3669", "level": "error", "message": {"text": "Dangling fetch: POST /api/lineups/snapshot (src/app/teams/[id]/TeamContent.tsx:281)"}, "properties": {"repobilityId": "6ce78b503d97860f", "scanner": "scanner-primary", "fingerprint": "89ec94240e8b3669", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52599e910524e195", "level": "error", "message": {"text": "Dangling fetch: GET /api/lineups/snapshot/backfill?year=${encodeURIComponent(snapYear)}&overwrite=true (src/app/teams/[id]/TeamContent.tsx:299)"}, "properties": {"repobilityId": "9a8380c2096b5183", "scanner": "scanner-primary", "fingerprint": "52599e910524e195", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72a41e0a8eaab41d", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_assets&team=${encodeURIComponent(teamName)} (src/app/teams/[id]/TeamContent.tsx:796)"}, "properties": {"repobilityId": "eed87323a0a3d956", "scanner": "scanner-primary", "fingerprint": "72a41e0a8eaab41d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-127158ba60e1b8be", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/pins (src/app/admin/users/page.tsx:43)"}, "properties": {"repobilityId": "430b0c8ecd6040fd", "scanner": "scanner-primary", "fingerprint": "127158ba60e1b8be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b3b908efe75b7da", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/pins/set (src/app/admin/users/page.tsx:63)"}, "properties": {"repobilityId": "e89879375d3f0e59", "scanner": "scanner-primary", "fingerprint": "8b3b908efe75b7da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97a3e0432c42b9e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/audit/logins?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:88)"}, "properties": {"repobilityId": "63f8514e53dbd9c5", "scanner": "scanner-primary", "fingerprint": "97a3e0432c42b9e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9a5e53e80ee7999", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/activity/time?days=${encodeURIComponent(String(d))} (src/app/admin/users/page.tsx:89)"}, "properties": {"repobilityId": "f763af9c2a23d220", "scanner": "scanner-primary", "fingerprint": "d9a5e53e80ee7999", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47d85776137f7691", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/taxi/page.tsx:80)"}, "properties": {"repobilityId": "1dedbc7643197313", "scanner": "scanner-primary", "fingerprint": "47d85776137f7691", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08d5b2731b18a8e0", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/flags (src/app/admin/taxi/page.tsx:97)"}, "properties": {"repobilityId": "f6fa53824405023b", "scanner": "scanner-primary", "fingerprint": "08d5b2731b18a8e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c12b980010c956d", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/analysis?season=${encodeURIComponent(season)}&rosterId=${tm.rosterId} (src/app/admin/taxi/page.tsx:110)"}, "properties": {"repobilityId": "c012483c83a58181", "scanner": "scanner-primary", "fingerprint": "6c12b980010c956d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0eca423c09c0dfcb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin-login (src/app/admin/taxi/page.tsx:157)"}, "properties": {"repobilityId": "ec6bff796f64af3f", "scanner": "scanner-primary", "fingerprint": "0eca423c09c0dfcb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d86a43a29607370", "level": "error", "message": {"text": "Dangling fetch: GET /api/taxi/report (src/app/admin/taxi/page.tsx:230)"}, "properties": {"repobilityId": "8b2599d037df23cc", "scanner": "scanner-primary", "fingerprint": "4d86a43a29607370", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2e75f1a75680b23", "level": "error", "message": {"text": "Dangling fetch: GET /api/suggestions (src/app/admin/suggestions/page.tsx:43)"}, "properties": {"repobilityId": "1bfe9f277655a7a8", "scanner": "scanner-primary", "fingerprint": "e2e75f1a75680b23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-199fe78e851f464a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/suggestions/votes (src/app/admin/suggestions/page.tsx:44)"}, "properties": {"repobilityId": "89410d61ce166cd5", "scanner": "scanner-primary", "fingerprint": "199fe78e851f464a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-844dc131f0acb77a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:133)"}, "properties": {"repobilityId": "bf97ecebb417e6f7", "scanner": "scanner-primary", "fingerprint": "844dc131f0acb77a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6da05d39ab8a68aa", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:233)"}, "properties": {"repobilityId": "ceb16e3b625e509d", "scanner": "scanner-primary", "fingerprint": "6da05d39ab8a68aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c4e6381585c9498", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:281)"}, "properties": {"repobilityId": "769ce1288ece7cbd", "scanner": "scanner-primary", "fingerprint": "4c4e6381585c9498", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68f96bce263f4af1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:312)"}, "properties": {"repobilityId": "c03c46f5157bf611", "scanner": "scanner-primary", "fingerprint": "68f96bce263f4af1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1b96390e6c85590", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:343)"}, "properties": {"repobilityId": "723848e12cecddda", "scanner": "scanner-primary", "fingerprint": "b1b96390e6c85590", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96feaedfaa360211", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:370)"}, "properties": {"repobilityId": "b0fa349b3569601f", "scanner": "scanner-primary", "fingerprint": "96feaedfaa360211", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0c85ae07f4164de", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:387)"}, "properties": {"repobilityId": "c32062e37920e264", "scanner": "scanner-primary", "fingerprint": "f0c85ae07f4164de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-692f15ab8b355536", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:405)"}, "properties": {"repobilityId": "52f52f85b38a58f2", "scanner": "scanner-primary", "fingerprint": "692f15ab8b355536", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15084650a013accd", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/suggestions (src/app/admin/suggestions/page.tsx:418)"}, "properties": {"repobilityId": "5d54ecc5da132aad", "scanner": "scanner-primary", "fingerprint": "15084650a013accd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-576fdff638c59248", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/suggestions (src/app/admin/suggestions/page.tsx:432)"}, "properties": {"repobilityId": "afb0b79216d5aaab", "scanner": "scanner-primary", "fingerprint": "576fdff638c59248", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-139cc292f2fededc", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-images-files (src/app/admin/draft/page.tsx:62)"}, "properties": {"repobilityId": "5273643c81d90d39", "scanner": "scanner-primary", "fingerprint": "139cc292f2fededc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36993c1c35ba4de7", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/player-videos (src/app/admin/draft/page.tsx:90)"}, "properties": {"repobilityId": "d9a6b207d5509197", "scanner": "scanner-primary", "fingerprint": "36993c1c35ba4de7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b5d6d416420d348", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:108)"}, "properties": {"repobilityId": "b8c2da819ed5625d", "scanner": "scanner-primary", "fingerprint": "0b5d6d416420d348", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c590c8c1a07b311", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:154)"}, "properties": {"repobilityId": "dabb40b4aafcead5", "scanner": "scanner-primary", "fingerprint": "3c590c8c1a07b311", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fef27465a94531b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:168)"}, "properties": {"repobilityId": "a1d7221ef8a74e39", "scanner": "scanner-primary", "fingerprint": "fef27465a94531b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92d97aab941dd58f", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:192)"}, "properties": {"repobilityId": "79c6be2adce52616", "scanner": "scanner-primary", "fingerprint": "92d97aab941dd58f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4af20843c703d542", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:271)"}, "properties": {"repobilityId": "a5b3d8b5b56acb33", "scanner": "scanner-primary", "fingerprint": "4af20843c703d542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c3e48330fa8fce3", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-media (src/app/admin/draft/page.tsx:343)"}, "properties": {"repobilityId": "6633aead7c18a65f", "scanner": "scanner-primary", "fingerprint": "5c3e48330fa8fce3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4f146dbc006bf16", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/trade?action=get_admin_pending (src/app/admin/draft/page.tsx:528)"}, "properties": {"repobilityId": "f3dad1e2e7024b0a", "scanner": "scanner-primary", "fingerprint": "d4f146dbc006bf16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb88c201fe701871", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/trade (src/app/admin/draft/page.tsx:545)"}, "properties": {"repobilityId": "36ab87ec901b7b96", "scanner": "scanner-primary", "fingerprint": "cb88c201fe701871", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7947897d8040e2f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/draft/page.tsx:566)"}, "properties": {"repobilityId": "6e7ebdc9cd91396a", "scanner": "scanner-primary", "fingerprint": "7947897d8040e2f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81372c93dd64e7a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:572)"}, "properties": {"repobilityId": "339920fc9d08675f", "scanner": "scanner-primary", "fingerprint": "81372c93dd64e7a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f21b51c42c9e951a", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:593)"}, "properties": {"repobilityId": "b4016e6648f61b8a", "scanner": "scanner-primary", "fingerprint": "f21b51c42c9e951a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41c4a7874bb16fc7", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:715)"}, "properties": {"repobilityId": "00c346bdac199f4a", "scanner": "scanner-primary", "fingerprint": "41c4a7874bb16fc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ad4a9732df4c3a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:739)"}, "properties": {"repobilityId": "97157e3c69e0ac99", "scanner": "scanner-primary", "fingerprint": "9ad4a9732df4c3a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-00979146b45c2910", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:753)"}, "properties": {"repobilityId": "bd64d7680f66719c", "scanner": "scanner-primary", "fingerprint": "00979146b45c2910", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4fd0135f7d19260", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:794)"}, "properties": {"repobilityId": "c0c30de3329a7cb4", "scanner": "scanner-primary", "fingerprint": "e4fd0135f7d19260", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb2f89cf454db45d", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:897)"}, "properties": {"repobilityId": "df47543f85b362c6", "scanner": "scanner-primary", "fingerprint": "eb2f89cf454db45d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14eb1f14041bb835", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:918)"}, "properties": {"repobilityId": "9e112acda6502343", "scanner": "scanner-primary", "fingerprint": "14eb1f14041bb835", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9d5a404582b7c78", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft/player-videos (src/app/admin/draft/page.tsx:921)"}, "properties": {"repobilityId": "1e235b25ae7c03da", "scanner": "scanner-primary", "fingerprint": "e9d5a404582b7c78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48ba1f5598b118a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:937)"}, "properties": {"repobilityId": "8f450c7cefeaff48", "scanner": "scanner-primary", "fingerprint": "48ba1f5598b118a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8d6e954a23dbd0b", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:988)"}, "properties": {"repobilityId": "7f9c2a5f338f7335", "scanner": "scanner-primary", "fingerprint": "c8d6e954a23dbd0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a669d149dde16fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1005)"}, "properties": {"repobilityId": "0b359157c7626e20", "scanner": "scanner-primary", "fingerprint": "0a669d149dde16fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36f9232216e7b561", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1196)"}, "properties": {"repobilityId": "c07688beaf8ec78d", "scanner": "scanner-primary", "fingerprint": "36f9232216e7b561", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9546884ecf6fcd2d", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1216)"}, "properties": {"repobilityId": "fbfb0bf6cccad87e", "scanner": "scanner-primary", "fingerprint": "9546884ecf6fcd2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f71ee292e6041da", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/next-order (src/app/admin/draft/page.tsx:1453)"}, "properties": {"repobilityId": "20fda2f1f4c56e33", "scanner": "scanner-primary", "fingerprint": "9f71ee292e6041da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d0e1c776d2e7f7d", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1686)"}, "properties": {"repobilityId": "c80928c41ab33340", "scanner": "scanner-primary", "fingerprint": "5d0e1c776d2e7f7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-084f30f30160f985", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1760)"}, "properties": {"repobilityId": "703391539dd239ba", "scanner": "scanner-primary", "fingerprint": "084f30f30160f985", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd31b0f0ecdb3d82", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1881)"}, "properties": {"repobilityId": "ba5dd13eb416b6b4", "scanner": "scanner-primary", "fingerprint": "cd31b0f0ecdb3d82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5e41f4f197ff4c2", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1943)"}, "properties": {"repobilityId": "f72a34e4b99b32c1", "scanner": "scanner-primary", "fingerprint": "c5e41f4f197ff4c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f446bcb28f97da29", "level": "error", "message": {"text": "Dangling fetch: POST /api/draft (src/app/admin/draft/page.tsx:1970)"}, "properties": {"repobilityId": "b65ead6568d8137c", "scanner": "scanner-primary", "fingerprint": "f446bcb28f97da29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddb040014c7432f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/health/storage (src/app/admin/storage-test/page.tsx:20)"}, "properties": {"repobilityId": "695671fb6d77f63a", "scanner": "scanner-primary", "fingerprint": "ddb040014c7432f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ba2f244699e56bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/media/presign (src/app/admin/storage-test/page.tsx:37)"}, "properties": {"repobilityId": "8b14e3f865ac54fa", "scanner": "scanner-primary", "fingerprint": "8ba2f244699e56bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fdaa20eae9bea633", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/diagnostics?runId=${encodeURIComponent(runId)} (src/app/admin/diagnostics/page.tsx:133)"}, "properties": {"repobilityId": "0456a057e3d1f52d", "scanner": "scanner-primary", "fingerprint": "fdaa20eae9bea633", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1a00bcdb23ea198", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/diagnostics/page.tsx:149)"}, "properties": {"repobilityId": "1253b2634aa4427c", "scanner": "scanner-primary", "fingerprint": "f1a00bcdb23ea198", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3848ab51db0456b1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:47)"}, "properties": {"repobilityId": "49dbfa8dd766b804", "scanner": "scanner-primary", "fingerprint": "3848ab51db0456b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef665df67dbc9fb2", "level": "error", "message": {"text": "Dangling fetch: GET /api/manual-trades?all=1 (src/app/admin/trades/AdminTradesContent.tsx:80)"}, "properties": {"repobilityId": "796e0268e0985663", "scanner": "scanner-primary", "fingerprint": "ef665df67dbc9fb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25e610924db5af2a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin-login (src/app/admin/trades/AdminTradesContent.tsx:129)"}, "properties": {"repobilityId": "aa3b79443f9b05ea", "scanner": "scanner-primary", "fingerprint": "25e610924db5af2a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d65cd08379f8e00", "level": "error", "message": {"text": "Dangling fetch: GET /api/manual-trades (src/app/admin/trades/AdminTradesContent.tsx:155)"}, "properties": {"repobilityId": "a227d9118403fd25", "scanner": "scanner-primary", "fingerprint": "6d65cd08379f8e00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2a88a1f5b5cd137", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/manual-trades?id=${encodeURIComponent(id)} (src/app/admin/trades/AdminTradesContent.tsx:183)"}, "properties": {"repobilityId": "3b4da4a6a1f36a4f", "scanner": "scanner-primary", "fingerprint": "d2a88a1f5b5cd137", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7fdb15368e8f46b", "level": "error", "message": {"text": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(q)} (src/app/admin/trades/AdminTradesContent.tsx:321)"}, "properties": {"repobilityId": "ad7dd0005aea5393", "scanner": "scanner-primary", "fingerprint": "f7fdb15368e8f46b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f74daf140bff6f9d", "level": "error", "message": {"text": "Dangling fetch: GET /api/search/pick-became?${qs.toString()} (src/app/admin/trades/AdminTradesContent.tsx:450)"}, "properties": {"repobilityId": "c5d173ad7fccce5f", "scanner": "scanner-primary", "fingerprint": "f74daf140bff6f9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db31e92f3f4576d6", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:86)"}, "properties": {"repobilityId": "57ce1562e2f085ed", "scanner": "scanner-primary", "fingerprint": "db31e92f3f4576d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-969de10eaa29b961", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:116)"}, "properties": {"repobilityId": "b733ff08ed760595", "scanner": "scanner-primary", "fingerprint": "969de10eaa29b961", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-732aeed24bf7ac07", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/newsletter/queue (src/app/admin/newsletter/EditorialCalendar.tsx:143)"}, "properties": {"repobilityId": "dff5b78d9d9a239a", "scanner": "scanner-primary", "fingerprint": "732aeed24bf7ac07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41c492a72d2e69e7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/newsletter/queue?id=${encodeURIComponent(id)} (src/app/admin/newsletter/EditorialCalendar.tsx:162)"}, "properties": {"repobilityId": "8a36b97766cc6517", "scanner": "scanner-primary", "fingerprint": "41c492a72d2e69e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9154e9010505683a", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?list=true&season=${season}&draft=1 (src/app/admin/newsletter/SavedNewsletters.tsx:72)"}, "properties": {"repobilityId": "843c9b1ee55c9cb6", "scanner": "scanner-primary", "fingerprint": "9154e9010505683a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-66e3ecd9243e5145", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/newsletter?week=${item.week}&season=${item.season} (src/app/admin/newsletter/SavedNewsletters.tsx:96)"}, "properties": {"repobilityId": "fe738f7811346ab1", "scanner": "scanner-primary", "fingerprint": "66e3ecd9243e5145", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a8a2df1c9378d55", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/page.tsx:211)"}, "properties": {"repobilityId": "44481dcc18e58180", "scanner": "scanner-primary", "fingerprint": "6a8a2df1c9378d55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb5c3e93cf3ea9c7", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/admin/newsletter/page.tsx:222)"}, "properties": {"repobilityId": "2569b621c99776bb", "scanner": "scanner-primary", "fingerprint": "eb5c3e93cf3ea9c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cfa23bec90fc6e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?list=true&season=${s}&draft=1 (src/app/admin/newsletter/page.tsx:233)"}, "properties": {"repobilityId": "08e1233f2dcd0fe1", "scanner": "scanner-primary", "fingerprint": "2cfa23bec90fc6e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8c2b40b3dee0df9", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?season=${s}&week=${wNum}&draft=1 (src/app/admin/newsletter/page.tsx:252)"}, "properties": {"repobilityId": "399bea05f70dc40c", "scanner": "scanner-primary", "fingerprint": "b8c2b40b3dee0df9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3088c215112aafc6", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter (src/app/admin/newsletter/page.tsx:294)"}, "properties": {"repobilityId": "db286e04e8f287e8", "scanner": "scanner-primary", "fingerprint": "3088c215112aafc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feef6e447984995b", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:329)"}, "properties": {"repobilityId": "8795fb80e6b65856", "scanner": "scanner-primary", "fingerprint": "feef6e447984995b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-623edf5c9750007e", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:413)"}, "properties": {"repobilityId": "36e66ed937722335", "scanner": "scanner-primary", "fingerprint": "623edf5c9750007e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5307b8bbb8012d4d", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/generate-step (src/app/admin/newsletter/page.tsx:480)"}, "properties": {"repobilityId": "ae55b1eb1867a3b6", "scanner": "scanner-primary", "fingerprint": "5307b8bbb8012d4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffe3a6de59be7f88", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:528)"}, "properties": {"repobilityId": "08c553f385f1205c", "scanner": "scanner-primary", "fingerprint": "ffe3a6de59be7f88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6efe5d2c534c41e4", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/publish (src/app/admin/newsletter/page.tsx:553)"}, "properties": {"repobilityId": "dd7f89d740b34af8", "scanner": "scanner-primary", "fingerprint": "6efe5d2c534c41e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d219aacfda13bde8", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season}&draft=1 (src/app/admin/newsletter/page.tsx:582)"}, "properties": {"repobilityId": "810d361cfa1ad5f9", "scanner": "scanner-primary", "fingerprint": "d219aacfda13bde8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e10dcceab6a4c98", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/page.tsx:608)"}, "properties": {"repobilityId": "64eb00ccd8799cbf", "scanner": "scanner-primary", "fingerprint": "6e10dcceab6a4c98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e7da993e89ecb3d", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?week=${wNum}&season=${season} (src/app/admin/newsletter/EditModePanel.tsx:266)"}, "properties": {"repobilityId": "f3f016915e6ed924", "scanner": "scanner-primary", "fingerprint": "1e7da993e89ecb3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c5edb9998bd86bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/diagnostics?season=${season}&week=${wNum} (src/app/admin/newsletter/EditModePanel.tsx:289)"}, "properties": {"repobilityId": "7a6698bf6524df8d", "scanner": "scanner-primary", "fingerprint": "2c5edb9998bd86bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15c4e27841fa1d89", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/fact-audit (src/app/admin/newsletter/EditModePanel.tsx:305)"}, "properties": {"repobilityId": "489d3e217f5461c8", "scanner": "scanner-primary", "fingerprint": "15c4e27841fa1d89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22e71cce07eea9eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:362)"}, "properties": {"repobilityId": "4d91aed41a56cd0a", "scanner": "scanner-primary", "fingerprint": "22e71cce07eea9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6271478df13df747", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:408)"}, "properties": {"repobilityId": "7a580af607464ce0", "scanner": "scanner-primary", "fingerprint": "6271478df13df747", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbf886de502b760c", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:436)"}, "properties": {"repobilityId": "5497d7a9cdbc61f2", "scanner": "scanner-primary", "fingerprint": "dbf886de502b760c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db480bee0f1ee048", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:459)"}, "properties": {"repobilityId": "25fb11b0c5ddea5b", "scanner": "scanner-primary", "fingerprint": "db480bee0f1ee048", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49eda13200258688", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:486)"}, "properties": {"repobilityId": "8918ca718bd51b8a", "scanner": "scanner-primary", "fingerprint": "49eda13200258688", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f2f307f2d3248d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:509)"}, "properties": {"repobilityId": "ef3f580e0acfe085", "scanner": "scanner-primary", "fingerprint": "2f2f307f2d3248d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34e814804b22bab6", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:576)"}, "properties": {"repobilityId": "1ba49eef3b563fd3", "scanner": "scanner-primary", "fingerprint": "34e814804b22bab6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a2b37a05c16e9be", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/edit (src/app/admin/newsletter/EditModePanel.tsx:611)"}, "properties": {"repobilityId": "455f0b39c9dc8e41", "scanner": "scanner-primary", "fingerprint": "1a2b37a05c16e9be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c78671da9706113", "level": "error", "message": {"text": "Dangling fetch: POST /api/newsletter/generate-section (src/app/admin/newsletter/section-lab/page.tsx:179)"}, "properties": {"repobilityId": "289552fc455a4e22", "scanner": "scanner-primary", "fingerprint": "0c78671da9706113", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21fd7628ff86bc55", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/admin/newsletter/personality/page.tsx:98)"}, "properties": {"repobilityId": "93bb4f3f27d21fbc", "scanner": "scanner-primary", "fingerprint": "21fd7628ff86bc55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9948a3557a6239c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/pins (src/app/admin/pins/page.tsx:33)"}, "properties": {"repobilityId": "649b47ec8ff576f1", "scanner": "scanner-primary", "fingerprint": "9948a3557a6239c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-827e4a612df8516f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/pins (src/app/admin/pins/page.tsx:52)"}, "properties": {"repobilityId": "c9107e0efb5a9ae5", "scanner": "scanner-primary", "fingerprint": "827e4a612df8516f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e262ca1d498ea919", "level": "error", "message": {"text": "Dangling fetch: GET /api/votes (src/app/votes/page.tsx:83)"}, "properties": {"repobilityId": "d110ae29b62025c3", "scanner": "scanner-primary", "fingerprint": "e262ca1d498ea919", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-781d4d6758198d54", "level": "error", "message": {"text": "Dangling fetch: GET /api/votes/${id} (src/app/votes/[id]/page.tsx:448)"}, "properties": {"repobilityId": "a90265ef6ed35ca7", "scanner": "scanner-primary", "fingerprint": "781d4d6758198d54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3b6ae8d05eaf998", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/votes/[id]/page.tsx:448)"}, "properties": {"repobilityId": "7a95f68cfbfe2122", "scanner": "scanner-primary", "fingerprint": "c3b6ae8d05eaf998", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65549af20512848a", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:497)"}, "properties": {"repobilityId": "a859ffd51ea23c4a", "scanner": "scanner-primary", "fingerprint": "65549af20512848a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d08b5770a2dbe5a", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:515)"}, "properties": {"repobilityId": "5c4348368246cb64", "scanner": "scanner-primary", "fingerprint": "6d08b5770a2dbe5a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77d2efe4e8d32b1d", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes/${id}/cast (src/app/votes/[id]/page.tsx:539)"}, "properties": {"repobilityId": "13ba7ec2bfdcc790", "scanner": "scanner-primary", "fingerprint": "77d2efe4e8d32b1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f02b9095598b8f9d", "level": "error", "message": {"text": "Dangling fetch: POST /api/votes/${id}/respond (src/app/votes/[id]/page.tsx:540)"}, "properties": {"repobilityId": "48e3b7b63d3e491b", "scanner": "scanner-primary", "fingerprint": "f02b9095598b8f9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fafd65a7872e8974", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/trades/TradesFeedClient.tsx:129)"}, "properties": {"repobilityId": "47424793358682af", "scanner": "scanner-primary", "fingerprint": "fafd65a7872e8974", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c9f5d0be12a27a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/search/players?q=${encodeURIComponent(query)} (src/app/trades/tracker/TrackerContent.tsx:35)"}, "properties": {"repobilityId": "76021aea06437441", "scanner": "scanner-primary", "fingerprint": "6c9f5d0be12a27a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9110daeff3643b4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/trade-tree?${query} (src/app/trades/tracker/TrackerContent.tsx:158)"}, "properties": {"repobilityId": "922ad715300b7a69", "scanner": "scanner-primary", "fingerprint": "9110daeff3643b4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b5dc472e570e652", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin-login (src/app/trades/[id]/page.tsx:58)"}, "properties": {"repobilityId": "dd3c4c06fee34906", "scanner": "scanner-primary", "fingerprint": "8b5dc472e570e652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-750e7e2f2f0ed31e", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:391)"}, "properties": {"repobilityId": "62b28c77775b32eb", "scanner": "scanner-primary", "fingerprint": "750e7e2f2f0ed31e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78805fdef6f732c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/draft/team-roster?team=${encodeURIComponent(t)} (src/app/trades/analyzer/page.tsx:714)"}, "properties": {"repobilityId": "bb52ad564b52b062", "scanner": "scanner-primary", "fingerprint": "78805fdef6f732c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7873b832fff658b", "level": "error", "message": {"text": "Dangling fetch: GET /api/trade-analyzer/values (src/app/trades/analyzer/page.tsx:798)"}, "properties": {"repobilityId": "3f99f0898a0a90ea", "scanner": "scanner-primary", "fingerprint": "b7873b832fff658b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7d3534e6d247fea", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/trades/analyzer/page.tsx:799)"}, "properties": {"repobilityId": "a61996254a7aea8a", "scanner": "scanner-primary", "fingerprint": "a7d3534e6d247fea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f830303be9c7efa6", "level": "error", "message": {"text": "Dangling fetch: POST /api/rivalries/submit (src/app/rivalries/page.tsx:278)"}, "properties": {"repobilityId": "61e897bb2e4bdfca", "scanner": "scanner-primary", "fingerprint": "f830303be9c7efa6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7dc4c442348dd36", "level": "error", "message": {"text": "Dangling fetch: POST /api/rivalries/admin (src/app/rivalries/page.tsx:741)"}, "properties": {"repobilityId": "dc9d82f471e9f9d6", "scanner": "scanner-primary", "fingerprint": "b7dc4c442348dd36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fe1e4edb039eac8", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/rivalries/page.tsx:905)"}, "properties": {"repobilityId": "9c3ce15a07b639bc", "scanner": "scanner-primary", "fingerprint": "1fe1e4edb039eac8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2d2b343328db07a", "level": "error", "message": {"text": "Dangling fetch: GET /api/rivalries/status (src/app/rivalries/page.tsx:906)"}, "properties": {"repobilityId": "b11a37d514b97c49", "scanner": "scanner-primary", "fingerprint": "b2d2b343328db07a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51c36c456a21a86c", "level": "error", "message": {"text": "Dangling fetch: GET /api/rivalries/pairings (src/app/rivalries/page.tsx:913)"}, "properties": {"repobilityId": "865d3228733342fd", "scanner": "scanner-primary", "fingerprint": "51c36c456a21a86c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-caded8275b852736", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (src/app/trade-block/page.tsx:26)"}, "properties": {"repobilityId": "c6c31e4c230f6cdf", "scanner": "scanner-primary", "fingerprint": "caded8275b852736", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99d6ef67046aa1fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/trade-block (src/app/trade-block/page.tsx:39)"}, "properties": {"repobilityId": "a14a137b2444eaa8", "scanner": "scanner-primary", "fingerprint": "99d6ef67046aa1fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-679eadc062d9d955", "level": "error", "message": {"text": "Dangling fetch: POST /api/trade-block (src/app/trade-block/page.tsx:60)"}, "properties": {"repobilityId": "eea64312bfba6311", "scanner": "scanner-primary", "fingerprint": "679eadc062d9d955", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b8fb42fa57ab18a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/state/nfl (src/app/newsletter/page.tsx:48)"}, "properties": {"repobilityId": "1f2de21e25bd6417", "scanner": "scanner-primary", "fingerprint": "0b8fb42fa57ab18a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41f7a2595b87ff9e", "level": "error", "message": {"text": "Dangling fetch: GET /api/newsletter?season=${currentSeason}&week=${week} (src/app/newsletter/page.tsx:90)"}, "properties": {"repobilityId": "7942fca0287b4c99", "scanner": "scanner-primary", "fingerprint": "41f7a2595b87ff9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-563efc40d458689a", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${LEAGUE_IDS.CURRENT}/traded_picks (src/lib/mcp/handlers.ts:644)"}, "properties": {"repobilityId": "c37da7f8eaa565c3", "scanner": "scanner-primary", "fingerprint": "563efc40d458689a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01553c230dd56bb3", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2061)"}, "properties": {"repobilityId": "b5e6ae40dc6c116a", "scanner": "scanner-primary", "fingerprint": "01553c230dd56bb3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-686fcc9e4901dd39", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/league/${leagueId}/traded_picks (src/lib/mcp/handlers.ts:2399)"}, "properties": {"repobilityId": "f76ca98cf1fa9985", "scanner": "scanner-primary", "fingerprint": "686fcc9e4901dd39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb47ca397b3e48ea", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/lib/utils/email.ts:27)"}, "properties": {"repobilityId": "9b0fcc1127543843", "scanner": "scanner-primary", "fingerprint": "fb47ca397b3e48ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dec659b31c54e60b", "level": "error", "message": {"text": "Dangling fetch: GET https://api.fantasycalc.com/values/current?isDynasty=true&numQbs=2&ppr=0.5 (src/lib/newsletter/data-integration.ts:662)"}, "properties": {"repobilityId": "7abfca8b483e4e19", "scanner": "scanner-primary", "fingerprint": "dec659b31c54e60b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25bc928c5e77d06d", "level": "error", "message": {"text": "Dangling fetch: GET https://api.sleeper.app/v1/players/nfl (src/lib/newsletter/data-integration.ts:1089)"}, "properties": {"repobilityId": "828cc2f5945b55d1", "scanner": "scanner-primary", "fingerprint": "25bc928c5e77d06d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c97e1b032e336c7", "level": "error", "message": {"text": "Dangling fetch: HEAD https://www.cloudflare.com (src/server/storage/r2.ts:65)"}, "properties": {"repobilityId": "08ff279c70045ebb", "scanner": "scanner-primary", "fingerprint": "1c97e1b032e336c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09d407f3624361f2", "level": "note", "message": {"text": "Unused endpoint: GET /state/nfl"}, "properties": {"repobilityId": "129c3d94c69c8ab5", "scanner": "scanner-primary", "fingerprint": "09d407f3624361f2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}