{"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: Starsky618/-velo", "shortDescription": {"text": "Foundry mined unresolved feedback: Starsky618/-velo"}, "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: assumption_check\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_f"}, "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: Starsky618/-velo", "shortDescription": {"text": "Foundry mined review feedback without structured fix: Starsky618/-velo"}, "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: Starsky618/-velo\nThread: Starsky618/-velo#2\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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain':"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.72, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: Starsky618/-velo", "shortDescription": {"text": "Foundry mined blueprint gap alignment: Starsky618/-velo"}, "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: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'bluepri"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: Starsky618/-velo", "shortDescription": {"text": "Foundry mined assumption checks: Starsky618/-velo"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Starsky618/-velo#1\nRepo: Starsky618/-velo\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 3\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 14\nLabels: {'data_schema_persistence': 1, 'api_integration_gap': 2}\nPolarities: {'bad': 3}\nChanged file labels: {'ui_or_frontend': 10, 'api_or_backend': 1, 'schema_or_data': 1, 'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2ee0ddf09118a741\",\n    \"kind\": \"pull_request_body\",\n"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: Starsky618/-velo", "shortDescription": {"text": "Foundry mined schema ui api mismatch: Starsky618/-velo"}, "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: Starsky618/-velo\nThread: Starsky618/-velo#2\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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 67"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: Starsky618/-velo", "shortDescription": {"text": "Foundry mined bad chains: Starsky618/-velo"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo#2\nRepo: Starsky618/-velo\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 4\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 67\nLabels: {'human_feedback_general': 1, 'data_schema_persistence': 2, 'api_integration_gap': 1}\nPolarities: {'neutral': 1, 'bad': 3}\nChanged file labels: {'source_or_other': 3, 'ui_or_frontend': 25, 'api_or_backend': 9, 'schema_or_data': 6, 'docs_or_claims': 12, 'test_or_ci': 12}\nExamples:\n[\n  {\n  "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-131745c3ad81c9a2", "name": "Possibly dead Python function: channel_1_routing", "shortDescription": {"text": "Possibly dead Python function: channel_1_routing"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-558af0507612df10", "name": "Possibly dead Python function: channel_4_sop", "shortDescription": {"text": "Possibly dead Python function: channel_4_sop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8eb37d5895503864", "name": "Possibly dead Python function: channel_2_modules", "shortDescription": {"text": "Possibly dead Python function: channel_2_modules"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d070cf73611da670", "name": "Possibly dead Python function: channel_3_prds", "shortDescription": {"text": "Possibly dead Python function: channel_3_prds"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5553de0d83e23859", "name": "Possibly dead Python function: add_code", "shortDescription": {"text": "Possibly dead Python function: add_code"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b05338f212209cf3", "name": "Possibly dead Python function: check_rate_limit_by_ip", "shortDescription": {"text": "Possibly dead Python function: check_rate_limit_by_ip"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a30278ab3ea499fa", "name": "Possibly dead Python function: generate_authorize_url", "shortDescription": {"text": "Possibly dead Python function: generate_authorize_url"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f25108969c9e32c", "name": "Possibly dead Python function: round_1", "shortDescription": {"text": "Possibly dead Python function: round_1"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90393926a85be2b7", "name": "Stray `console.log` in TS/JS \u2014 miniprogram/app.js:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 miniprogram/app.js:64"}, "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-cc6de695bc0b63c5", "name": "Stray `console.log` in TS/JS \u2014 miniprogram/pages/profile/profile.js:341", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 miniprogram/pages/profile/profile.js:341"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e066691601852931", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a19be77ce053a9e2", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/prototypes/upload-reveal-first-rider.html:182", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prototypes/upload-reveal-first-rider.html:182"}, "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-efede1f7f8271f0b", "name": "Insecure pattern 'cors_wildcard' in app/main.py:48", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in app/main.py:48"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7efbda965f283c17", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 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-6ca81411e25b1664", "name": "Very large file: miniprogram/pages/meetup-create/meetup-create.js (1238 lines)", "shortDescription": {"text": "Very large file: miniprogram/pages/meetup-create/meetup-create.js (1238 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 72 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 15 placeholder/mock markers across 12 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. 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-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbb5857940ba0dc2", "name": "Agent instruction/config may expose a secret: AGENTS.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-909eb64265cce1c7", "name": "Agent authority lacks a verifier contract: .codex/hooks.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .codex/hooks.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6de8376bbdbdefa2", "name": "Commented-code block (5 lines) in tests/conftest.py:40", "shortDescription": {"text": "Commented-code block (5 lines) in tests/conftest.py:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b60988c5513e7343", "name": "Commented-code block (7 lines) in tests/test_ftp_estimator.py:72", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_ftp_estimator.py:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc057e4308ba0eba", "name": "Legacy-named symbol `test_get_segment_detail_elevation_profile_null_for_legacy` in tests/test_segment_router_v5.py:140", "shortDescription": {"text": "Legacy-named symbol `test_get_segment_detail_elevation_profile_null_for_legacy` in tests/test_segment_router_v5.py:140"}, "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-87679b734c047192", "name": "Legacy-named symbol `at_old` in tests/test_strava_unbind.py:44", "shortDescription": {"text": "Legacy-named symbol `at_old` in tests/test_strava_unbind.py:44"}, "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-7bc5ce92fbaa4566", "name": "Legacy-named symbol `url_old` in tests/test_sync_route_images.py:54", "shortDescription": {"text": "Legacy-named symbol `url_old` in tests/test_sync_route_images.py:54"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-129dc957efd26d21", "name": "Legacy-named symbol `test_switch_athlete_cleans_old` in tests/strava/test_callback.py:187", "shortDescription": {"text": "Legacy-named symbol `test_switch_athlete_cleans_old` in tests/strava/test_callback.py:187"}, "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-aadb3af6e76108b5", "name": "Commented-code block (5 lines) in scripts/backfill_phase5.py:51", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/backfill_phase5.py:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bff22d152ac2288", "name": "Commented-code block (7 lines) in app/database.py:19", "shortDescription": {"text": "Commented-code block (7 lines) in app/database.py:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11e0db538b2f8b2f", "name": "Commented-code block (5 lines) in app/queue.py:54", "shortDescription": {"text": "Commented-code block (5 lines) in app/queue.py:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2163e1d1b5300ef8", "name": "Commented-code block (9 lines) in app/notification/models.py:48", "shortDescription": {"text": "Commented-code block (9 lines) in app/notification/models.py:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d7225af3903176b", "name": "Commented-code block (6 lines) in app/notification/progress_detector.py:192", "shortDescription": {"text": "Commented-code block (6 lines) in app/notification/progress_detector.py:192"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94e6ffce5843b03d", "name": "Commented-code block (6 lines) in app/parsing/gpx_parser.py:44", "shortDescription": {"text": "Commented-code block (6 lines) in app/parsing/gpx_parser.py:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0addbfcfa4cdc8c", "name": "Commented-code block (7 lines) in app/strava/service_oauth.py:85", "shortDescription": {"text": "Commented-code block (7 lines) in app/strava/service_oauth.py:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1970e27b35aad7e9", "name": "Commented-code block (7 lines) in app/strava/service_token.py:115", "shortDescription": {"text": "Commented-code block (7 lines) in app/strava/service_token.py:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c7c7fa0c7e7b2de", "name": "Commented-code block (7 lines) in app/strava/import_scheduler.py:489", "shortDescription": {"text": "Commented-code block (7 lines) in app/strava/import_scheduler.py:489"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ac1ecb1e2e0af2b", "name": "Commented-code block (5 lines) in app/activity/worker.py:307", "shortDescription": {"text": "Commented-code block (5 lines) in app/activity/worker.py:307"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f310c9938e20e565", "name": "Commented-code block (6 lines) in app/activity/ftp_estimator.py:155", "shortDescription": {"text": "Commented-code block (6 lines) in app/activity/ftp_estimator.py:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69ac4131d3c3fe3e", "name": "Commented-code block (8 lines) in app/activity/dedupe.py:89", "shortDescription": {"text": "Commented-code block (8 lines) in app/activity/dedupe.py:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-926e0f55ccb89c29", "name": "Commented-code block (5 lines) in app/activity/dedupe_service.py:103", "shortDescription": {"text": "Commented-code block (5 lines) in app/activity/dedupe_service.py:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76925740aceba16c", "name": "Commented-code block (5 lines) in app/activity/models.py:110", "shortDescription": {"text": "Commented-code block (5 lines) in app/activity/models.py:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63ee4161a870cf32", "name": "Commented-code block (7 lines) in app/activity/service.py:276", "shortDescription": {"text": "Commented-code block (7 lines) in app/activity/service.py:276"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cd049196abd7e1a", "name": "Commented-code block (6 lines) in app/agent/segment_writer.py:105", "shortDescription": {"text": "Commented-code block (6 lines) in app/agent/segment_writer.py:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c83154586b2da367", "name": "Commented-code block (7 lines) in app/admin/router.py:17", "shortDescription": {"text": "Commented-code block (7 lines) in app/admin/router.py:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-178355ba191c2c9b", "name": "Commented-code block (5 lines) in app/segment/algorithms.py:162", "shortDescription": {"text": "Commented-code block (5 lines) in app/segment/algorithms.py:162"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6bdb2cbd06f73ab", "name": "Commented-code block (5 lines) in app/segment/service_create.py:178", "shortDescription": {"text": "Commented-code block (5 lines) in app/segment/service_create.py:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b19fbe2299c95511", "name": "Commented-code block (7 lines) in app/segment/service.py:91", "shortDescription": {"text": "Commented-code block (7 lines) in app/segment/service.py:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f30a50aecd607d19", "name": "Commented-code block (6 lines) in app/user/router.py:158", "shortDescription": {"text": "Commented-code block (6 lines) in app/user/router.py:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-313d20fb7532c857", "name": "Commented-code block (5 lines) in app/user/schemas.py:25", "shortDescription": {"text": "Commented-code block (5 lines) in app/user/schemas.py:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d0f29a91a73f8c6", "name": "Commented-code block (5 lines) in app/user/service_stats.py:185", "shortDescription": {"text": "Commented-code block (5 lines) in app/user/service_stats.py:185"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f022773bad4dfa43", "name": "Commented-code block (15 lines) in miniprogram/components/ride-card/ride-card.js:8", "shortDescription": {"text": "Commented-code block (15 lines) in miniprogram/components/ride-card/ride-card.js: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-708af1c3ed9f6018", "name": "Commented-code block (6 lines) in miniprogram/pages/profile/profile.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in miniprogram/pages/profile/profile.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a6d279d38377391", "name": "Commented-code block (6 lines) in miniprogram/pages/strava-auth/strava-auth.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in miniprogram/pages/strava-auth/strava-auth.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2303eaaac7a5146f", "name": "Commented-code block (8 lines) in migrations/versions/phase5_v5_db_changes.py:240", "shortDescription": {"text": "Commented-code block (8 lines) in migrations/versions/phase5_v5_db_changes.py:240"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `RQ_QUEUES`, `STRAVA_WEBHOOK_CALLBACK_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/backfill_power_zone_zero_seconds.py:main, scripts/backfill_daily_training_load.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp/activity/router.py:get_activity, app/activity/router.py:delete_activity, app/activity/router.py:get_activity_status, app/segment/router.py:get_activity_segments\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp/meetup/router.py:get_meetup_report, app/meetup/router.py:get_meetup, app/meetup/router.py:list_media\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`app/notification/router.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6c7c815e4bbe342", "name": "Unused endpoint: POST /mark-all-read", "shortDescription": {"text": "Unused endpoint: POST /mark-all-read"}, "fullDescription": {"text": "`app/notification/router.py` declares `POST /mark-all-read` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c09a15097f655e94", "name": "Unused endpoint: GET /honors", "shortDescription": {"text": "Unused endpoint: GET /honors"}, "fullDescription": {"text": "`app/notification/router.py` declares `GET /honors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d345fa90f5de3745", "name": "Unused endpoint: GET /authorize", "shortDescription": {"text": "Unused endpoint: GET /authorize"}, "fullDescription": {"text": "`app/strava/router.py` declares `GET /authorize` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdfb578618cf2542", "name": "Unused endpoint: GET /callback", "shortDescription": {"text": "Unused endpoint: GET /callback"}, "fullDescription": {"text": "`app/strava/router.py` declares `GET /callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-82c1c88192abd371", "name": "Unused endpoint: POST /unbind", "shortDescription": {"text": "Unused endpoint: POST /unbind"}, "fullDescription": {"text": "`app/strava/router.py` declares `POST /unbind` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c251e9b16c727c7a", "name": "Unused endpoint: GET /webhook", "shortDescription": {"text": "Unused endpoint: GET /webhook"}, "fullDescription": {"text": "`app/strava/router.py` declares `GET /webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ae38010c60493f1", "name": "Unused endpoint: POST /webhook", "shortDescription": {"text": "Unused endpoint: POST /webhook"}, "fullDescription": {"text": "`app/strava/router.py` declares `POST /webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa413208496243a5", "name": "Unused endpoint: POST /sync", "shortDescription": {"text": "Unused endpoint: POST /sync"}, "fullDescription": {"text": "`app/strava/router.py` declares `POST /sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10c482e5eeb82c26", "name": "Unused endpoint: GET /import-progress", "shortDescription": {"text": "Unused endpoint: GET /import-progress"}, "fullDescription": {"text": "`app/strava/router.py` declares `GET /import-progress` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`app/activity/router.py` declares `POST /upload` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-63476b3c45e5422f", "name": "Unused endpoint: GET /track-thumbs", "shortDescription": {"text": "Unused endpoint: GET /track-thumbs"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /track-thumbs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f7949f21743dbadf", "name": "Unused endpoint: GET /{activity_id}", "shortDescription": {"text": "Unused endpoint: GET /{activity_id}"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /{activity_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8569904d6658f30", "name": "Unused endpoint: PATCH /{activity_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{activity_id}"}, "fullDescription": {"text": "`app/activity/router.py` declares `PATCH /{activity_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8238b9ef22a2673", "name": "Unused endpoint: PATCH /{activity_id}/privacy", "shortDescription": {"text": "Unused endpoint: PATCH /{activity_id}/privacy"}, "fullDescription": {"text": "`app/activity/router.py` declares `PATCH /{activity_id}/privacy` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc0c8d9287a72b37", "name": "Unused endpoint: DELETE /{activity_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{activity_id}"}, "fullDescription": {"text": "`app/activity/router.py` declares `DELETE /{activity_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b42fed5c780b4f45", "name": "Unused endpoint: GET /{activity_id}/timeseries", "shortDescription": {"text": "Unused endpoint: GET /{activity_id}/timeseries"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /{activity_id}/timeseries` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd167621e9b9ef9c", "name": "Unused endpoint: GET /{activity_id}/power-curve", "shortDescription": {"text": "Unused endpoint: GET /{activity_id}/power-curve"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /{activity_id}/power-curve` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5add2e878349445e", "name": "Unused endpoint: GET /{activity_id}/power-curve/effort", "shortDescription": {"text": "Unused endpoint: GET /{activity_id}/power-curve/effort"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /{activity_id}/power-curve/effort` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1d0eec4a5068894", "name": "Unused endpoint: GET /{activity_id}/status", "shortDescription": {"text": "Unused endpoint: GET /{activity_id}/status"}, "fullDescription": {"text": "`app/activity/router.py` declares `GET /{activity_id}/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`app/route_book/router.py` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d35d2f0f85eadfc", "name": "Unused endpoint: POST /tencent-direction", "shortDescription": {"text": "Unused endpoint: POST /tencent-direction"}, "fullDescription": {"text": "`app/route_book/router.py` declares `POST /tencent-direction` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-92a180f81c027dbd", "name": "Unused endpoint: GET /activity-candidates", "shortDescription": {"text": "Unused endpoint: GET /activity-candidates"}, "fullDescription": {"text": "`app/route_book/router.py` declares `GET /activity-candidates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f765d50aafdcfe7a", "name": "Unused endpoint: GET /{route_book_id}", "shortDescription": {"text": "Unused endpoint: GET /{route_book_id}"}, "fullDescription": {"text": "`app/route_book/router.py` declares `GET /{route_book_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de36ab5b446f61b8", "name": "Unused endpoint: DELETE /{route_book_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{route_book_id}"}, "fullDescription": {"text": "`app/route_book/router.py` declares `DELETE /{route_book_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afe1b40759fe160c", "name": "Unused endpoint: GET /{guide_id}", "shortDescription": {"text": "Unused endpoint: GET /{guide_id}"}, "fullDescription": {"text": "`app/route_book/guides_router.py` declares `GET /{guide_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9be4d4de0fb412ab", "name": "Unused endpoint: GET /my-draft", "shortDescription": {"text": "Unused endpoint: GET /my-draft"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /my-draft` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8456eca76070a1a7", "name": "Unused endpoint: GET /mine", "shortDescription": {"text": "Unused endpoint: GET /mine"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /mine` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19197263ee360f19", "name": "Unused endpoint: GET /favorite-places", "shortDescription": {"text": "Unused endpoint: GET /favorite-places"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /favorite-places` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa7ef6f2567a056f", "name": "Unused endpoint: POST /favorite-places", "shortDescription": {"text": "Unused endpoint: POST /favorite-places"}, "fullDescription": {"text": "`app/meetup/router.py` declares `POST /favorite-places` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-234742641ae08569", "name": "Unused endpoint: DELETE /favorite-places/{place_id}", "shortDescription": {"text": "Unused endpoint: DELETE /favorite-places/{place_id}"}, "fullDescription": {"text": "`app/meetup/router.py` declares `DELETE /favorite-places/{place_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be6dd610b94d47e9", "name": "Unused endpoint: GET /place-suggestions", "shortDescription": {"text": "Unused endpoint: GET /place-suggestions"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /place-suggestions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05b7445ee88b39b5", "name": "Unused endpoint: GET /{meetup_id}/participants", "shortDescription": {"text": "Unused endpoint: GET /{meetup_id}/participants"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /{meetup_id}/participants` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d22c30ba5f874a2c", "name": "Unused endpoint: GET /{meetup_id}/report", "shortDescription": {"text": "Unused endpoint: GET /{meetup_id}/report"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /{meetup_id}/report` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b60701adbc838577", "name": "Unused endpoint: GET /{meetup_id}", "shortDescription": {"text": "Unused endpoint: GET /{meetup_id}"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /{meetup_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9543b62e73aa863a", "name": "Unused endpoint: PATCH /{meetup_id}", "shortDescription": {"text": "Unused endpoint: PATCH /{meetup_id}"}, "fullDescription": {"text": "`app/meetup/router.py` declares `PATCH /{meetup_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8dab7dfe9b589f12", "name": "Unused endpoint: POST /{meetup_id}/publish", "shortDescription": {"text": "Unused endpoint: POST /{meetup_id}/publish"}, "fullDescription": {"text": "`app/meetup/router.py` declares `POST /{meetup_id}/publish` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8028595d857a01ac", "name": "Unused endpoint: POST /{meetup_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /{meetup_id}/cancel"}, "fullDescription": {"text": "`app/meetup/router.py` declares `POST /{meetup_id}/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bef308a6e92002db", "name": "Unused endpoint: POST /{meetup_id}/join", "shortDescription": {"text": "Unused endpoint: POST /{meetup_id}/join"}, "fullDescription": {"text": "`app/meetup/router.py` declares `POST /{meetup_id}/join` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33e6f6cfb2faa8da", "name": "Unused endpoint: DELETE /{meetup_id}/leave", "shortDescription": {"text": "Unused endpoint: DELETE /{meetup_id}/leave"}, "fullDescription": {"text": "`app/meetup/router.py` declares `DELETE /{meetup_id}/leave` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-23bf1dd07188947e", "name": "Unused endpoint: GET /{meetup_id}/media", "shortDescription": {"text": "Unused endpoint: GET /{meetup_id}/media"}, "fullDescription": {"text": "`app/meetup/router.py` declares `GET /{meetup_id}/media` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7dd12e054f0dbff", "name": "Unused endpoint: POST /{meetup_id}/media", "shortDescription": {"text": "Unused endpoint: POST /{meetup_id}/media"}, "fullDescription": {"text": "`app/meetup/router.py` declares `POST /{meetup_id}/media` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac1d388a50b57e2f", "name": "Unused endpoint: DELETE /{meetup_id}/media/{media_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{meetup_id}/media/{media_id}"}, "fullDescription": {"text": "`app/meetup/router.py` declares `DELETE /{meetup_id}/media/{media_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e2b87d4f8d4263b", "name": "Unused endpoint: DELETE /{meetup_id}", "shortDescription": {"text": "Unused endpoint: DELETE /{meetup_id}"}, "fullDescription": {"text": "`app/meetup/router.py` declares `DELETE /{meetup_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-945011d03d3bdc5b", "name": "Unused endpoint: GET /whoami", "shortDescription": {"text": "Unused endpoint: GET /whoami"}, "fullDescription": {"text": "`app/admin/router.py` declares `GET /whoami` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41aed1f30debba73", "name": "Unused endpoint: GET /curation-pool", "shortDescription": {"text": "Unused endpoint: GET /curation-pool"}, "fullDescription": {"text": "`app/admin/router.py` declares `GET /curation-pool` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-145273de74aafb4e", "name": "Unused endpoint: PATCH /curation-pool/{pool_id}", "shortDescription": {"text": "Unused endpoint: PATCH /curation-pool/{pool_id}"}, "fullDescription": {"text": "`app/admin/router.py` declares `PATCH /curation-pool/{pool_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7933f6bc8a1455ff", "name": "Unused endpoint: POST /ai/segment-drafts/{segment_id}/generate", "shortDescription": {"text": "Unused endpoint: POST /ai/segment-drafts/{segment_id}/generate"}, "fullDescription": {"text": "`app/admin/router.py` declares `POST /ai/segment-drafts/{segment_id}/generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a6a3eee7f7356f0", "name": "Unused endpoint: GET /ai/segment-drafts", "shortDescription": {"text": "Unused endpoint: GET /ai/segment-drafts"}, "fullDescription": {"text": "`app/admin/router.py` declares `GET /ai/segment-drafts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-586b7730c7ab8f31", "name": "Unused endpoint: PATCH /ai/segment-drafts/{draft_id}", "shortDescription": {"text": "Unused endpoint: PATCH /ai/segment-drafts/{draft_id}"}, "fullDescription": {"text": "`app/admin/router.py` declares `PATCH /ai/segment-drafts/{draft_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20250"}, "properties": {"repository": "Starsky618/-velo", "repoUrl": "https://github.com/Starsky618/-velo", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Starsky618/-velo"}, "properties": {"repobilityId": 361430, "scanner": "foundry_dataset", "fingerprint": "7769acb28476a3ff673311ce2de532c643eb38b823966cc5366a8a6bfaca949a", "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": 12, "api_or_backend": 9, "docs_or_claims": 12, "schema_or_data": 6, "ui_or_frontend": 25, "source_or_other": 3, "api_integration_gap": 1, "partial blueprint fit": 1, "human_feedback_general": 1, "data_schema_persistence": 2, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 10, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 165, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 67, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 9, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 92, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 67, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 9, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#2", "issue_number": "2", "quality_tiers": {"unresolved": 6, "assumption_check": 3}, "repo_full_name": "Starsky618/-velo", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-be311e3266404df8", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 84, "api_or_backend": 63, "docs_or_claims": 84, "schema_or_data": 42, "ui_or_frontend": 175, "source_or_other": 21}}, "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: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 67, 'comment_chain_touches_file': 48, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 9, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'thread_has_comment': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, '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: {'ui_or_frontend': 25, 'docs_or_claims': 12, 'test_or_ci': 12, 'api_or_backend': 9, 'schema_or_data': 6, 'not_resolved_or_not_observed': 5, 'source_or_other': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_alignment': 3, 'data_schema_persistence': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'api_integration_gap': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 10, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 6, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-2a8074e2813a74a3", "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": "Starsky618/-velo", "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: Starsky618/-velo"}, "properties": {"repobilityId": 358348, "scanner": "foundry_dataset", "fingerprint": "f893278c922e4e5e04a9b59434f98b7c637a118d9ec1c859c73eee9f8b5950b1", "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": {"test_or_ci": 12, "api_or_backend": 9, "docs_or_claims": 12, "schema_or_data": 6, "ui_or_frontend": 25, "source_or_other": 3, "api_integration_gap": 1, "partial blueprint fit": 1, "human_feedback_general": 1, "data_schema_persistence": 2, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_no_linked_fix": 3, "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": 10, "ambiguous_needs_more_evidence": 2}, "polarity": "mixed", "query_id": "review_feedback_without_structured_fix", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 165, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 67, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 9, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 92, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 67, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 9, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#2", "issue_number": "2", "quality_tiers": {"unresolved": 6, "assumption_check": 3}, "repo_full_name": "Starsky618/-velo", "training_usage": "weak_supervision", "source_motif_id": "graph-pattern-motif-thread-05da9ede60486169", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 84, "api_or_backend": 63, "docs_or_claims": 84, "schema_or_data": 42, "ui_or_frontend": 175, "source_or_other": 21}}, "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: Starsky618/-velo\nThread: Starsky618/-velo#2\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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 67, 'comment_chain_touches_file': 48, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 9, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'thread_has_comment': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, '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: {'ui_or_frontend': 25, 'docs_or_claims': 12, 'test_or_ci': 12, 'api_or_backend': 9, 'schema_or_data': 6, 'not_resolved_or_not_observed': 5, 'source_or_other': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_alignment': 3, 'data_schema_persistence': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'api_integration_gap': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 10, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 6, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-440dfcc84a8a1e50", "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": "Starsky618/-velo", "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: Starsky618/-velo"}, "properties": {"repobilityId": 345209, "scanner": "foundry_dataset", "fingerprint": "0f1b8592b5b63866700b8dcd18d6ef38dd50ec211d039f7dbd0f5ff884f8a957", "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": 12, "api_or_backend": 9, "docs_or_claims": 12, "schema_or_data": 6, "ui_or_frontend": 25, "source_or_other": 3, "api_integration_gap": 1, "partial blueprint fit": 1, "human_feedback_general": 1, "data_schema_persistence": 2, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"not_resolved_or_not_observed": 10, "ambiguous_needs_more_evidence": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 165, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 67, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 9, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 92, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 67, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 9, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#2", "issue_number": "2", "quality_tiers": {"unresolved": 6, "assumption_check": 3}, "repo_full_name": "Starsky618/-velo", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-7216a28f9122415e", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 84, "api_or_backend": 63, "docs_or_claims": 84, "schema_or_data": 42, "ui_or_frontend": 175, "source_or_other": 21}}, "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: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 67, 'comment_chain_touches_file': 48, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 9, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'thread_has_comment': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, '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: {'ui_or_frontend': 25, 'docs_or_claims': 12, 'test_or_ci': 12, 'api_or_backend': 9, 'schema_or_data': 6, 'not_resolved_or_not_observed': 5, 'source_or_other': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_alignment': 3, 'data_schema_persistence': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'api_integration_gap': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 10, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 6, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-d0864c5e546b9918", "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": "Starsky618/-velo", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: Starsky618/-velo"}, "properties": {"repobilityId": 345208, "scanner": "foundry_dataset", "fingerprint": "589174622aec11fdcb31b556d5778e775b5935c964366924c91309c4d9b4d042", "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, "ui_workflow": 1, "api_or_backend": 1, "schema_or_data": 1, "ui_or_frontend": 10, "api_integration_gap": 2, "partial blueprint fit": 1, "data_schema_persistence": 1, "claimed_resolved_unverified": 5, "issue_or_pull_request_thread": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_then_fix_attempt": 3, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_unverified": 10}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 98, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 14, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_links_commit": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 37, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 14, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#1", "issue_number": "1", "quality_tiers": {"assumption_check": 3, "weak_supervision": 5}, "repo_full_name": "Starsky618/-velo", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-1f874ba8cdb1a18e", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 12, "api_or_backend": 6, "schema_or_data": 6, "ui_or_frontend": 60}}, "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: weak_supervision_needs_review\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#1\nRepo: Starsky618/-velo\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 37\nEdges: 98\nNode types: {'pr_file': 14, 'link_quality': 8, 'comment_chain': 3, 'alignment': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_links_commit': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 10, 'claimed_resolved_unverified': 5, 'human_reported_issue_then_fix_attempt': 3, 'blueprint_human_gap_alignment': 3, 'api_integration_gap': 2, 'test_or_ci': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'schema_or_data': 1, 'ui_workflow': 1, 'partial blueprint fit': 1}\nOutcomes: {'claimed_resolved_unverified': 10}\nQuality tiers: {'weak_supervision': 5, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-3bfc7ab0f5e1ffb5", "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": "Starsky618/-velo", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: Starsky618/-velo"}, "properties": {"repobilityId": 300882, "scanner": "foundry_dataset", "fingerprint": "370b5e7f3ce39e763f707b35056782fdd31d4b85d9bbcf4e0cc279f08fdc7882", "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": "Starsky618/-velo#1", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "schema_or_data", "test_or_ci", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.705, "repo_full_name": "Starsky618/-velo", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-8b6b4ab10a0a9e40", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 3, "docs": 3, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 14, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "api_or_backend": 1, "schema_or_data": 1, "ui_or_frontend": 10}, "linked_commit_count": 3, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 4, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_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_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Starsky618/-velo#1\nRepo: Starsky618/-velo\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 3\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 14\nLabels: {'data_schema_persistence': 1, 'api_integration_gap': 2}\nPolarities: {'bad': 3}\nChanged file labels: {'ui_or_frontend': 10, 'api_or_backend': 1, 'schema_or_data': 1, 'test_or_ci': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2ee0ddf09118a741\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Starsky618/-velo/pull/1\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Starsky618/-velo\\nAuthor: Starsky618 (User)\\nURL: https://github.com/Starsky618/-velo/pull/1\\nTitle: feat: \u5355\u6b21\u9a91\u884c\u529f\u7387\u66f2\u7ebf\u5206\u6790\uff08\u542b\u4e09\u5ba1\u6536\u655b\u91cd\u6784\uff09\\nBody:\\n## Summary\\n\\n- **\u65b0\u529f\u80fd\uff08commit 4a03f60\uff09**\uff1a\u5355\u6b21\u9a91\u884c\u529f\u7387\u66f2\u7ebf\u5206\u6790\u3002\u8be6\u60c5\u9875\u72ec\u7acb\u5361\u7247\uff0c\u7528\u6237\u53ef\u4ee5\u6ed1\u52a8\u770b\\\"\u8fd9\u6b21\u9a91\u884c\u4efb\u610f\u6301\u7eed\u65f6\u957f\u7684\u6700\u5f3a\u5e73\u5747\u529f\u7387\\\"\u3002\u5305\u542b 2 \u4e2a\u65b0 endpoint + 3 \u4e2a\u65b0 schema + \u5c0f\u7a0b\u5e8f\u65b0\u7ec4\u4ef6 + 17 \u4e2a\u6d4b\u8bd5\u3002\\n- **\u4e09\u5ba1\u6536\u655b\u91cd\u6784\uff08commit f49a365\uff09**\uff1a\u62bd `power_curve.py` + `timeseries.py` \u4e24\u4e2a\u7eaf\u51fd\u6570\u6a21\u5757\uff0cservice.py \u4ece 1063 \u2192 665 \u884c\uff1bDurationOutOfRange \u5f02\u5e38\u7c7b\u578b\u5206\u6d41\u66ff\u4ee3\u4e2d\u6587\u5b50\u4e32\u8def\u7531\uff1bhide_power \u5171\u4eab helper \u5408\u5e76\uff1btimeseries \u7528 geo_math.haversine \u66ff\u4ee3\u5386\u53f2\u91cd\u590d\u5b9e\u73b0\u3002\\n- **\u4e09\u5ba1\u8bb0\u5f55**\uff1a\u4e24\u8f6e\u5171 6 reviewer \u6536\u655b\uff08Claude A spec-faithful + Claude B integration + Codex \u5f02\u6e90\uff09\uff0cCritical=0 / Important \u5168\u90e8\u4fee\u590d\u6216\u8fdb tech-debt\u3002\\n\\n## Test plan\\n\\n- [x] 832 \u5355\u5143\u6d4b\u8bd5\u672c\u5730\u5168\u8fc7 0 \u5931\u8d25\\n- [x] 17 \u4e2a\u65b0\u6d4b\u8bd5\u8986\u76d6\u529f\u7387\u66f2\u7ebf\u4e3b\u8def\u5f84 + \u9690\u79c1\u95e8\u7981 + \u7b97\u6cd5\u8fb9\u754c\\n- [x] \u771f\u673a\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u6253\u5f00\u8be6\u60c5\u9875\u9a8c\u8bc1\u529f\u7387\u66f2\u7ebf canvas \u6e32\u67d3\\n- [ ] \u957f\u9a91\u884c\uff08>4hr\uff09\u771f\u7528\u9a8c\u8bc1\uff08reviewer \u63d0\u5230\u7684 O(N\u00d7D) \u7b97\u6cd5 hot spot / \u5df2\u8bb0 tech-debt\uff09\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-fe3e96cdd721d720\",\n    \"kind\": \"review_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Starsky618/-velo/pull/1#discussion_r3317912310\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: review_comment\\nRepo: Starsky618/-velo\\nAuthor: chatgpt-codex-connector[bot] (Bot)\\nURL: https://github.com/Starsky618/-velo/pull/1#discussion_r3317912310\\nTitle: \\nBody:\\n**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub>  Cap elapsed span before allocating per-second power arrays**\\n\\nWhen an activity has a very large first-to-last timestamp span (for example a sparse multi-day recording or one bad future timestamp), this line allocates one list entry per elapsed second and the summary endpoint then scans that array for up to 1000 durations. T\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Starsky618/-velo", "source_id": "comment-chain-pattern-assumption_checks-318e0778669bea98", "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": "Starsky618/-velo", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: Starsky618/-velo"}, "properties": {"repobilityId": 328368, "scanner": "foundry_dataset", "fingerprint": "2c0ec2032ebfd7450f868970c06a12ae7a3a6396559a024a235b400f4ba5802c", "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": {"test_or_ci": 12, "api_or_backend": 9, "docs_or_claims": 12, "schema_or_data": 6, "ui_or_frontend": 25, "source_or_other": 3, "api_integration_gap": 1, "partial blueprint fit": 1, "human_feedback_general": 1, "data_schema_persistence": 2, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 5, "ambiguous_needs_more_evidence": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_no_linked_fix": 3, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 10, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 165, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 3, "thread_touches_file": 67, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 9, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 92, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 67, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 9, "comment_chain": 4, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#2", "issue_number": "2", "quality_tiers": {"unresolved": 6, "assumption_check": 3}, "repo_full_name": "Starsky618/-velo", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-014e0bdd450eff52", "graph_gold_label": "assumption_check", "changed_file_labels": {"test_or_ci": 84, "api_or_backend": 63, "docs_or_claims": 84, "schema_or_data": 42, "ui_or_frontend": 175, "source_or_other": 21}}, "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: Starsky618/-velo\nThread: Starsky618/-velo#2\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: Starsky618/-velo\nThread: Starsky618/-velo#2\nGraph gold label: assumption_check\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#2\nRepo: Starsky618/-velo\nIssue/PR number: 2\nGraph consistency label: assumption_check\nNodes: 92\nEdges: 165\nNode types: {'pr_file': 67, 'link_quality': 9, 'comment_chain': 4, 'comment': 3, 'alignment': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 67, 'comment_chain_touches_file': 48, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 9, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'thread_has_comment': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, '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: {'ui_or_frontend': 25, 'docs_or_claims': 12, 'test_or_ci': 12, 'api_or_backend': 9, 'schema_or_data': 6, 'not_resolved_or_not_observed': 5, 'source_or_other': 3, 'human_reported_issue_no_linked_fix': 3, 'blueprint_human_gap_alignment': 3, 'data_schema_persistence': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'api_integration_gap': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 10, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 6, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-f5cf49963a077faf", "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": "Starsky618/-velo", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: Starsky618/-velo"}, "properties": {"repobilityId": 328367, "scanner": "foundry_dataset", "fingerprint": "384ee4471f12c220fd0a1efd37bbc9985252d5c77eec0f7b58b6f3ada213ef4e", "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": {"test_or_ci": 2, "ui_workflow": 1, "api_or_backend": 1, "schema_or_data": 1, "ui_or_frontend": 10, "api_integration_gap": 2, "partial blueprint fit": 1, "data_schema_persistence": 1, "claimed_resolved_unverified": 5, "issue_or_pull_request_thread": 1, "blueprint_human_gap_alignment": 3, "human_reported_issue_then_fix_attempt": 3, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 10}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 98, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 2, "thread_touches_file": 14, "thread_has_pr_review": 1, "alignment_uses_comment": 3, "alignment_uses_finding": 3, "chain_has_link_quality": 8, "comment_aligns_finding": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 3, "comment_chain_links_commit": 3, "comment_chain_touches_file": 36, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 37, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 14, "alignment": 3, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 8, "comment_chain": 3, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "Starsky618/-velo#1", "issue_number": "1", "quality_tiers": {"assumption_check": 3, "weak_supervision": 5}, "repo_full_name": "Starsky618/-velo", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-7fbc7f43b1a2640a", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 12, "api_or_backend": 6, "schema_or_data": 6, "ui_or_frontend": 60}}, "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: weak_supervision_needs_review\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#1\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: Starsky618/-velo\nThread: Starsky618/-velo#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Starsky618/-velo#1\nRepo: Starsky618/-velo\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 37\nEdges: 98\nNode types: {'pr_file': 14, 'link_quality': 8, 'comment_chain': 3, 'alignment': 3, 'comment': 2, 'thread': 1, 'repo': 1, 'pr_review': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 36, 'thread_touches_file': 14, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 8, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'comment_chain_links_commit': 3, 'issue_chain_has_comment_chain': 3, 'alignment_uses_comment': 3, 'alignment_uses_finding': 3, 'comment_aligns_finding': 3, 'thread_has_comment': 2, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 10, 'claimed_resolved_unverified': 5, 'human_reported_issue_then_fix_attempt': 3, 'blueprint_human_gap_alignment': 3, 'api_integration_gap': 2, 'test_or_ci': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'api_or_backend': 1, 'schema_or_data': 1, 'ui_workflow': 1, 'partial blueprint fit': 1}\nOutcomes: {'claimed_resolved_unverified': 10}\nQuality tiers: {'weak_supervision': 5, 'assumption_check': 3}\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/Starsky618/-velo", "source_id": "graph-query-motif_query-db9d75fcc4a284dd", "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": "Starsky618/-velo", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Starsky618/-velo"}, "properties": {"repobilityId": 316406, "scanner": "foundry_dataset", "fingerprint": "df36ec25e358789be76017855478ff417bf60932d72df9dbe6d66cb8ead5c5e5", "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": "Starsky618/-velo#2", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "docs_or_claims", "human_feedback_general", "schema_or_data", "source_or_other", "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": "Starsky618/-velo", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-927f329e3e065104", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 3, "docs": 3, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 67, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 12, "api_or_backend": 9, "docs_or_claims": 12, "schema_or_data": 6, "ui_or_frontend": 25, "source_or_other": 3}, "linked_commit_count": 0, "helicopter_view_count": 2, "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": 4, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: Starsky618/-velo\nThread: Starsky618/-velo#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: Starsky618/-velo#2\nRepo: Starsky618/-velo\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 4\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 67\nLabels: {'human_feedback_general': 1, 'data_schema_persistence': 2, 'api_integration_gap': 1}\nPolarities: {'neutral': 1, 'bad': 3}\nChanged file labels: {'source_or_other': 3, 'ui_or_frontend': 25, 'api_or_backend': 9, 'schema_or_data': 6, 'docs_or_claims': 12, 'test_or_ci': 12}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-8df1b2c719e41d5a\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/Starsky618/-velo/pull/2\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: Starsky618/-velo\\nAuthor: Starsky618 (User)\\nURL: https://github.com/Starsky618/-velo/pull/2\\nTitle: Codex/meetup v1 task1\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a734f0f73c3980f1\",\n    \"kind\": \"review_comment\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Starsky618/-velo/pull/2#discussion_r3330866004\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: review_comment\\nRepo: Starsky618/-velo\\nAuthor: chatgpt-codex-connector[bot] (Bot)\\nURL: https://github.com/Starsky618/-velo/pull/2#discussion_r3330866004\\nTitle: \\nBody:\\n**<sub><sub>![P2 Badge](https://img.shields.io/badge/P2-yellow?style=flat)</sub></sub>  Convert meetup distances from meters before display**\\n\\nFor meetups, `snapshot_distance` is copied from the Segment/RouteBook database fields, which store meters, and the task template for these pages divides it by 1000 before appending `km`. With the current formatter, any real 42 km route renders as `42000.0 km` in the list (and the detail page uses the same assumption), making the primary route metric unusable for users.\\n\\nUseful? React with \ud83d\udc4d\u00a0/ \ud83d\udc4e.\"\n  },\n  {\n    \"id\": \"github-feedback-comment-03521c70293d1d60\",\n    \"kind\": \"review_comment\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Starsky618/-velo/pull/2#discussion_r3330866006\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: review_comment\\nRepo: Starsky618/-velo\\nAuthor: chatgpt-codex-connector[bot] (Bot)\\nURL: https://github.com/Starsky618/-velo/pull/2#discussion_r3330866006\\nTitle: \\nBody:\\n**<sub><\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Starsky618/-velo", "source_id": "comment-chain-pattern-bad_chains-4017ab9c919492f5", "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": "Starsky618/-velo", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-131745c3ad81c9a2", "level": "note", "message": {"text": "Possibly dead Python function: channel_1_routing"}, "properties": {"repobilityId": "e0d5ef0e3e7f36e9", "scanner": "scanner-primary", "fingerprint": "131745c3ad81c9a2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/user_prompt_mental_check.py:51"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-558af0507612df10", "level": "note", "message": {"text": "Possibly dead Python function: channel_4_sop"}, "properties": {"repobilityId": "c94466893cd14062", "scanner": "scanner-primary", "fingerprint": "558af0507612df10", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/user_prompt_mental_check.py:106"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8eb37d5895503864", "level": "note", "message": {"text": "Possibly dead Python function: channel_2_modules"}, "properties": {"repobilityId": "8212ffdb44cb5084", "scanner": "scanner-primary", "fingerprint": "8eb37d5895503864", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/user_prompt_mental_check.py:130"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d070cf73611da670", "level": "note", "message": {"text": "Possibly dead Python function: channel_3_prds"}, "properties": {"repobilityId": "d7619ad39a41af41", "scanner": "scanner-primary", "fingerprint": "d070cf73611da670", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/user_prompt_mental_check.py:223"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5553de0d83e23859", "level": "note", "message": {"text": "Possibly dead Python function: add_code"}, "properties": {"repobilityId": "04bae3c82e203cac", "scanner": "scanner-primary", "fingerprint": "5553de0d83e23859", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/gen_learning_notes.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b05338f212209cf3", "level": "note", "message": {"text": "Possibly dead Python function: check_rate_limit_by_ip"}, "properties": {"repobilityId": "da1ce5734c58b009", "scanner": "scanner-primary", "fingerprint": "b05338f212209cf3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/middleware/rate_limit.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a30278ab3ea499fa", "level": "note", "message": {"text": "Possibly dead Python function: generate_authorize_url"}, "properties": {"repobilityId": "a51869ee9cc7cc40", "scanner": "scanner-primary", "fingerprint": "a30278ab3ea499fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/strava/service_oauth.py:60"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f25108969c9e32c", "level": "note", "message": {"text": "Possibly dead Python function: round_1"}, "properties": {"repobilityId": "8b4906d98732c702", "scanner": "scanner-primary", "fingerprint": "1f25108969c9e32c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/training/training_load.py:101"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90393926a85be2b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 miniprogram/app.js:64"}, "properties": {"repobilityId": "4d80278a82162c3e", "scanner": "scanner-primary", "fingerprint": "90393926a85be2b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc6de695bc0b63c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 miniprogram/pages/profile/profile.js:341"}, "properties": {"repobilityId": "adca056a7f34e34c", "scanner": "scanner-primary", "fingerprint": "cc6de695bc0b63c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "cca0994ede3e7666", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-a19be77ce053a9e2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/prototypes/upload-reveal-first-rider.html:182"}, "properties": {"repobilityId": "8226c9db8e0a4f69", "scanner": "scanner-primary", "fingerprint": "a19be77ce053a9e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/prototypes/upload-reveal-first-rider.html"}, "region": {"startLine": 182}}}]}, {"ruleId": "scanner-efede1f7f8271f0b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in app/main.py:48"}, "properties": {"repobilityId": "6e34239fa74e6e6b", "scanner": "scanner-primary", "fingerprint": "efede1f7f8271f0b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/main.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cd843b74d3963b06", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-6ca81411e25b1664", "level": "note", "message": {"text": "Very large file: miniprogram/pages/meetup-create/meetup-create.js (1238 lines)"}, "properties": {"repobilityId": "9193a460b93b8ed9", "scanner": "scanner-primary", "fingerprint": "6ca81411e25b1664", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "e8360e5e9626bc51", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "714e696a0a21b160", "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": "55043e42dc80cbcc", "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": "110239e6fa90b68e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "476e50b95ea0c3bf", "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": "0daf1433a33b8fab", "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": "2780ff8d468f3ed6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 309}}}]}, {"ruleId": "scanner-cbb5857940ba0dc2", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: AGENTS.md"}, "properties": {"repobilityId": "e12c7213d5eadf3e", "scanner": "scanner-primary", "fingerprint": "cbb5857940ba0dc2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-909eb64265cce1c7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .codex/hooks.json"}, "properties": {"repobilityId": "6befa6c7c9baca08", "scanner": "scanner-primary", "fingerprint": "909eb64265cce1c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "codex_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".codex/hooks.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-6de8376bbdbdefa2", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/conftest.py:40"}, "properties": {"repobilityId": "520b59bc86d541b8", "scanner": "scanner-primary", "fingerprint": "6de8376bbdbdefa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b60988c5513e7343", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_ftp_estimator.py:72"}, "properties": {"repobilityId": "bf35def01a60a93c", "scanner": "scanner-primary", "fingerprint": "b60988c5513e7343", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc057e4308ba0eba", "level": "note", "message": {"text": "Legacy-named symbol `test_get_segment_detail_elevation_profile_null_for_legacy` in tests/test_segment_router_v5.py:140"}, "properties": {"repobilityId": "bec6fdc1a46dcfd9", "scanner": "scanner-primary", "fingerprint": "cc057e4308ba0eba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-87679b734c047192", "level": "note", "message": {"text": "Legacy-named symbol `at_old` in tests/test_strava_unbind.py:44"}, "properties": {"repobilityId": "149ac01052b2dd24", "scanner": "scanner-primary", "fingerprint": "87679b734c047192", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7bc5ce92fbaa4566", "level": "note", "message": {"text": "Legacy-named symbol `url_old` in tests/test_sync_route_images.py:54"}, "properties": {"repobilityId": "1dc1b5f9075156ac", "scanner": "scanner-primary", "fingerprint": "7bc5ce92fbaa4566", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-129dc957efd26d21", "level": "note", "message": {"text": "Legacy-named symbol `test_switch_athlete_cleans_old` in tests/strava/test_callback.py:187"}, "properties": {"repobilityId": "1555fb8a3dec5ddd", "scanner": "scanner-primary", "fingerprint": "129dc957efd26d21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aadb3af6e76108b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/backfill_phase5.py:51"}, "properties": {"repobilityId": "52e1afe41ebe9512", "scanner": "scanner-primary", "fingerprint": "aadb3af6e76108b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bff22d152ac2288", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/database.py:19"}, "properties": {"repobilityId": "4429b3f8d598ba4e", "scanner": "scanner-primary", "fingerprint": "4bff22d152ac2288", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11e0db538b2f8b2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/queue.py:54"}, "properties": {"repobilityId": "046627e08e4426f7", "scanner": "scanner-primary", "fingerprint": "11e0db538b2f8b2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2163e1d1b5300ef8", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/notification/models.py:48"}, "properties": {"repobilityId": "5cdfcd8263a77262", "scanner": "scanner-primary", "fingerprint": "2163e1d1b5300ef8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d7225af3903176b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/notification/progress_detector.py:192"}, "properties": {"repobilityId": "b63ccde888449737", "scanner": "scanner-primary", "fingerprint": "6d7225af3903176b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94e6ffce5843b03d", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/parsing/gpx_parser.py:44"}, "properties": {"repobilityId": "dc255e0f0ce0338b", "scanner": "scanner-primary", "fingerprint": "94e6ffce5843b03d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0addbfcfa4cdc8c", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/strava/service_oauth.py:85"}, "properties": {"repobilityId": "e2be20f9d9b0fae2", "scanner": "scanner-primary", "fingerprint": "e0addbfcfa4cdc8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1970e27b35aad7e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/strava/service_token.py:115"}, "properties": {"repobilityId": "bdd6e706d20c30f5", "scanner": "scanner-primary", "fingerprint": "1970e27b35aad7e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c7c7fa0c7e7b2de", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/strava/import_scheduler.py:489"}, "properties": {"repobilityId": "12e93fd76af75da6", "scanner": "scanner-primary", "fingerprint": "5c7c7fa0c7e7b2de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ac1ecb1e2e0af2b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/activity/worker.py:307"}, "properties": {"repobilityId": "5125f3ce2fd0ae7a", "scanner": "scanner-primary", "fingerprint": "7ac1ecb1e2e0af2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f310c9938e20e565", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/activity/ftp_estimator.py:155"}, "properties": {"repobilityId": "1fbecb62cc36a75e", "scanner": "scanner-primary", "fingerprint": "f310c9938e20e565", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69ac4131d3c3fe3e", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/activity/dedupe.py:89"}, "properties": {"repobilityId": "8eb05f1a463c9aa2", "scanner": "scanner-primary", "fingerprint": "69ac4131d3c3fe3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-926e0f55ccb89c29", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/activity/dedupe_service.py:103"}, "properties": {"repobilityId": "4c95ec53fc91b985", "scanner": "scanner-primary", "fingerprint": "926e0f55ccb89c29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76925740aceba16c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/activity/models.py:110"}, "properties": {"repobilityId": "f15aea8211921ee9", "scanner": "scanner-primary", "fingerprint": "76925740aceba16c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63ee4161a870cf32", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/activity/service.py:276"}, "properties": {"repobilityId": "f26f696098f59491", "scanner": "scanner-primary", "fingerprint": "63ee4161a870cf32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4cd049196abd7e1a", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/agent/segment_writer.py:105"}, "properties": {"repobilityId": "eb0646be8e5c120f", "scanner": "scanner-primary", "fingerprint": "4cd049196abd7e1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c83154586b2da367", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/admin/router.py:17"}, "properties": {"repobilityId": "2ec0348d60a6aad5", "scanner": "scanner-primary", "fingerprint": "c83154586b2da367", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-178355ba191c2c9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/segment/algorithms.py:162"}, "properties": {"repobilityId": "2e6ea07b0a0756b2", "scanner": "scanner-primary", "fingerprint": "178355ba191c2c9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6bdb2cbd06f73ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/segment/service_create.py:178"}, "properties": {"repobilityId": "12527d946ff22072", "scanner": "scanner-primary", "fingerprint": "f6bdb2cbd06f73ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b19fbe2299c95511", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/segment/service.py:91"}, "properties": {"repobilityId": "a81dcd06f91cafc9", "scanner": "scanner-primary", "fingerprint": "b19fbe2299c95511", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f30a50aecd607d19", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/user/router.py:158"}, "properties": {"repobilityId": "84d9edacdbb29f27", "scanner": "scanner-primary", "fingerprint": "f30a50aecd607d19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-313d20fb7532c857", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/user/schemas.py:25"}, "properties": {"repobilityId": "5881ef105244b5a8", "scanner": "scanner-primary", "fingerprint": "313d20fb7532c857", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d0f29a91a73f8c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/user/service_stats.py:185"}, "properties": {"repobilityId": "50235ff1be4edf54", "scanner": "scanner-primary", "fingerprint": "3d0f29a91a73f8c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f022773bad4dfa43", "level": "none", "message": {"text": "Commented-code block (15 lines) in miniprogram/components/ride-card/ride-card.js:8"}, "properties": {"repobilityId": "77f6abe2b16f7d7b", "scanner": "scanner-primary", "fingerprint": "f022773bad4dfa43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-708af1c3ed9f6018", "level": "none", "message": {"text": "Commented-code block (6 lines) in miniprogram/pages/profile/profile.js:3"}, "properties": {"repobilityId": "29c411f968cd22e7", "scanner": "scanner-primary", "fingerprint": "708af1c3ed9f6018", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a6d279d38377391", "level": "none", "message": {"text": "Commented-code block (6 lines) in miniprogram/pages/strava-auth/strava-auth.js:3"}, "properties": {"repobilityId": "18170eece9e520f3", "scanner": "scanner-primary", "fingerprint": "7a6d279d38377391", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2303eaaac7a5146f", "level": "none", "message": {"text": "Commented-code block (8 lines) in migrations/versions/phase5_v5_db_changes.py:240"}, "properties": {"repobilityId": "7c57b084a9f358ea", "scanner": "scanner-primary", "fingerprint": "2303eaaac7a5146f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5681ab3f7ca5a7c1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "59ce6a8e92433ea3", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "24629072ea04b760", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "34d36fd2381474ec", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3b2b9eaa3544e794", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3cde5fd5adf2feac", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7bf099d93a714150", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f853ff188700838c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "6c4e80d81b976164", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6c7c815e4bbe342", "level": "note", "message": {"text": "Unused endpoint: POST /mark-all-read"}, "properties": {"repobilityId": "926f45880651a1f0", "scanner": "scanner-primary", "fingerprint": "a6c7c815e4bbe342", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c09a15097f655e94", "level": "note", "message": {"text": "Unused endpoint: GET /honors"}, "properties": {"repobilityId": "31a7c13d85620746", "scanner": "scanner-primary", "fingerprint": "c09a15097f655e94", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d345fa90f5de3745", "level": "note", "message": {"text": "Unused endpoint: GET /authorize"}, "properties": {"repobilityId": "dff535532e52f61e", "scanner": "scanner-primary", "fingerprint": "d345fa90f5de3745", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdfb578618cf2542", "level": "note", "message": {"text": "Unused endpoint: GET /callback"}, "properties": {"repobilityId": "75a2dcd7b540a69c", "scanner": "scanner-primary", "fingerprint": "cdfb578618cf2542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-82c1c88192abd371", "level": "note", "message": {"text": "Unused endpoint: POST /unbind"}, "properties": {"repobilityId": "23d67fc52102b376", "scanner": "scanner-primary", "fingerprint": "82c1c88192abd371", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c251e9b16c727c7a", "level": "note", "message": {"text": "Unused endpoint: GET /webhook"}, "properties": {"repobilityId": "831c2415d2aa6b03", "scanner": "scanner-primary", "fingerprint": "c251e9b16c727c7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ae38010c60493f1", "level": "note", "message": {"text": "Unused endpoint: POST /webhook"}, "properties": {"repobilityId": "e87c1f84b7b8ec1e", "scanner": "scanner-primary", "fingerprint": "0ae38010c60493f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa413208496243a5", "level": "note", "message": {"text": "Unused endpoint: POST /sync"}, "properties": {"repobilityId": "31a44b81637c8124", "scanner": "scanner-primary", "fingerprint": "fa413208496243a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10c482e5eeb82c26", "level": "note", "message": {"text": "Unused endpoint: GET /import-progress"}, "properties": {"repobilityId": "ca2e06aa70f39ac6", "scanner": "scanner-primary", "fingerprint": "10c482e5eeb82c26", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "acfab9d306a6b736", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63476b3c45e5422f", "level": "note", "message": {"text": "Unused endpoint: GET /track-thumbs"}, "properties": {"repobilityId": "f682ac8b327c7384", "scanner": "scanner-primary", "fingerprint": "63476b3c45e5422f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f7949f21743dbadf", "level": "note", "message": {"text": "Unused endpoint: GET /{activity_id}"}, "properties": {"repobilityId": "092d3a9cf0652dbc", "scanner": "scanner-primary", "fingerprint": "f7949f21743dbadf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8569904d6658f30", "level": "note", "message": {"text": "Unused endpoint: PATCH /{activity_id}"}, "properties": {"repobilityId": "c978eee66cd69b49", "scanner": "scanner-primary", "fingerprint": "e8569904d6658f30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8238b9ef22a2673", "level": "note", "message": {"text": "Unused endpoint: PATCH /{activity_id}/privacy"}, "properties": {"repobilityId": "4bf7cc1eb9925f13", "scanner": "scanner-primary", "fingerprint": "b8238b9ef22a2673", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fc0c8d9287a72b37", "level": "note", "message": {"text": "Unused endpoint: DELETE /{activity_id}"}, "properties": {"repobilityId": "7249ff8a752ca2bb", "scanner": "scanner-primary", "fingerprint": "fc0c8d9287a72b37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b42fed5c780b4f45", "level": "note", "message": {"text": "Unused endpoint: GET /{activity_id}/timeseries"}, "properties": {"repobilityId": "1733b95ef9e4dc7e", "scanner": "scanner-primary", "fingerprint": "b42fed5c780b4f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd167621e9b9ef9c", "level": "note", "message": {"text": "Unused endpoint: GET /{activity_id}/power-curve"}, "properties": {"repobilityId": "017903bbc6f77279", "scanner": "scanner-primary", "fingerprint": "fd167621e9b9ef9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5add2e878349445e", "level": "note", "message": {"text": "Unused endpoint: GET /{activity_id}/power-curve/effort"}, "properties": {"repobilityId": "48d988b9ed010e0c", "scanner": "scanner-primary", "fingerprint": "5add2e878349445e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1d0eec4a5068894", "level": "note", "message": {"text": "Unused endpoint: GET /{activity_id}/status"}, "properties": {"repobilityId": "7512b984386ab7b2", "scanner": "scanner-primary", "fingerprint": "c1d0eec4a5068894", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "085016eb55e4c5dd", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d35d2f0f85eadfc", "level": "note", "message": {"text": "Unused endpoint: POST /tencent-direction"}, "properties": {"repobilityId": "2137fea1de0a8000", "scanner": "scanner-primary", "fingerprint": "7d35d2f0f85eadfc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92a180f81c027dbd", "level": "note", "message": {"text": "Unused endpoint: GET /activity-candidates"}, "properties": {"repobilityId": "b2c70d765ddc0d42", "scanner": "scanner-primary", "fingerprint": "92a180f81c027dbd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f765d50aafdcfe7a", "level": "note", "message": {"text": "Unused endpoint: GET /{route_book_id}"}, "properties": {"repobilityId": "2499b0c7ca37569b", "scanner": "scanner-primary", "fingerprint": "f765d50aafdcfe7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de36ab5b446f61b8", "level": "note", "message": {"text": "Unused endpoint: DELETE /{route_book_id}"}, "properties": {"repobilityId": "36619f2bf330c24b", "scanner": "scanner-primary", "fingerprint": "de36ab5b446f61b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-afe1b40759fe160c", "level": "note", "message": {"text": "Unused endpoint: GET /{guide_id}"}, "properties": {"repobilityId": "dae92fa8cd67956c", "scanner": "scanner-primary", "fingerprint": "afe1b40759fe160c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9be4d4de0fb412ab", "level": "note", "message": {"text": "Unused endpoint: GET /my-draft"}, "properties": {"repobilityId": "78671e6bda7a9c72", "scanner": "scanner-primary", "fingerprint": "9be4d4de0fb412ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8456eca76070a1a7", "level": "note", "message": {"text": "Unused endpoint: GET /mine"}, "properties": {"repobilityId": "9c400325aaa3ba7e", "scanner": "scanner-primary", "fingerprint": "8456eca76070a1a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19197263ee360f19", "level": "note", "message": {"text": "Unused endpoint: GET /favorite-places"}, "properties": {"repobilityId": "d196147e4e931a6e", "scanner": "scanner-primary", "fingerprint": "19197263ee360f19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa7ef6f2567a056f", "level": "note", "message": {"text": "Unused endpoint: POST /favorite-places"}, "properties": {"repobilityId": "f64238b25e339bef", "scanner": "scanner-primary", "fingerprint": "fa7ef6f2567a056f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-234742641ae08569", "level": "note", "message": {"text": "Unused endpoint: DELETE /favorite-places/{place_id}"}, "properties": {"repobilityId": "c7c8a96dcd687246", "scanner": "scanner-primary", "fingerprint": "234742641ae08569", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be6dd610b94d47e9", "level": "note", "message": {"text": "Unused endpoint: GET /place-suggestions"}, "properties": {"repobilityId": "65642342d42b3b76", "scanner": "scanner-primary", "fingerprint": "be6dd610b94d47e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05b7445ee88b39b5", "level": "note", "message": {"text": "Unused endpoint: GET /{meetup_id}/participants"}, "properties": {"repobilityId": "a9ce0e5de69d52f3", "scanner": "scanner-primary", "fingerprint": "05b7445ee88b39b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d22c30ba5f874a2c", "level": "note", "message": {"text": "Unused endpoint: GET /{meetup_id}/report"}, "properties": {"repobilityId": "b365ca4afbc46b15", "scanner": "scanner-primary", "fingerprint": "d22c30ba5f874a2c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b60701adbc838577", "level": "note", "message": {"text": "Unused endpoint: GET /{meetup_id}"}, "properties": {"repobilityId": "0097b65059e09db2", "scanner": "scanner-primary", "fingerprint": "b60701adbc838577", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9543b62e73aa863a", "level": "note", "message": {"text": "Unused endpoint: PATCH /{meetup_id}"}, "properties": {"repobilityId": "523c1c6f35661c54", "scanner": "scanner-primary", "fingerprint": "9543b62e73aa863a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8dab7dfe9b589f12", "level": "note", "message": {"text": "Unused endpoint: POST /{meetup_id}/publish"}, "properties": {"repobilityId": "44437f4bfd4d5335", "scanner": "scanner-primary", "fingerprint": "8dab7dfe9b589f12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8028595d857a01ac", "level": "note", "message": {"text": "Unused endpoint: POST /{meetup_id}/cancel"}, "properties": {"repobilityId": "fcaad4b724564124", "scanner": "scanner-primary", "fingerprint": "8028595d857a01ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bef308a6e92002db", "level": "note", "message": {"text": "Unused endpoint: POST /{meetup_id}/join"}, "properties": {"repobilityId": "f04972a17db19808", "scanner": "scanner-primary", "fingerprint": "bef308a6e92002db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33e6f6cfb2faa8da", "level": "note", "message": {"text": "Unused endpoint: DELETE /{meetup_id}/leave"}, "properties": {"repobilityId": "fb312c6e9b5978b9", "scanner": "scanner-primary", "fingerprint": "33e6f6cfb2faa8da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23bf1dd07188947e", "level": "note", "message": {"text": "Unused endpoint: GET /{meetup_id}/media"}, "properties": {"repobilityId": "55e4e1fdbb733383", "scanner": "scanner-primary", "fingerprint": "23bf1dd07188947e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7dd12e054f0dbff", "level": "note", "message": {"text": "Unused endpoint: POST /{meetup_id}/media"}, "properties": {"repobilityId": "3d7ad23b4aabb774", "scanner": "scanner-primary", "fingerprint": "a7dd12e054f0dbff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac1d388a50b57e2f", "level": "note", "message": {"text": "Unused endpoint: DELETE /{meetup_id}/media/{media_id}"}, "properties": {"repobilityId": "e59f8211d10c94a4", "scanner": "scanner-primary", "fingerprint": "ac1d388a50b57e2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e2b87d4f8d4263b", "level": "note", "message": {"text": "Unused endpoint: DELETE /{meetup_id}"}, "properties": {"repobilityId": "e0a3f33d9cf93720", "scanner": "scanner-primary", "fingerprint": "0e2b87d4f8d4263b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-945011d03d3bdc5b", "level": "note", "message": {"text": "Unused endpoint: GET /whoami"}, "properties": {"repobilityId": "1d52c76965cd2e1b", "scanner": "scanner-primary", "fingerprint": "945011d03d3bdc5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41aed1f30debba73", "level": "note", "message": {"text": "Unused endpoint: GET /curation-pool"}, "properties": {"repobilityId": "453719d412400d4b", "scanner": "scanner-primary", "fingerprint": "41aed1f30debba73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-145273de74aafb4e", "level": "note", "message": {"text": "Unused endpoint: PATCH /curation-pool/{pool_id}"}, "properties": {"repobilityId": "9276ee9e11519f90", "scanner": "scanner-primary", "fingerprint": "145273de74aafb4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7933f6bc8a1455ff", "level": "note", "message": {"text": "Unused endpoint: POST /ai/segment-drafts/{segment_id}/generate"}, "properties": {"repobilityId": "17abc407929b9afc", "scanner": "scanner-primary", "fingerprint": "7933f6bc8a1455ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a6a3eee7f7356f0", "level": "note", "message": {"text": "Unused endpoint: GET /ai/segment-drafts"}, "properties": {"repobilityId": "42e990e281782663", "scanner": "scanner-primary", "fingerprint": "8a6a3eee7f7356f0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-586b7730c7ab8f31", "level": "note", "message": {"text": "Unused endpoint: PATCH /ai/segment-drafts/{draft_id}"}, "properties": {"repobilityId": "b8d4182a7849d052", "scanner": "scanner-primary", "fingerprint": "586b7730c7ab8f31", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}