{"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: vzeman/tarmac", "shortDescription": {"text": "Foundry mined unresolved feedback: vzeman/tarmac"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#1\nRepo: vzeman/tarmac\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'threa"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: vzeman/tarmac", "shortDescription": {"text": "Foundry mined blueprint gap alignment: vzeman/tarmac"}, "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: weak_supervision_needs_review\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#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: vzeman/tarmac\nThread: vzeman/tarmac#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#2\nRepo: vzeman/tarmac\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 20\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, "}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: vzeman/tarmac", "shortDescription": {"text": "Foundry mined assumption checks: vzeman/tarmac"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_artifact_without_verification_graph\nReasons: source_graph_has_real_artifacts, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: vzeman/tarmac#2\nRepo: vzeman/tarmac\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b7412f2c727765fc\",\n    \"kind\": \"issue_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/vzeman/tarmac/issues/2\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: issue_body\\nRepo: vzeman/tarmac\\n"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: vzeman/tarmac", "shortDescription": {"text": "Foundry mined test ci gap after feedback: vzeman/tarmac"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#2\nRepo: vzeman/tarmac\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 20\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge t"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "scanner-66d3a7ab6358334c", "name": "Possibly dead Python function: fake_load_model_context", "shortDescription": {"text": "Possibly dead Python function: fake_load_model_context"}, "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-3b3b3f5de13e9c15", "name": "Possibly dead Python function: fake_analyze_frames", "shortDescription": {"text": "Possibly dead Python function: fake_analyze_frames"}, "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-961ccdf32d8a7572", "name": "Possibly dead Python function: fake_confirm_crack_for_image", "shortDescription": {"text": "Possibly dead Python function: fake_confirm_crack_for_image"}, "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-9b7bfec586453e27", "name": "Possibly dead Python function: download_rtk", "shortDescription": {"text": "Possibly dead Python function: download_rtk"}, "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-4f7b54c5119ec00b", "name": "Possibly dead Python function: download_rscd", "shortDescription": {"text": "Possibly dead Python function: download_rscd"}, "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-5a4fe1715802799f", "name": "Possibly dead Python function: annotations_json_summary", "shortDescription": {"text": "Possibly dead Python function: annotations_json_summary"}, "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-fee495e45a8d5648", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "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-113c21b9d13650e0", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "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-9e1c930514b860fa", "name": "Possibly dead Python function: resample_track", "shortDescription": {"text": "Possibly dead Python function: resample_track"}, "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-7e356876eb17a88d", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "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-0057b01f3836432d", "name": "Possibly dead Python function: collate_defect_embedding_batch", "shortDescription": {"text": "Possibly dead Python function: collate_defect_embedding_batch"}, "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-f62d30528a526d0b", "name": "Possibly dead Python function: labels_to_multihot", "shortDescription": {"text": "Possibly dead Python function: labels_to_multihot"}, "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-cb36647115cbc90e", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "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-1c4054507b25c656", "name": "Possibly dead Python function: forward", "shortDescription": {"text": "Possibly dead Python function: forward"}, "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-6525f1fa93b78384", "name": "Possibly dead Python function: repair_priority_rules_table", "shortDescription": {"text": "Possibly dead Python function: repair_priority_rules_table"}, "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-deee1ba8cc8e6748", "name": "Possibly dead Python function: embeddable_scatter_html", "shortDescription": {"text": "Possibly dead Python function: embeddable_scatter_html"}, "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-a89663aff0003201", "name": "Possibly dead Python function: collate_embedding_batch", "shortDescription": {"text": "Possibly dead Python function: collate_embedding_batch"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d559661bdcb2703a", "name": "Very large file: src/tarmac/survey/strip.py (1610 lines)", "shortDescription": {"text": "Very large file: src/tarmac/survey/strip.py (1610 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-cf2f369001f1c8f2", "name": "Very large file: src/tarmac/survey/survey.py (1282 lines)", "shortDescription": {"text": "Very large file: src/tarmac/survey/survey.py (1282 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 66 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 24 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "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-832604770d89bcc8", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_crackseg.py:21", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_crackseg.py:21"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-703c610f07b718e9", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_visualize.py:118", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_visualize.py:118"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4b39707999a23b9", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_assess.py:76", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_assess.py:76"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-019af05a1719eb5f", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_gps_sources.py:145", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_gps_sources.py:145"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1d889f9a9721c81", "name": "Commented-code block (5 lines) in src/tarmac/datasets/crackairport.py:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/tarmac/datasets/crackairport.py:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17b1b22aac867a30", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/crackforest.py:147", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/crackforest.py:147"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6739ed9d71e2aba3", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/codebrim.py:359", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/codebrim.py:359"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab15e84f77a2f476", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/stream.py:75", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/stream.py:75"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b15fe952c76c6ae", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/telemetry.py:643", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/telemetry.py:643"}, "fullDescription": {"text": "`subprocess.check_output(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b919fc222f2762ab", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/train/domain_adapt.py:167", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/train/domain_adapt.py:167"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3ef3c3a2b60572a", "name": "Legacy-named symbol `_save_best_copy` in src/tarmac/train/supcon.py:332", "shortDescription": {"text": "Legacy-named symbol `_save_best_copy` in src/tarmac/train/supcon.py:332"}, "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-6f26515647eea3ce", "name": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/inference/analyze.py:232", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/inference/analyze.py:232"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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:\nsrc/tarmac/cli.py:embed_defects, src/tarmac/cli.py:embed\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}}]}}, "automationDetails": {"id": "repobility/22467"}, "properties": {"repository": "vzeman/tarmac", "repoUrl": "https://github.com/vzeman/tarmac", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: vzeman/tarmac"}, "properties": {"repobilityId": 371357, "scanner": "foundry_dataset", "fingerprint": "01bf44f1a878b93a877c92efa75f4f45c29c667322bc7c718e52dbbcdd7356b9", "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": {"human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "vzeman/tarmac#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "vzeman/tarmac", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-20200cf572d07c18", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#1\nRepo: vzeman/tarmac\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 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/vzeman/tarmac", "source_id": "graph-query-motif_query-deac9212f84eea22", "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": "vzeman/tarmac", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: vzeman/tarmac"}, "properties": {"repobilityId": 357284, "scanner": "foundry_dataset", "fingerprint": "0f8119c13e583e54536b04cf3e72c9e6133dd712cd0320485b0fb65b73660087", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 1, "test_ci_gap": 1, "weak blueprint fit": 1, "partial blueprint fit": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_alignment": 2, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "vzeman/tarmac#2", "issue_number": "2", "quality_tiers": {"assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "vzeman/tarmac", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-e18cb362a4f011ed", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: weak_supervision_needs_review\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#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: vzeman/tarmac\nThread: vzeman/tarmac#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#2\nRepo: vzeman/tarmac\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 20\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_alignment': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'weak blueprint fit': 1, 'partial blueprint fit': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vzeman/tarmac", "source_id": "graph-query-motif_query-5fe283431c9b9baf", "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": "vzeman/tarmac", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: vzeman/tarmac"}, "properties": {"repobilityId": 313671, "scanner": "foundry_dataset", "fingerprint": "086a8662abd6c610a02d2b5243f6683338d7143ddceb55d5840ef623a1103228", "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": "vzeman/tarmac#2", "human_labels": ["test_ci_gap"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "vzeman/tarmac", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-3f18e5dc6c91916b", "helicopter_views": {}, "artifact_families": {"docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_artifact_without_verification_graph", "changed_file_labels": {}, "linked_commit_count": 1, "helicopter_view_count": 0, "source_artifact_count": 1, "classification_reasons": ["source_graph_has_real_artifacts", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 0, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_artifact_without_verification_graph\nReasons: source_graph_has_real_artifacts, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: vzeman/tarmac#2\nRepo: vzeman/tarmac\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b7412f2c727765fc\",\n    \"kind\": \"issue_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/vzeman/tarmac/issues/2\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: issue_body\\nRepo: vzeman/tarmac\\nAuthor: vzeman (User)\\nURL: https://github.com/vzeman/tarmac/issues/2\\nTitle: Epic: Surface Management System \u2014 multi-tenant portal, mobile upload, temporal change monitoring & deterioration forecasting\\nBody:\\n## Epic: Surface Management System (SMS) \u2014 multi-tenant SaaS portal + mobile upload + temporal monitoring + forecasting\\n\\nA web portal + backend that turns the Tarmac analysis pipeline and the RoadSurvey Recorder app into a full **surface-condition management system** for organizations (cities, municipalities, road authorities, airports, bridge/building owners). It ingests survey sessions (from the mobile app or manual/drone uploads), analyzes them with our DINOv3 pipeline, tracks how each surface changes over time, forecasts deterioration (e.g. crack growth), and helps operators prioritize repairs \u2014 across multiple surface types (streets, highways, bridges, buildings, runways), grounded in Slovak/EU norms.\\n\\n> Legend: **[R]** = explicitly requested \u00b7 **[+]** = proposed addition to make the system actually useful. Please review the **[+]** items and the Open Questions.\\n\\n---\\n\\n### 1. Goals\\n- One place fo\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-23494405855021a8\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: vzeman/tarmac\nGraph label: source_artifact_without_verification_graph\nNodes: 5\nEdges: 6\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"repo\": 1, \"source_artifact\": 1, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_source_artifact\": 1, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"docs\": 1}\nHelicopter views: {}\nBundle labels: {\"source_backed_graph_pattern_bundle\": 1}\nCo-occurrence labels: {\"curriculum_gap_cluster\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vzeman/tarmac", "source_id": "comment-chain-pattern-assumption_checks-c1f5763949f0c17d", "synthetic": false, "gold_label": "", "graph_label": "source_artifact_without_verification_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": "vzeman/tarmac", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: vzeman/tarmac"}, "properties": {"repobilityId": 313670, "scanner": "foundry_dataset", "fingerprint": "c55a4a4a485fac74688db690b78ef7658d9e0cf9cf793102da2966a007707f1a", "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": "vzeman/tarmac#1", "human_labels": ["human_feedback_general"], "issue_number": "1", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "vzeman/tarmac", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-23b8ac6369665af4", "helicopter_views": {}, "artifact_families": {"docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_artifact_without_verification_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 0, "source_artifact_count": 1, "classification_reasons": ["source_graph_has_real_artifacts", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 0, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_artifact_without_verification_graph\nReasons: source_graph_has_real_artifacts, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: vzeman/tarmac#1\nRepo: vzeman/tarmac\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-db002637c6877917\",\n    \"kind\": \"issue_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/vzeman/tarmac/issues/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_body\\nRepo: vzeman/tarmac\\nAuthor: vzeman (User)\\nURL: https://github.com/vzeman/tarmac/issues/1\\nTitle: Trhliny vo vozovke\\nBody:\\nhttps://www.ssc.sk/files/documents/technicke-predpisy/rozborove_ulohy/ru%20rexlex_trhliny_2025.pdf\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-9b5c67e1e66b4922\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: vzeman/tarmac\nGraph label: source_artifact_without_verification_graph\nNodes: 5\nEdges: 6\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"repo\": 1, \"source_artifact\": 1, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_source_artifact\": 1, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"docs\": 1}\nHelicopter views: {}\nBundle labels: {\"source_backed_graph_pattern_bundle\": 1}\nCo-occurrence labels: {\"curriculum_gap_cluster\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vzeman/tarmac", "source_id": "comment-chain-pattern-assumption_checks-f380f3918a99ad71", "synthetic": false, "gold_label": "", "graph_label": "source_artifact_without_verification_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": "vzeman/tarmac", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: vzeman/tarmac"}, "properties": {"repobilityId": 341481, "scanner": "foundry_dataset", "fingerprint": "d631be1cff567e1055e808f710fc6b1fc797770a1e9b95289f909a19789ebb89", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"bug_fix": 1, "test_ci_gap": 1, "weak blueprint fit": 1, "partial blueprint fit": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "blueprint_human_gap_alignment": 2, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "alignment_uses_comment": 2, "alignment_uses_finding": 2, "chain_has_link_quality": 5, "comment_aligns_finding": 2, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "alignment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 1, "blueprint_finding": 2}, "query_type": "motif_query", "thread_key": "vzeman/tarmac#2", "issue_number": "2", "quality_tiers": {"assumption_check": 2, "weak_supervision": 3}, "repo_full_name": "vzeman/tarmac", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-f9cb64cf3a845eb4", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: vzeman/tarmac\nThread: vzeman/tarmac#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: vzeman/tarmac#2\nRepo: vzeman/tarmac\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 16\nEdges: 20\nNode types: {'link_quality': 5, 'alignment': 2, 'blueprint_finding': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'alignment_uses_comment': 2, 'alignment_uses_finding': 2, 'comment_aligns_finding': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'blueprint_human_gap_alignment': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'weak blueprint fit': 1, 'partial blueprint fit': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'weak_supervision': 3, 'assumption_check': 2}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/vzeman/tarmac", "source_id": "graph-query-motif_query-edc9cd249e779cdf", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "vzeman/tarmac", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-66d3a7ab6358334c", "level": "note", "message": {"text": "Possibly dead Python function: fake_load_model_context"}, "properties": {"repobilityId": "c2ee32aceef5bb90", "scanner": "scanner-primary", "fingerprint": "66d3a7ab6358334c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke_gps_sources.py:193"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3b3b3f5de13e9c15", "level": "note", "message": {"text": "Possibly dead Python function: fake_analyze_frames"}, "properties": {"repobilityId": "7eee29dfb10b00e9", "scanner": "scanner-primary", "fingerprint": "3b3b3f5de13e9c15", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke_gps_sources.py:213"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-961ccdf32d8a7572", "level": "note", "message": {"text": "Possibly dead Python function: fake_confirm_crack_for_image"}, "properties": {"repobilityId": "8e3de488e2affe3e", "scanner": "scanner-primary", "fingerprint": "961ccdf32d8a7572", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke_gps_sources.py:229"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b7bfec586453e27", "level": "note", "message": {"text": "Possibly dead Python function: download_rtk"}, "properties": {"repobilityId": "d7d214b0e90d4f39", "scanner": "scanner-primary", "fingerprint": "9b7bfec586453e27", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/datasets/rtk.py:86"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f7b54c5119ec00b", "level": "note", "message": {"text": "Possibly dead Python function: download_rscd"}, "properties": {"repobilityId": "fdb23d2e2f3acbe9", "scanner": "scanner-primary", "fingerprint": "4f7b54c5119ec00b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/datasets/rscd.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5a4fe1715802799f", "level": "note", "message": {"text": "Possibly dead Python function: annotations_json_summary"}, "properties": {"repobilityId": "0cf935fbd34fe693", "scanner": "scanner-primary", "fingerprint": "5a4fe1715802799f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/datasets/codebrim.py:382"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fee495e45a8d5648", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "fee495e45a8d5648", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/crack/model.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-113c21b9d13650e0", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "113c21b9d13650e0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/crack/seg_head.py:150"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9e1c930514b860fa", "level": "note", "message": {"text": "Possibly dead Python function: resample_track"}, "properties": {"repobilityId": "0cd1aa926c7e9902", "scanner": "scanner-primary", "fingerprint": "9e1c930514b860fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/survey/gps_sources.py:216"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e356876eb17a88d", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "7e356876eb17a88d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/defect/model.py:17"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0057b01f3836432d", "level": "note", "message": {"text": "Possibly dead Python function: collate_defect_embedding_batch"}, "properties": {"repobilityId": "f859c5e0f4e4078c", "scanner": "scanner-primary", "fingerprint": "0057b01f3836432d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/defect/embeddings.py:68"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f62d30528a526d0b", "level": "note", "message": {"text": "Possibly dead Python function: labels_to_multihot"}, "properties": {"repobilityId": "add5dfa92bef061c", "scanner": "scanner-primary", "fingerprint": "f62d30528a526d0b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/defect/embeddings.py:216"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb36647115cbc90e", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "cb36647115cbc90e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/train/domain_adapt.py:123"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1c4054507b25c656", "level": "note", "message": {"text": "Possibly dead Python function: forward"}, "properties": {"repobilityId": "ea414cce7f8e5874", "scanner": "scanner-primary", "fingerprint": "1c4054507b25c656", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/train/supcon.py:105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6525f1fa93b78384", "level": "note", "message": {"text": "Possibly dead Python function: repair_priority_rules_table"}, "properties": {"repobilityId": "eb98f2edf0c4d8c1", "scanner": "scanner-primary", "fingerprint": "6525f1fa93b78384", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/inference/assess.py:459"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-deee1ba8cc8e6748", "level": "note", "message": {"text": "Possibly dead Python function: embeddable_scatter_html"}, "properties": {"repobilityId": "dbf7d0e18227c2c6", "scanner": "scanner-primary", "fingerprint": "deee1ba8cc8e6748", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/report/umap_html.py:139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a89663aff0003201", "level": "note", "message": {"text": "Possibly dead Python function: collate_embedding_batch"}, "properties": {"repobilityId": "990291ac8d24a149", "scanner": "scanner-primary", "fingerprint": "a89663aff0003201", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/tarmac/embedding/embedder.py:82"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d559661bdcb2703a", "level": "note", "message": {"text": "Very large file: src/tarmac/survey/strip.py (1610 lines)"}, "properties": {"repobilityId": "3c2c69a005c1316f", "scanner": "scanner-primary", "fingerprint": "d559661bdcb2703a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cf2f369001f1c8f2", "level": "note", "message": {"text": "Very large file: src/tarmac/survey/survey.py (1282 lines)"}, "properties": {"repobilityId": "7c5bd6888fb46fd6", "scanner": "scanner-primary", "fingerprint": "cf2f369001f1c8f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "4b03aa89aad97def", "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": "28c15a686a4331b7", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "8a7adbbacfb8559a", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a8384d5ece9df481", "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": "6b84405f23a8b028", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-832604770d89bcc8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_crackseg.py:21"}, "properties": {"repobilityId": "621570d5dcc98449", "scanner": "scanner-primary", "fingerprint": "832604770d89bcc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-703c610f07b718e9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_visualize.py:118"}, "properties": {"repobilityId": "a95e26fc6625234a", "scanner": "scanner-primary", "fingerprint": "703c610f07b718e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4b39707999a23b9", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_assess.py:76"}, "properties": {"repobilityId": "5212307732f27d44", "scanner": "scanner-primary", "fingerprint": "d4b39707999a23b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-019af05a1719eb5f", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/smoke_gps_sources.py:145"}, "properties": {"repobilityId": "defface415c7047f", "scanner": "scanner-primary", "fingerprint": "019af05a1719eb5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1d889f9a9721c81", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/tarmac/datasets/crackairport.py:26"}, "properties": {"repobilityId": "95c98875053c1fd5", "scanner": "scanner-primary", "fingerprint": "b1d889f9a9721c81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17b1b22aac867a30", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/crackforest.py:147"}, "properties": {"repobilityId": "53d7d4fd3ca2b63f", "scanner": "scanner-primary", "fingerprint": "17b1b22aac867a30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6739ed9d71e2aba3", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/datasets/codebrim.py:359"}, "properties": {"repobilityId": "3ed9f7596df2616d", "scanner": "scanner-primary", "fingerprint": "6739ed9d71e2aba3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab15e84f77a2f476", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/stream.py:75"}, "properties": {"repobilityId": "43ae59c24360dfbf", "scanner": "scanner-primary", "fingerprint": "ab15e84f77a2f476", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1b15fe952c76c6ae", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/survey/telemetry.py:643"}, "properties": {"repobilityId": "3cfbb327c691c595", "scanner": "scanner-primary", "fingerprint": "1b15fe952c76c6ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b919fc222f2762ab", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/train/domain_adapt.py:167"}, "properties": {"repobilityId": "ece6191334115b73", "scanner": "scanner-primary", "fingerprint": "b919fc222f2762ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3ef3c3a2b60572a", "level": "note", "message": {"text": "Legacy-named symbol `_save_best_copy` in src/tarmac/train/supcon.py:332"}, "properties": {"repobilityId": "16cebc107353a55f", "scanner": "scanner-primary", "fingerprint": "a3ef3c3a2b60572a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6f26515647eea3ce", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 src/tarmac/inference/analyze.py:232"}, "properties": {"repobilityId": "1664301c829d4154", "scanner": "scanner-primary", "fingerprint": "6f26515647eea3ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5404c06a4a9276d9", "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": "b92ee856ec354774", "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": "5a0efeecc118e8cb", "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": "3b9e1a312d0025db", "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": "d181a2ecbf347410", "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": "ce9b07a34a4303bc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}