{"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: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#9\nRepo: QZEE777/LayoutForge\nIssue/PR number: 9\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_quali"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\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\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#9\nRepo: QZEE777/LayoutForge\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-5b46d26b4133ca9a\",\n    \"kind\": \"issue_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/9\",\n    \"text\": \"GitHub feedba"}, "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: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined test ci gap after feedback: QZEE777/LayoutForge"}, "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: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#11\nRepo: QZEE777/LayoutForge\nIssue/PR number: 11\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_qualit"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined schema ui api mismatch: QZEE777/LayoutForge"}, "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: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#4\nRepo: QZEE777/LayoutForge\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comm"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#6\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#6\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d683d151613d5126\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"u"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#26\nRepo: QZEE777/LayoutForge\nIssue/PR number: 26\nGraph consistency label: needs_more_evidence\nNodes: 19\nEdges: 41\nNode types: {'link_quality': 5, 'pr_file': 4, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge typ"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: QZEE777/LayoutForge", "shortDescription": {"text": "Foundry mined mock as real or placeholder: QZEE777/LayoutForge"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#20\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#20\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#20\nRepo: QZEE777/LayoutForge\nIssue/PR number: 20\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-9ca44585510826af", "name": "Possibly dead Python function: delete_local", "shortDescription": {"text": "Possibly dead Python function: delete_local"}, "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-ac951e2970b7a399", "name": "Possibly dead Python function: set_annotated_path", "shortDescription": {"text": "Possibly dead Python function: set_annotated_path"}, "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-5ba8e3a413f67f88", "name": "Possibly dead Python function: set_annotated_status", "shortDescription": {"text": "Possibly dead Python function: set_annotated_status"}, "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-c11f80f51b415002", "name": "Possibly dead Python function: rule_image_bleed", "shortDescription": {"text": "Possibly dead Python function: rule_image_bleed"}, "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-7e04add283b2a045", "name": "Possibly dead Python function: rule_image_resolution", "shortDescription": {"text": "Possibly dead Python function: rule_image_resolution"}, "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-b909cfdaeef44adb", "name": "Possibly dead Python function: rule_image_color_mode", "shortDescription": {"text": "Possibly dead Python function: rule_image_color_mode"}, "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-0feec3f83cea4825", "name": "Possibly dead Python function: rule_image_placement", "shortDescription": {"text": "Possibly dead Python function: rule_image_placement"}, "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-a09c851fa3eecdb7", "name": "Possibly dead Python function: rule_min_page_count", "shortDescription": {"text": "Possibly dead Python function: rule_min_page_count"}, "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-31efefa60f2185be", "name": "Possibly dead Python function: rule_max_page_count", "shortDescription": {"text": "Possibly dead Python function: rule_max_page_count"}, "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-207207f3c2e99379", "name": "Possibly dead Python function: rule_odd_page_count", "shortDescription": {"text": "Possibly dead Python function: rule_odd_page_count"}, "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-df45e034b9dc56bb", "name": "Possibly dead Python function: rule_allowed_trim_sizes", "shortDescription": {"text": "Possibly dead Python function: rule_allowed_trim_sizes"}, "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-8a650b2e75445147", "name": "Possibly dead Python function: rule_mixed_page_sizes", "shortDescription": {"text": "Possibly dead Python function: rule_mixed_page_sizes"}, "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-13740f73ee878cff", "name": "Possibly dead Python function: rule_bleed_validation", "shortDescription": {"text": "Possibly dead Python function: rule_bleed_validation"}, "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-695968d7bcd0e078", "name": "Possibly dead Python function: rule_pdf_version", "shortDescription": {"text": "Possibly dead Python function: rule_pdf_version"}, "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-b81fded272608b51", "name": "Possibly dead Python function: rule_transparency_flattening", "shortDescription": {"text": "Possibly dead Python function: rule_transparency_flattening"}, "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-ed067b70174c712f", "name": "Possibly dead Python function: rule_interactive_elements", "shortDescription": {"text": "Possibly dead Python function: rule_interactive_elements"}, "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-6e2447b8547556ef", "name": "Possibly dead Python function: rule_orientation_consistency", "shortDescription": {"text": "Possibly dead Python function: rule_orientation_consistency"}, "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-b8a702242ccc30fd", "name": "Possibly dead Python function: rule_rotated_pages", "shortDescription": {"text": "Possibly dead Python function: rule_rotated_pages"}, "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-279273035d92632f", "name": "Possibly dead Python function: rule_empty_page_detection", "shortDescription": {"text": "Possibly dead Python function: rule_empty_page_detection"}, "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-40e0c42638c87457", "name": "Possibly dead Python function: rule_trim_box_validation", "shortDescription": {"text": "Possibly dead Python function: rule_trim_box_validation"}, "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-c94b5dd5386f3a50", "name": "Possibly dead Python function: rule_kdp_trim_profile", "shortDescription": {"text": "Possibly dead Python function: rule_kdp_trim_profile"}, "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-da40174408c80285", "name": "Possibly dead Python function: rule_gutter_margin", "shortDescription": {"text": "Possibly dead Python function: rule_gutter_margin"}, "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-70a068abcd73ed88", "name": "Possibly dead Python function: rule_outside_margin_min", "shortDescription": {"text": "Possibly dead Python function: rule_outside_margin_min"}, "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-780ce6979a007762", "name": "Possibly dead Python function: rule_top_margin_min", "shortDescription": {"text": "Possibly dead Python function: rule_top_margin_min"}, "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-2e2f239575953b34", "name": "Possibly dead Python function: rule_bottom_margin_min", "shortDescription": {"text": "Possibly dead Python function: rule_bottom_margin_min"}, "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-e34f972a81081f6f", "name": "Possibly dead Python function: rule_text_outside_trim", "shortDescription": {"text": "Possibly dead Python function: rule_text_outside_trim"}, "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-2c9adf9c0110912a", "name": "Possibly dead Python function: rule_safe_zone_validation", "shortDescription": {"text": "Possibly dead Python function: rule_safe_zone_validation"}, "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-726ab68597b6a122", "name": "Possibly dead Python function: rule_embedded_fonts", "shortDescription": {"text": "Possibly dead Python function: rule_embedded_fonts"}, "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-72125af874bc22fd", "name": "Stray `console.log` in TS/JS \u2014 src/scripts/test-email.ts:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/test-email.ts:6"}, "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-88637c7f66bfc430", "name": "TODO/FIXME marker in shipping code \u2014 src/components/SocialLinks.tsx:14", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/SocialLinks.tsx:14"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c0ef71e8add2d49", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/upload-panel.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/upload-panel.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24b56c95ec3c3f66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/sidebar.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/sidebar.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-871e3c3a180514bd", "name": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/sidebar.tsx:160", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/sidebar.tsx:160"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e8449448186b58c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings-panel.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings-panel.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2f9e6f1031c5073", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/scan-history-panel.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/scan-history-panel.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67dc0d5439991ed7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:71", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:71"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f2e9bcea3bdbb94c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:54", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:54"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-714bf7bd833b4068", "name": "TODO/FIXME marker in shipping code \u2014 src/app/kdp-formatter/page.tsx:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/kdp-formatter/page.tsx:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0f70281d9e270f5", "name": "TODO/FIXME marker in shipping code \u2014 src/app/keyword-research-pdf/page.tsx:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/keyword-research-pdf/page.tsx:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfff11fd86f94905", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/print-ready-check-status/route.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/print-ready-check-status/route.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1db42e608f6b86c5", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/send-scan-nudges/route.ts:255", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/send-scan-nudges/route.ts:255"}, "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-bf2f47e9c14ab79f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/annotate-local/route.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/annotate-local/route.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb79c8f79567fece", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/kdp-pdf-check-from-preflight/route.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/kdp-pdf-check-from-preflight/route.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f24586a86277b68e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/[id]/page.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/[id]/page.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e23223c67b24533", "name": "TODO/FIXME marker in shipping code \u2014 src/app/preview/[id]/page.tsx:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/preview/[id]/page.tsx:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d82dce803139939c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:527", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:527"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8cab0de16986a87", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/account/page.tsx:367", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/account/page.tsx:367"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9392a0f74a9e2e3a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/download/[id]/page.tsx:1389", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/download/[id]/page.tsx:1389"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a52588b00eaefffe", "name": "TODO/FIXME marker in shipping code \u2014 src/app/download/[id]/page.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/download/[id]/page.tsx:4"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-140a63d2a94000c3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/kdp-pdf-checker/page.tsx:262", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/kdp-pdf-checker/page.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8d040113da94502", "name": "Stray `console.log` in TS/JS \u2014 src/lib/security.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/security.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae1ca45f0791e5b1", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/storage.ts:221", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/storage.ts:221"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae0fdcffb865e083", "name": "Dockerfile runs as root: kdp-preflight-engine/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: kdp-preflight-engine/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-c8140216109a2fb9", "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-d9aa4149ad5a074c", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:71", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:71"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d9306d8b290e729", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:54", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:54"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24d42c3807fc6033", "name": "Insecure pattern 'document_write' in src/app/download/[id]/page.tsx:279", "shortDescription": {"text": "Insecure pattern 'document_write' in src/app/download/[id]/page.tsx:279"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f5c6e806454f7092", "name": "Install-time lifecycle script performs network/shell-sensitive actions", "shortDescription": {"text": "Install-time lifecycle script performs network/shell-sensitive actions"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "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-00177a5c28610531", "name": "Very large file: src/app/download/[id]/page.tsx (2019 lines)", "shortDescription": {"text": "Very large file: src/app/download/[id]/page.tsx (2019 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-3fd3fec0f0f07e5c", "name": "Very large file: src/app/kdp-pdf-checker/page.tsx (1197 lines)", "shortDescription": {"text": "Very large file: src/app/kdp-pdf-checker/page.tsx (1197 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-63afbd941c60db6f", "name": "Very large file: src/lib/blog.ts (1630 lines)", "shortDescription": {"text": "Very large file: src/lib/blog.ts (1630 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-e6fe1511106acb5f", "name": "Very large file: src/lib/kdpReportEnhance.ts (1028 lines)", "shortDescription": {"text": "Very large file: src/lib/kdpReportEnhance.ts (1028 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": "5 test file(s) for 268 source file(s) (ratio 0.02). 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 16 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 56 placeholder/mock markers across 22 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f41cc24189943bf0", "name": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/schemas.py:33", "shortDescription": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/schemas.py:33"}, "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-6c83b8fc8a4ff2a5", "name": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/validation_report.py:126", "shortDescription": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/validation_report.py:126"}, "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-ad6da4856d4acac0", "name": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/kdp_rules_engine.py:13", "shortDescription": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/kdp_rules_engine.py:13"}, "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-1c91f8c8ac558fa4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PaymentGate.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PaymentGate.tsx:190"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62064667b7dd2cd4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CheckerPdfViewer.tsx:248", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CheckerPdfViewer.tsx:248"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65afd08cbe4d0609", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/KdpRiskSignalsPanel.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/KdpRiskSignalsPanel.tsx:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-465c42a32645b824", "name": "Commented-code block (6 lines) in src/components/HeroDemo.tsx:54", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/HeroDemo.tsx:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dff18b12eb2c008a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/keyword-research-pdf/page.tsx:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/keyword-research-pdf/page.tsx:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b63b246b8b042b3d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/manny/route.ts:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/manny/route.ts:106"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-468a807d9b08b102", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/route.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/route.ts:75"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f3f3a389cddbb5ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/status/route.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/status/route.ts:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0527b58978b602ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research-pdf/route.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research-pdf/route.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-58a31e07dbf04b73", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-job-status/route.ts:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-job-status/route.ts:21"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e124f7d3e47f17b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator/route.ts:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator/route.ts:107"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84314ab3d7391bd9", "name": "Legacy-named symbol `anchorOld` in src/app/api/cron/send-expiry-warnings/route.ts:46", "shortDescription": {"text": "Legacy-named symbol `anchorOld` in src/app/api/cron/send-expiry-warnings/route.ts:46"}, "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-b1ead7b25e7022c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research/route.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research/route.ts:37"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a3b3b73d7af8b42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-pdf-check/route.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-pdf-check/route.ts:64"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83c808d6656669fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-upload-url/route.ts:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-upload-url/route.ts:112"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54d0cad267c66100", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator-pdf/route.ts:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator-pdf/route.ts:47"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4be2b0db0f3a9fe4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-format-review/route.ts:135", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-format-review/route.ts:135"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-313e10314a87d31d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/page.tsx:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/page.tsx:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54f84e2edf9e7ab5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/preview/[id]/page.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/preview/[id]/page.tsx:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-891060d6ebafcb46", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/[id]/client.tsx:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/[id]/client.tsx:60"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6f7b6182f73c8cbc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/download/[id]/page.tsx:471", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/download/[id]/page.tsx:471"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91796641b86cac3b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/kdp-pdf-checker/page.tsx:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/kdp-pdf-checker/page.tsx:22"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dd1bcf8b656c63b7", "name": "Commented-code block (5 lines) in src/lib/annotatePdf.ts:385", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/annotatePdf.ts:385"}, "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-a81da4a1d5c009c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lemonsqueezy.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lemonsqueezy.ts:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1a3bb1078e853ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/checkerReportPdf.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/checkerReportPdf.ts:54"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a04efee72005d25b", "name": "Commented-code block (8 lines) in src/lib/kdpConfig.ts:18", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/kdpConfig.ts:18"}, "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-5fa5af25316da646", "name": "16 env vars used in code but missing from .env.example", "shortDescription": {"text": "16 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_SCOPED_ADMINS_JSON`, `CI`, `CRISP_API_IDENTIFIER`, `CRISP_API_KEY`, `CRISP_WEBSITE_ID`, `CRON_SECRET`, `LEMONSQUEEZY_AUTHOR_PACK_VARIANT_ID`, `LEMONSQUEEZY_INDIE_PACK_VARIANT_ID` + 8 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c288ea6b460650", "name": "FastAPI POST `upload_pdf` without auth dependency \u2014 kdp-preflight-engine/app/api/upload.py:21", "shortDescription": {"text": "FastAPI POST `upload_pdf` without auth dependency \u2014 kdp-preflight-engine/app/api/upload.py:21"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d94f6e8a1c7f1d98", "name": "FastAPI POST `trigger_annotate` without auth dependency \u2014 kdp-preflight-engine/app/api/annotate.py:21", "shortDescription": {"text": "FastAPI POST `trigger_annotate` without auth dependency \u2014 kdp-preflight-engine/app/api/annotate.py:21"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-badb63287c182e30", "name": "Dangling fetch: GET /api/credits/balance (src/components/PaymentGate.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /api/credits/balance (src/components/PaymentGate.tsx:107)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:107` calls `GET /api/credits/balance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits/balance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e99fb24ead84fd1", "name": "Dangling fetch: POST /api/credits/use-session (src/components/PaymentGate.tsx:127)", "shortDescription": {"text": "Dangling fetch: POST /api/credits/use-session (src/components/PaymentGate.tsx:127)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:127` calls `POST /api/credits/use-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits/use-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a2de8943558e7ca", "name": "Dangling fetch: POST /api/verify-access (src/components/PaymentGate.tsx:190)", "shortDescription": {"text": "Dangling fetch: POST /api/verify-access (src/components/PaymentGate.tsx:190)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:190` calls `POST /api/verify-access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verify-access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3dab37574c0a97ae", "name": "Dangling fetch: POST /api/nudge-subscribe (src/components/PaymentGate.tsx:267)", "shortDescription": {"text": "Dangling fetch: POST /api/nudge-subscribe (src/components/PaymentGate.tsx:267)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:267` calls `POST /api/nudge-subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nudge-subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63c106cdfce5d53a", "name": "Dangling fetch: POST /api/create-checkout-session (src/components/PaymentGate.tsx:284)", "shortDescription": {"text": "Dangling fetch: POST /api/create-checkout-session (src/components/PaymentGate.tsx:284)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:284` calls `POST /api/create-checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1174c675585ae3c", "name": "Dangling fetch: POST /api/credits/send-code (src/components/PaymentGate.tsx:322)", "shortDescription": {"text": "Dangling fetch: POST /api/credits/send-code (src/components/PaymentGate.tsx:322)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:322` calls `POST /api/credits/send-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits/send-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d363a48f3cfacd36", "name": "Dangling fetch: POST /api/credits/use (src/components/PaymentGate.tsx:349)", "shortDescription": {"text": "Dangling fetch: POST /api/credits/use (src/components/PaymentGate.tsx:349)"}, "fullDescription": {"text": "`src/components/PaymentGate.tsx:349` calls `POST /api/credits/use` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits/use`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52c489e7d6f65762", "name": "Dangling fetch: POST /api/tool-vote (src/components/DocxVoteCard.tsx:13)", "shortDescription": {"text": "Dangling fetch: POST /api/tool-vote (src/components/DocxVoteCard.tsx:13)"}, "fullDescription": {"text": "`src/components/DocxVoteCard.tsx:13` calls `POST /api/tool-vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tool-vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1c7e3c159a099fd", "name": "Dangling fetch: POST /api/create-checkout-session (src/components/PackBuyButton.tsx:19)", "shortDescription": {"text": "Dangling fetch: POST /api/create-checkout-session (src/components/PackBuyButton.tsx:19)"}, "fullDescription": {"text": "`src/components/PackBuyButton.tsx:19` calls `POST /api/create-checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dc8f6c42ca0835f", "name": "Dangling fetch: GET /api/track-usage (src/components/UsageBanner.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/track-usage (src/components/UsageBanner.tsx:25)"}, "fullDescription": {"text": "`src/components/UsageBanner.tsx:25` calls `GET /api/track-usage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/track-usage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92eedb7b07e01ccc", "name": "Dangling fetch: GET /api/dashboard/purchase-history (src/components/dashboard/settings-panel.tsx:233)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/purchase-history (src/components/dashboard/settings-panel.tsx:233)"}, "fullDescription": {"text": "`src/components/dashboard/settings-panel.tsx:233` calls `GET /api/dashboard/purchase-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/purchase-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fc1cc3067415770", "name": "Dangling fetch: GET /api/docx-meta?id=${encodeURIComponent(uploadId)} (src/app/kdp-formatter/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/docx-meta?id=${encodeURIComponent(uploadId)} (src/app/kdp-formatter/page.tsx:64)"}, "fullDescription": {"text": "`src/app/kdp-formatter/page.tsx:64` calls `GET /api/docx-meta?id=${encodeURIComponent(uploadId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/docx-meta`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f5ad1a58b4e2c83", "name": "Dangling fetch: POST /api/auth/magic-link (src/app/auth/page.tsx:32)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/magic-link (src/app/auth/page.tsx:32)"}, "fullDescription": {"text": "`src/app/auth/page.tsx:32` calls `POST /api/auth/magic-link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/magic-link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79e8f3b75dbe558e", "name": "Dangling fetch: POST /api/cloudconvert-upload-url (src/app/keyword-research-pdf/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/cloudconvert-upload-url (src/app/keyword-research-pdf/page.tsx:68)"}, "fullDescription": {"text": "`src/app/keyword-research-pdf/page.tsx:68` calls `POST /api/cloudconvert-upload-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cloudconvert-upload-url`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30ce4943e9a8e591", "name": "Dangling fetch: POST https://api.crisp.chat/v1/website/${CRISP_WEBSITE_ID}/conversation/${sessionId}/message (src/app/ap", "shortDescription": {"text": "Dangling fetch: POST https://api.crisp.chat/v1/website/${CRISP_WEBSITE_ID}/conversation/${sessionId}/message (src/app/api/manny/route.ts:106)"}, "fullDescription": {"text": "`src/app/api/manny/route.ts:106` calls `POST https://api.crisp.chat/v1/website/${CRISP_WEBSITE_ID}/conversation/${sessionId}/message` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.crisp.chat/v1/website/<p>/conversation/<p>/message`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86fa78dddb03cb61", "name": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/generate/route.ts:75)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/generate/route.ts:75)"}, "fullDescription": {"text": "`src/app/api/generate/route.ts:75` calls `POST https://api.cloudconvert.com/v2/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c938acb5aacbc658", "name": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/generate/status/route.ts:33", "shortDescription": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/generate/status/route.ts:33)"}, "fullDescription": {"text": "`src/app/api/generate/status/route.ts:33` calls `GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25e2e1613a881d91", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research-pdf/route.ts:32)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research-pdf/route.ts:32)"}, "fullDescription": {"text": "`src/app/api/keyword-research-pdf/route.ts:32` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2675486a023c5ac", "name": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-job-status/route.ts:47)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-job-status/route.ts:47)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-job-status/route.ts:47` calls `POST https://api.cloudconvert.com/v2/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0bc0794fe5a61a8c", "name": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${docxJobId}?include=tasks (src/app/api/cloudconvert-job-status", "shortDescription": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${docxJobId}?include=tasks (src/app/api/cloudconvert-job-status/route.ts:77)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-job-status/route.ts:77` calls `GET https://api.cloudconvert.com/v2/jobs/${docxJobId}?include=tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc04186784e22975", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:107)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:107)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-job-status/route.ts:107` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7aaae534231b6dee", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:164)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:164)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-job-status/route.ts:164` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70eb9e3fe83fe05e", "name": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/cloudconvert-job-status/rou", "shortDescription": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/cloudconvert-job-status/route.ts:248)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-job-status/route.ts:248` calls `GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc9289ead7303c98", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator/route.ts:107)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator/route.ts:107)"}, "fullDescription": {"text": "`src/app/api/description-generator/route.ts:107` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bf96e0adf909df9", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research/route.ts:37)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research/route.ts:37)"}, "fullDescription": {"text": "`src/app/api/keyword-research/route.ts:37` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a9fb671c6bd274f", "name": "Dangling fetch: GET https://api.cloudconvert.com/v2/users/me (src/app/api/cc-test/route.ts:25)", "shortDescription": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/users/me (src/app/api/cc-test/route.ts:25)"}, "fullDescription": {"text": "`src/app/api/cc-test/route.ts:25` calls `GET https://api.cloudconvert.com/v2/users/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/users/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95911e0941a941b7", "name": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-upload-url/route.ts:112)", "shortDescription": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-upload-url/route.ts:112)"}, "fullDescription": {"text": "`src/app/api/cloudconvert-upload-url/route.ts:112` calls `POST https://api.cloudconvert.com/v2/jobs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.cloudconvert.com/v2/jobs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35ef22759430484a", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator-pdf/route.ts:47)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator-pdf/route.ts:47)"}, "fullDescription": {"text": "`src/app/api/description-generator-pdf/route.ts:47` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b520d9eaa5681a3c", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/kdp-format-review/route.ts:135)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/kdp-format-review/route.ts:135)"}, "fullDescription": {"text": "`src/app/api/kdp-format-review/route.ts:135` calls `POST https://api.anthropic.com/v1/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6bb5a72b743e108", "name": "Dangling fetch: POST /api/create-checkout-session (src/app/pro-pack/page.tsx:49)", "shortDescription": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/pro-pack/page.tsx:49)"}, "fullDescription": {"text": "`src/app/pro-pack/page.tsx:49` calls `POST /api/create-checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e59705762d2f06fb", "name": "Dangling fetch: GET /api/dashboard/summary (src/app/dashboard/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/summary (src/app/dashboard/page.tsx:83)"}, "fullDescription": {"text": "`src/app/dashboard/page.tsx:83` calls `GET /api/dashboard/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c0847edfa3b255a", "name": "Dangling fetch: GET /api/affiliates/me (src/app/dashboard/page.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/affiliates/me (src/app/dashboard/page.tsx:84)"}, "fullDescription": {"text": "`src/app/dashboard/page.tsx:84` calls `GET /api/affiliates/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/affiliates/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2718a35650d5b5fa", "name": "Dangling fetch: POST /api/profile/avatar (src/app/dashboard/page.tsx:144)", "shortDescription": {"text": "Dangling fetch: POST /api/profile/avatar (src/app/dashboard/page.tsx:144)"}, "fullDescription": {"text": "`src/app/dashboard/page.tsx:144` calls `POST /api/profile/avatar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/profile/avatar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eff0c982cd2b6fe7", "name": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/page.tsx:25)", "shortDescription": {"text": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/page.tsx:25)"}, "fullDescription": {"text": "`src/app/unsubscribe/page.tsx:25` calls `POST /api/unsubscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/unsubscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcffeeac7e5972cb", "name": "Dangling fetch: POST /api/create-checkout-session (src/app/author-pack/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/author-pack/page.tsx:51)"}, "fullDescription": {"text": "`src/app/author-pack/page.tsx:51` calls `POST /api/create-checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9966b499219ddb00", "name": "Dangling fetch: GET /api/credits/balance-public?email=${encodeURIComponent(email)} (src/app/success/page.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/credits/balance-public?email=${encodeURIComponent(email)} (src/app/success/page.tsx:25)"}, "fullDescription": {"text": "`src/app/success/page.tsx:25` calls `GET /api/credits/balance-public?email=${encodeURIComponent(email)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/credits/balance-public`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b52bd0d6d26a17f5", "name": "Dangling fetch: POST /api/verify-access (src/app/success/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: POST /api/verify-access (src/app/success/page.tsx:73)"}, "fullDescription": {"text": "`src/app/success/page.tsx:73` calls `POST /api/verify-access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/verify-access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-133e3819fb620775", "name": "Dangling fetch: POST /api/create-checkout-session (src/app/indie-pack/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/indie-pack/page.tsx:41)"}, "fullDescription": {"text": "`src/app/indie-pack/page.tsx:41` calls `POST /api/create-checkout-session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-checkout-session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7af7946453a6216a", "name": "Dangling fetch: POST /api/pdf-compress/lead (src/app/pdf-compress/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: POST /api/pdf-compress/lead (src/app/pdf-compress/page.tsx:97)"}, "fullDescription": {"text": "`src/app/pdf-compress/page.tsx:97` calls `POST /api/pdf-compress/lead` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pdf-compress/lead`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb5866042d72ae08", "name": "Dangling fetch: POST /api/parse (src/app/preview/[id]/page.tsx:49)", "shortDescription": {"text": "Dangling fetch: POST /api/parse (src/app/preview/[id]/page.tsx:49)"}, "fullDescription": {"text": "`src/app/preview/[id]/page.tsx:49` calls `POST /api/parse` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/parse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a989230e74361f1f", "name": "Dangling fetch: GET /api/generate/status?id=${id}&jobId=${jobId} (src/app/preview/[id]/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/generate/status?id=${id}&jobId=${jobId} (src/app/preview/[id]/page.tsx:83)"}, "fullDescription": {"text": "`src/app/preview/[id]/page.tsx:83` calls `GET /api/generate/status?id=${id}&jobId=${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0b067d342bc2150", "name": "Dangling fetch: POST /api/generate (src/app/preview/[id]/page.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /api/generate (src/app/preview/[id]/page.tsx:111)"}, "fullDescription": {"text": "`src/app/preview/[id]/page.tsx:111` calls `POST /api/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34246929ffd7e581", "name": "Dangling fetch: GET /api/admin/stats (src/app/admin/page.tsx:166)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/stats (src/app/admin/page.tsx:166)"}, "fullDescription": {"text": "`src/app/admin/page.tsx:166` calls `GET /api/admin/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cd4fda24866a685", "name": "Dangling fetch: GET /api/admin/leads (src/app/admin/page.tsx:210)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/leads (src/app/admin/page.tsx:210)"}, "fullDescription": {"text": "`src/app/admin/page.tsx:210` calls `GET /api/admin/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7812e9445c296ffd", "name": "Dangling fetch: GET /api/admin/user-lookup?email=${encodeURIComponent(userLookupEmail.trim())} (src/app/admin/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/admin/user-lookup?email=${encodeURIComponent(userLookupEmail.trim())} (src/app/admin/page.tsx:267)"}, "fullDescription": {"text": "`src/app/admin/page.tsx:267` calls `GET /api/admin/user-lookup?email=${encodeURIComponent(userLookupEmail.trim())}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/user-lookup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b8e85b135a2ed6f", "name": "Dangling fetch: POST /api/admin/grant-credits (src/app/admin/page.tsx:352)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/grant-credits (src/app/admin/page.tsx:352)"}, "fullDescription": {"text": "`src/app/admin/page.tsx:352` calls `POST /api/admin/grant-credits` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/grant-credits`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79205278bfcf5efd", "name": "Dangling fetch: GET /api/affiliates/me (src/app/verify/[id]/client.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/affiliates/me (src/app/verify/[id]/client.tsx:60)"}, "fullDescription": {"text": "`src/app/verify/[id]/client.tsx:60` calls `GET /api/affiliates/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/affiliates/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-958e08a78bf218d4", "name": "Dangling fetch: POST /api/my-orders/send-code (src/app/account/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/my-orders/send-code (src/app/account/page.tsx:124)"}, "fullDescription": {"text": "`src/app/account/page.tsx:124` calls `POST /api/my-orders/send-code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/my-orders/send-code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2676aa459331736f", "name": "Dangling fetch: POST /api/my-orders/verify (src/app/account/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: POST /api/my-orders/verify (src/app/account/page.tsx:205)"}, "fullDescription": {"text": "`src/app/account/page.tsx:205` calls `POST /api/my-orders/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/my-orders/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b738fe5512dab383", "name": "Dangling fetch: POST /api/resend-link (src/app/resend-link/page.tsx:15)", "shortDescription": {"text": "Dangling fetch: POST /api/resend-link (src/app/resend-link/page.tsx:15)"}, "fullDescription": {"text": "`src/app/resend-link/page.tsx:15` calls `POST /api/resend-link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resend-link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac1a1e45d52c87ec", "name": "Dangling fetch: POST /api/metadata/optimize (src/app/metadata/[id]/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/metadata/optimize (src/app/metadata/[id]/page.tsx:68)"}, "fullDescription": {"text": "`src/app/metadata/[id]/page.tsx:68` calls `POST /api/metadata/optimize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/metadata/optimize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b010bddb6f57517", "name": "Dangling fetch: GET /api/format-report?id=${encodeURIComponent(id)}&t=${Date.now()} (src/app/download/[id]/page.tsx:471)", "shortDescription": {"text": "Dangling fetch: GET /api/format-report?id=${encodeURIComponent(id)}&t=${Date.now()} (src/app/download/[id]/page.tsx:471)"}, "fullDescription": {"text": "`src/app/download/[id]/page.tsx:471` calls `GET /api/format-report?id=${encodeURIComponent(id)}&t=${Date.now()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/format-report`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47016b7a7351ca10", "name": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:489)", "shortDescription": {"text": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:489)"}, "fullDescription": {"text": "`src/app/download/[id]/page.tsx:489` calls `GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kdp-annotated-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14f181dd51300a05", "name": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:524)", "shortDescription": {"text": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:524)"}, "fullDescription": {"text": "`src/app/download/[id]/page.tsx:524` calls `GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kdp-annotated-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a645adcd5ccf81a4", "name": "Dangling fetch: POST /api/checker-annotated-email (src/app/download/[id]/page.tsx:570)", "shortDescription": {"text": "Dangling fetch: POST /api/checker-annotated-email (src/app/download/[id]/page.tsx:570)"}, "fullDescription": {"text": "`src/app/download/[id]/page.tsx:570` calls `POST /api/checker-annotated-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/checker-annotated-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e9b1383227b5bb0", "name": "Dangling fetch: POST /api/annotate-local (src/app/download/[id]/page.tsx:620)", "shortDescription": {"text": "Dangling fetch: POST /api/annotate-local (src/app/download/[id]/page.tsx:620)"}, "fullDescription": {"text": "`src/app/download/[id]/page.tsx:620` calls `POST /api/annotate-local` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/annotate-local`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68496eb9ef86e2be", "name": "Dangling fetch: POST /api/share/click (src/app/kdp-pdf-checker/page.tsx:500)", "shortDescription": {"text": "Dangling fetch: POST /api/share/click (src/app/kdp-pdf-checker/page.tsx:500)"}, "fullDescription": {"text": "`src/app/kdp-pdf-checker/page.tsx:500` calls `POST /api/share/click` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/share/click`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0f7361b0798f5dc", "name": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(saved.checkId)} (src/app/kdp-pdf-checker/", "shortDescription": {"text": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(saved.checkId)} (src/app/kdp-pdf-checker/page.tsx:522)"}, "fullDescription": {"text": "`src/app/kdp-pdf-checker/page.tsx:522` calls `GET /api/print-ready-check-status?checkId=${encodeURIComponent(saved.checkId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/print-ready-check-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ec3cb69b3ffd6d7", "name": "Dangling fetch: POST /api/create-upload-url (src/app/kdp-pdf-checker/page.tsx:576)", "shortDescription": {"text": "Dangling fetch: POST /api/create-upload-url (src/app/kdp-pdf-checker/page.tsx:576)"}, "fullDescription": {"text": "`src/app/kdp-pdf-checker/page.tsx:576` calls `POST /api/create-upload-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/create-upload-url`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f433aff0d06655fc", "name": "Dangling fetch: POST /api/kdp-pdf-check-from-preflight (src/app/kdp-pdf-checker/page.tsx:600)", "shortDescription": {"text": "Dangling fetch: POST /api/kdp-pdf-check-from-preflight (src/app/kdp-pdf-checker/page.tsx:600)"}, "fullDescription": {"text": "`src/app/kdp-pdf-checker/page.tsx:600` calls `POST /api/kdp-pdf-check-from-preflight` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kdp-pdf-check-from-preflight`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f19e4910561ca29", "name": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(checkId)} (src/app/kdp-pdf-checker/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(checkId)} (src/app/kdp-pdf-checker/page.tsx:633)"}, "fullDescription": {"text": "`src/app/kdp-pdf-checker/page.tsx:633` calls `GET /api/print-ready-check-status?checkId=${encodeURIComponent(checkId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/print-ready-check-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbad03e1dda77484", "name": "Dangling fetch: POST /api/kdp-format-review (src/app/kdp-format-review/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: POST /api/kdp-format-review (src/app/kdp-format-review/page.tsx:38)"}, "fullDescription": {"text": "`src/app/kdp-format-review/page.tsx:38` calls `POST /api/kdp-format-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/kdp-format-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`kdp-preflight-engine/app/main.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-f6cde9027e257390", "name": "Unused endpoint: GET /file/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /file/{job_id}"}, "fullDescription": {"text": "`kdp-preflight-engine/app/api/file.py` declares `GET /file/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9c4239802524087", "name": "Unused endpoint: POST /annotate/{job_id}", "shortDescription": {"text": "Unused endpoint: POST /annotate/{job_id}"}, "fullDescription": {"text": "`kdp-preflight-engine/app/api/annotate.py` declares `POST /annotate/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79d5c59fb1ed6b33", "name": "Unused endpoint: GET /report/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /report/{job_id}"}, "fullDescription": {"text": "`kdp-preflight-engine/app/api/report.py` declares `GET /report/{job_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/17680"}, "properties": {"repository": "QZEE777/LayoutForge", "repoUrl": "https://github.com/QZEE777/LayoutForge", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462664, "scanner": "foundry_dataset", "fingerprint": "850a24d6dda0c66e85ff89c8c95d0590a162a04b267560db5dfe6a7e13441177", "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": "QZEE777/LayoutForge#9", "issue_number": "9", "quality_tiers": {"unresolved": 3}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-359d9305006d3274", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#9\nRepo: QZEE777/LayoutForge\nIssue/PR number: 9\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-49090fb1855660d9", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462663, "scanner": "foundry_dataset", "fingerprint": "bbc43be0e0073f7f3478da42451a5c68b74d84b150601efe87a076cfb8f882bb", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "human_feedback_general": 2, "unlinked_human_feedback": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 4, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 21, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#8", "issue_number": "8", "quality_tiers": {"unresolved": 5}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0413c1bf51b3719e", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#8\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#8\nRepo: QZEE777/LayoutForge\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 15\nEdges: 21\nNode types: {'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 4, 'human_feedback_general': 2, 'unlinked_human_feedback': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'deployment_env_gap': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 8, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-06c27f351039d47b", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462662, "scanner": "foundry_dataset", "fingerprint": "bca028b325a39f91b4216fb1e7d3f945ad341ffaf4c4c2242fe2a716f6194d88", "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": 2, "unlinked_human_feedback": 2, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 4}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#7", "issue_number": "7", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-58e0c3d42116cc1e", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#7\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#7\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#7\nRepo: QZEE777/LayoutForge\nIssue/PR number: 7\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 4, 'human_feedback_general': 2, 'unlinked_human_feedback': 2, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-95dfb62243862481", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462661, "scanner": "foundry_dataset", "fingerprint": "6f236a99b7a20e47225084e4c5535d7ade93d8aaecde342b252991a147fe4e84", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "runtime_failure": 1, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#6", "issue_number": "6", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-7a751feef960d992", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 5}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#6\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#6\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#6\nRepo: QZEE777/LayoutForge\nIssue/PR number: 6\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-200c3926055fb0e3", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462660, "scanner": "foundry_dataset", "fingerprint": "bb74a3b69c1c4271a42ed9eb116d8b4b6b329318d10ce27030bad9e72f4110ff", "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": {"runtime_failure": 1, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#5", "issue_number": "5", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-f7374d15bad501d8", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#5\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#5\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#5\nRepo: QZEE777/LayoutForge\nIssue/PR number: 5\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-f00c4528cb7bfb99", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462659, "scanner": "foundry_dataset", "fingerprint": "d8e2ef98ff26461aeb05beeee75941717790fb363c6a66375597a994141b0f21", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#4", "issue_number": "4", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-f9fbd9deb1884de9", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#4\nRepo: QZEE777/LayoutForge\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-469d3610b72c4d3b", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462658, "scanner": "foundry_dataset", "fingerprint": "5d5361f83f55b1f96d492407121b5c83bff1cf961c689ded76b889881f7c7189", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-3c6ad17bbf88fc5e", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#3\nRepo: QZEE777/LayoutForge\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-d6865f06fea8fca6", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462657, "scanner": "foundry_dataset", "fingerprint": "0e1f2948397020311b73833ff92a02b3e8d03abf1990127db6cff7cadbfa358c", "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": {"runtime_failure": 1, "deployment_env_gap": 1, "dependency_or_build": 4, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 32, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 4, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 2, "comment_chain_touches_file": 8, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 16, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#27", "issue_number": "27", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-8dc472b97d8f2f67", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 20}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#27\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#27\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#27\nRepo: QZEE777/LayoutForge\nIssue/PR number: 27\nGraph consistency label: needs_more_evidence\nNodes: 16\nEdges: 32\nNode types: {'pr_file': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 8, 'thread_touches_file': 4, 'chain_has_link_quality': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'dependency_or_build': 4, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'runtime_failure': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-f6c4a27df436552c", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462656, "scanner": "foundry_dataset", "fingerprint": "d1608d70132b4120d901ca8e8e46609a661988c9182d1a2f1cbbaa56c036628a", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 4, "security_auth_secret": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 41, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 4, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 3, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 19, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#26", "issue_number": "26", "quality_tiers": {"unresolved": 5}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-b3900a5e42af1c8c", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 24}}, "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#26\nRepo: QZEE777/LayoutForge\nIssue/PR number: 26\nGraph consistency label: needs_more_evidence\nNodes: 19\nEdges: 41\nNode types: {'link_quality': 5, 'pr_file': 4, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'dependency_or_build': 4, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-8e4fcac3415be4d0", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462655, "scanner": "foundry_dataset", "fingerprint": "b33902f129f2869fecebdf05451b1212c64b528c3fdfda335f93ac7c04f97900", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#25", "issue_number": "25", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-7c23b106e38d0494", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#25\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#25\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#25\nRepo: QZEE777/LayoutForge\nIssue/PR number: 25\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-bf5f20b3b76a91fe", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462654, "scanner": "foundry_dataset", "fingerprint": "f191b8a658968f6f92e19c5b593a1f007d781457d8bffeff9a258a33cff1e2d5", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 6, "build_install_failure": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 4, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 3, "comment_chain_links_commit": 2, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 21, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 3, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#23", "issue_number": "23", "quality_tiers": {"unresolved": 2, "weak_supervision": 3}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-312f486ef75589f6", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"dependency_or_build": 24}}, "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: weak_supervision_needs_review\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#23\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#23\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#23\nRepo: QZEE777/LayoutForge\nIssue/PR number: 23\nGraph consistency label: weak_supervision_needs_review\nNodes: 21\nEdges: 43\nNode types: {'link_quality': 5, 'pr_file': 4, 'comment': 3, 'comment_chain': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'dependency_or_build': 6, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'build_install_failure': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1, 'human_reported_issue_then_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-45b4236cc46c12c2", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462653, "scanner": "foundry_dataset", "fingerprint": "0af2a12b3003917d330806339e362c00f20684f04a47b59ac8ba6c88b6128244", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 6, "build_install_failure": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 43, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 4, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 3, "comment_chain_links_commit": 2, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 21, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 3, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#22", "issue_number": "22", "quality_tiers": {"unresolved": 2, "weak_supervision": 3}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-d6bec8fcfbfcf695", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"dependency_or_build": 24}}, "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: weak_supervision_needs_review\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#22\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#22\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#22\nRepo: QZEE777/LayoutForge\nIssue/PR number: 22\nGraph consistency label: weak_supervision_needs_review\nNodes: 21\nEdges: 43\nNode types: {'link_quality': 5, 'pr_file': 4, 'comment': 3, 'comment_chain': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'dependency_or_build': 6, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'build_install_failure': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1, 'human_reported_issue_then_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 2}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-3a19b3da235ba435", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462652, "scanner": "foundry_dataset", "fingerprint": "4caad99ac6196c00d29c4979abf28e1a6970b942d95a7852da240c299ea1e56b", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-bf72dbc068dbe926", "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#2\nRepo: QZEE777/LayoutForge\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'deployment_env_gap': 1, 'unlinked_human_feedback': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-8a5070633b4ef4bd", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462651, "scanner": "foundry_dataset", "fingerprint": "453e04806893494bb853323cdeb636e55cbcd8ca65eddbcfa22ac126e3cd53bb", "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_ci_gap": 1, "ui_or_frontend": 1, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#11", "issue_number": "11", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-44b28a534aa087ce", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 5}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#11\nRepo: QZEE777/LayoutForge\nIssue/PR number: 11\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-01cc340bfbf711be", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 462650, "scanner": "foundry_dataset", "fingerprint": "6447f54bb4ead228bdf543d3caa127215d354c4cd3af579cf0e40c6da08e5f0e", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-ab1c535224a25ccb", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#1\nRepo: QZEE777/LayoutForge\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-5123da8fbaac63e9", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433935, "scanner": "foundry_dataset", "fingerprint": "e507168bc5fe887bc12e12c3cc3e6a0a213d9d14c56e9c368fc34d40b5076da8", "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": "QZEE777/LayoutForge#9", "human_labels": ["human_feedback_general"], "issue_number": "9", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-7f93c957c8ca4ada", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#9\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\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\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#9\nRepo: QZEE777/LayoutForge\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-5b46d26b4133ca9a\",\n    \"kind\": \"issue_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/9\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/9\\nTitle: Hello\\nBody:\\n@engine-labs\\n\\nConnection test.\\n\\nCreate file:\\n\\nsrc/lib/test-cto.ts\\n\\nwith:\\n\\nexport const CTO_CONNECTED = true;\\n\\nRules:\\n- Open PR only\\n- Do NOT modify any other files\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-935e5d2e21e3cf32\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: QZEE777/LayoutForge\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 7, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 8, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"docs\": 7, \"schemas\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_fake_real_verification_bundle\": 1}\nCo-occurrence labels: {\"fake_real_data_plus_verification_gap\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-64223cc6e27364a4", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433934, "scanner": "foundry_dataset", "fingerprint": "196bba2076e560b78a7d2bf81f80473ab203d30785903c2585109de3183ec7ac", "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": "QZEE777/LayoutForge#8", "human_labels": ["deployment_env_gap", "human_feedback_general"], "issue_number": "8", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-ec0b98ae916fdb3a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#8\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#8\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'deployment_env_gap': 1, 'human_feedback_general': 2}\nPolarities: {'bad': 1, 'neutral': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d5c0811d488f69bc\",\n    \"kind\": \"issue_body\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/8\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/8\\nTitle: Fix Railway deployment conflicts\\nBody:\\n@engine-labs\\nThe Problem:\\nMy Railway builds are failing with checksum errors because the two services in this repo are conflicting. The Python service is trying to read Node.js files, and the Node service is being misdetected as Python.\\nThe Task:\\nCreate/Update a railway.toml in the root directory to lock the clever-magic service to the root Dockerfile.worker.\\nCreate/Update a railway.toml inside the kdp-preflight-engine/ directory to lock that service to its own Dockerfile.\\nGoal:\\nEnsure each service uses its own correct Dockerfile and builder settings so the \\\"checksum\\\" and \\\"misdetection\\\" errors stop. Open a PR with these configuration fixes.\"\n  },\n  {\n    \"id\": \"github-feedback-comment-28184ac5acc8cff8\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/8#issuecomment-4303647070\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/8#issuecomment-4303647070\\nTitle: \\nBody:\\n@engine-labs please fix this\"\n  },\n  {\n    \"id\": \"github-feedback-comment-2b0e4ff852323bdb\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/8#issuecomment-4303650625\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/8#issuecomment-4303650625\\nTitle: \\nBody:\\n   @engine-l\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-cdaa05e6586d97c9", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433933, "scanner": "foundry_dataset", "fingerprint": "d16bcb19fdb5cb93710ea7bf5a36f47dfa4d7d62e9ce6fcae3b83fb80978cc7e", "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": "QZEE777/LayoutForge#7", "human_labels": ["human_feedback_general"], "issue_number": "7", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-af886fead88ee4de", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#7\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\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\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#7\nRepo: QZEE777/LayoutForge\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'human_feedback_general': 2}\nPolarities: {'neutral': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ba6819a89a2b9f8b\",\n    \"kind\": \"issue_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/7\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/7\\nTitle: @engine-labs hello\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-9f005719d6de5d24\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/issues/7#issuecomment-4303485115\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/issues/7#issuecomment-4303485115\\nTitle: \\nBody:\\n@engine-labs hello\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-1902ceca221edc59\", \"evidence-chain-comment_to_commit-c2c3ac485e8bcbcd\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: QZEE777/LayoutForge\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 7, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 8, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"docs\": 7, \"schemas\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_fake_real_verification_bundle\": 1}\nCo-occurrence labels: {\"fake_real_data_plus_verification_gap\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-1c625513c0f62254", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433932, "scanner": "foundry_dataset", "fingerprint": "c3219facd3fcd1e7932933b50b23d0696018a575fb62cdf1f0e7fc9aa8749647", "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": "QZEE777/LayoutForge#24", "human_labels": ["build_install_failure", "dependency_or_build", "deployment_env_gap"], "issue_number": "24", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.895, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-8785cf05d17e2eca", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 4}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#24\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#24\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b22f738ee9603119\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/24\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/24\\nTitle: build(deps): bump the npm_and_yarn group across 2 directories with 11 updates\\nBody:\\nBumps the npm_and_yarn group with 9 updates in the / directory:\\n\\n| Package | From | To |\\n| --- | --- | --- |\\n| [mammoth](https://github.com/mwilliamson/mammoth.js) | `1.8.0` | `1.11.0` |\\n| [uuid](https://github.com/uuidjs/uuid) | `9.0.1` | `14.0.0` |\\n| [postcss](https://github.com/postcss/postcss) | `8.4.49` | `8.5.10` |\\n| [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.12` | `1.1.14` |\\n| [minimatch](https://github.com/isaacs/minimatch) | `3.1.2` | `3.1.5` |\\n| [@xmldom/xmldom](https://github.com/xmldom/xmldom) | `0.8.11` | `0.8.13` |\\n| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) | `5.4.1` | `5.7.2` |\\n| [flatted](https://github.com/WebReflection/flatted) | `3.3.3` | `3.4.2` |\\n| [underscore](https://github.com/jashkenas/underscore) | `1.13.7` | `1.13.8` |\\n\\nBumps the npm_and_yarn group with 3 updates in the /kdp-preflight-engine/frontend directory: [postcss](\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a5ee8b4571808074\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/24#issuecomment-4361765807\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/24#issuecomment-4361765807\\nTitle: \\nBody:\\n[vc]: #oKXlhX020sYHr2vsiYlAAgpNC/DEz4m3gBDRoVAhFio=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVg\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-f612b4df0fa0328d", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433931, "scanner": "foundry_dataset", "fingerprint": "6f44f55a6458ec9af025034e13006eae39e583438544064f0ac09be04889e359", "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": "QZEE777/LayoutForge#23", "human_labels": ["build_install_failure", "dependency_or_build", "deployment_env_gap", "human_feedback_general"], "issue_number": "23", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.67, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-ae5290fdecd76aef", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 4}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#23\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: QZEE777/LayoutForge#23\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 3\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 2, 'neutral': 1}\nChanged file labels: {'dependency_or_build': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f121d2ba2f9d495d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/23\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/23\\nTitle: build(deps): bump the npm_and_yarn group across 2 directories with 12 updates\\nBody:\\nBumps the npm_and_yarn group with 10 updates in the / directory:\\n\\n| Package | From | To |\\n| --- | --- | --- |\\n| [mammoth](https://github.com/mwilliamson/mammoth.js) | `1.8.0` | `1.11.0` |\\n| [next](https://github.com/vercel/next.js) | `15.0.7` | `15.5.15` |\\n| [uuid](https://github.com/uuidjs/uuid) | `9.0.1` | `14.0.0` |\\n| [postcss](https://github.com/postcss/postcss) | `8.4.49` | `8.5.10` |\\n| [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.12` | `1.1.14` |\\n| [minimatch](https://github.com/isaacs/minimatch) | `3.1.2` | `3.1.5` |\\n| [@xmldom/xmldom](https://github.com/xmldom/xmldom) | `0.8.11` | `0.8.13` |\\n| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) | `5.4.1` | `5.7.2` |\\n| [flatted](https://github.com/WebReflection/flatted) | `3.3.3` | `3.4.2` |\\n| [underscore](https://github.com/jashkenas/underscore) | `1.13.7` | `1.13.8` |\\n\\nBumps the npm_and_yarn group with\"\n  },\n  {\n    \"id\": \"github-feedback-comment-62f5c7b83448fad3\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/23#issuecomment-4361534220\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/23#issuecomment-4361534220\\nTitle: \\nBody:\\n[vc]: #4VVwgrWrasczyztzxo8hegRzQbAH1nGEvY1SQjSxa4s=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-37c94af518d1a0db", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433930, "scanner": "foundry_dataset", "fingerprint": "1b4e2ddb2ef7b311ba01fc45ae1c5b2cf583704cd94ba28b02de71747dc75913", "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": "QZEE777/LayoutForge#22", "human_labels": ["build_install_failure", "dependency_or_build", "deployment_env_gap", "human_feedback_general"], "issue_number": "22", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.67, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-db292252ac752a0b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 4}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#22\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: QZEE777/LayoutForge#22\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 3\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 2, 'neutral': 1}\nChanged file labels: {'dependency_or_build': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-50399585a17f6136\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/22\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/22\\nTitle: build(deps): bump the npm_and_yarn group across 2 directories with 11 updates\\nBody:\\nBumps the npm_and_yarn group with 9 updates in the / directory:\\n\\n| Package | From | To |\\n| --- | --- | --- |\\n| [mammoth](https://github.com/mwilliamson/mammoth.js) | `1.8.0` | `1.11.0` |\\n| [next](https://github.com/vercel/next.js) | `15.0.7` | `15.5.15` |\\n| [postcss](https://github.com/postcss/postcss) | `8.4.49` | `8.5.10` |\\n| [brace-expansion](https://github.com/juliangruber/brace-expansion) | `1.1.12` | `1.1.14` |\\n| [minimatch](https://github.com/isaacs/minimatch) | `3.1.2` | `3.1.5` |\\n| [@xmldom/xmldom](https://github.com/xmldom/xmldom) | `0.8.11` | `0.8.13` |\\n| [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) | `5.4.1` | `5.7.2` |\\n| [flatted](https://github.com/WebReflection/flatted) | `3.3.3` | `3.4.2` |\\n| [underscore](https://github.com/jashkenas/underscore) | `1.13.7` | `1.13.8` |\\n\\nBumps the npm_and_yarn group with 3 updates in the /kdp-preflight-engine/frontend directory: [post\"\n  },\n  {\n    \"id\": \"github-feedback-comment-4cfdd29d74c6692c\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/22#issuecomment-4361533188\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/22#issuecomment-4361533188\\nTitle: \\nBody:\\n[vc]: #tp6yRLRegZrGYBjWdmfj9skurjUuYUrCd/eiQl8YtOo=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2U\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-f7eda7a0f38d2d17", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433929, "scanner": "foundry_dataset", "fingerprint": "eb9d66d465ffd2928fa2883384aec25de252e0541fd0f51774d12f428cd1d2af", "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": "QZEE777/LayoutForge#21", "human_labels": ["deployment_env_gap", "human_feedback_general", "ui_or_frontend"], "issue_number": "21", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.76, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-5cd952c6d8b8cca3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#21\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#21\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-a2d2d0970cdcb8c9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/21\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/21\\nTitle: feat: dynamic blog entries in sitemap via getAllPosts()\\nBody:\\nReplace four hardcoded blog URLs with getAllPosts().map() so every post in blog.ts is automatically included in the sitemap on publish. All other entries (core, tools, legal, account) unchanged.\"\n  },\n  {\n    \"id\": \"github-feedback-comment-67c03f909e56f465\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/21#issuecomment-4358491587\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/21#issuecomment-4358491587\\nTitle: \\nBody:\\n[vc]: #sE18tMigFEFNOkrhcLBErFxo7pJamS56YMsYvVV9BfY=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3F6ZWU3NzdzLXByb2plY3RzL2xheW91dC1mb3JnZS85WUNYSlliVHFpd1I3TXlEczNDVW1mNTRMUXJlIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n\\n<details><summary>1 Skipped Deployment</summary>\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [layout-forge](https://vercel.com/qzee777s-projects/layout-forge) | ![Ignored](https://vercel.com/static/status/canceled.svg) [Ignored](https://vercel.com/qzee777s-projects/layout-forge/9YCXJYbTqiwR7MyDs3C\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-d0c72da1820d1875", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433928, "scanner": "foundry_dataset", "fingerprint": "a37d42ea9bbb87289c331128060f49e8dcf9bdda5bd6ca424963d551a119cc92", "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": "QZEE777/LayoutForge#2", "human_labels": ["deployment_env_gap", "human_feedback_general"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d6c7d67c1be1d0df", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#2\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#2\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2c070ec0b29b7872\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/2\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/2\\nTitle: App rename 75ad2\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-511fc88b7e1d61ba\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/2#issuecomment-3977057029\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/2#issuecomment-3977057029\\nTitle: \\nBody:\\n[vc]: #/mO5UNWAfH0AYMnIjj6oVKbeWi9SS4Tqpf0xIPGnHNY=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJsYXlvdXQtZm9yZ2UtZ2l0LWFwcC1yZW5hbWUtNzVhZDItcXplZTc3N3MtcHJvamVjdHMudmVyY2VsLmFwcCJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcXplZTc3N3MtcHJvamVjdHMvbGF5b3V0LWZvcmdlLzNhMW9hRFJFS282RnJrUjFna0QxWU5OR1BWbXMiLCJwcmV2aWV3VXJsIjoibGF5b3V0LWZvcmdlLWdpdC1hcHAtcmVuYW1lLTc1YWQyLXF6ZWU3NzdzLXByb2plY3RzLnZlcmNlbC5hcHAiLCJuZXh0Q29tbWl0U3RhdHVzIjoiREVQTE9ZRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [layout-forge](https://vercel.com/qzee777s-projects/layout-forge) | ![Ready](https://vercel.com/static/status/ready.svg) [Ready](h\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-66afb8e93709cfce\", \"evidence-chain-comment_to_commit-b558016211df21fe\"]\nSource graph evidence:\nSource evidence repo gr\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-1129043ed74b2edc", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433927, "scanner": "foundry_dataset", "fingerprint": "a1743a04ac318ca6a1b3dd75b67734db226bcfaab423c9f8aa9414d8347f92d6", "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": "QZEE777/LayoutForge#19", "human_labels": ["deployment_env_gap", "runtime_failure", "ui_or_frontend"], "issue_number": "19", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.795, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-92925c5de7fb7400", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 3}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#19\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#19\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b5f241e3f99c0098\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/19\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/19\\nTitle: feat(risk-signals-pr2): KdpRiskSignalsPanel + integration into unlocked report\\nBody:\\n## PR 2 of 3 \u2014 Component + integration. No UI chrome changes.\\n\\n### Files changed\\n| File | Change |\\n|---|---|\\n| `src/lib/kdpRiskSignals.ts` | Add 80-page Jaccard sample cap inside `detectDuplicateContent` |\\n| `src/components/KdpRiskSignalsPanel.tsx` | **New** \u2014 client component, full extraction + rendering |\\n| `src/app/download/[id]/page.tsx` | Import + 1 conditional render inside `<PaymentGate>` |\\n\\n---\\n\\n### KdpRiskSignalsPanel behaviour\\n\\n| Constraint | Implementation |\\n|---|---|\\n| Page cap | `Math.min(pdf.numPages, 150)` |\\n| Duplicate sample cap | `contentPages.slice(0, 80)` before O(n\u00b2) loop |\\n| Timeout | 15s `window.setTimeout` sets `cancelled = true` |\\n| No loading state | `signals === null` \u2192 `return null` |\\n| Empty signals | `signals.length === 0` \u2192 `return null` |\\n| Any error | `.catch(() => {})` \u2192 stays null, nothing shown |\\n| Render gate | `isChecker && report?.pdfSourceUrl` \u2014 never shows pre-pay or on non-checker \"\n  },\n  {\n    \"id\": \"github-feedback-comment-23d26968c4a953fc\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/19#issuecomment-4344425159\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/19#issuecomment-4344425159\\nTitle: \\nBody:\\n[vc]: #oxDPf3o9/xKsfFkdpejClC+IbR2MF388xyTUbT5IqHw=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJ\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-a6c8884473d6db13", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433926, "scanner": "foundry_dataset", "fingerprint": "b38d5ba03f82112dcd57a8bfa2f016f06295c5bf5f3876599d25b27db1248ae2", "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": "QZEE777/LayoutForge#18", "human_labels": ["deployment_env_gap", "runtime_failure", "ui_or_frontend"], "issue_number": "18", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.76, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-806ddd0f1130930e", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#18\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#18\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5f5898049472493a\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/18\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/18\\nTitle: feat(risk-signals-pr1): KDP Risk Signals \u2014 pure detection engine\\nBody:\\n## PR 1 of 3 \u2014 Detection engine only. No integration. No UI.\\n\\nCreates `src/lib/kdpRiskSignals.ts` \u2014 a self-contained, pure-function detection library.\\n\\n## What's in the file\\n\\n**Types**\\n- `PageContent` \u2014 `{ pageNumber, text, wordCount }`\\n- `RiskSignal` \u2014 `{ type, message, whyItMatters, whatToCheck }`\\n- `RiskSignalType` \u2014 `\\\"toc_mismatch\\\" | \\\"duplicate_content\\\" | \\\"low_density\\\"`\\n\\n**3 detectors (all return `null` on low confidence)**\\n\\n| Detector | Logic | Threshold |\\n|---|---|---|\\n| `detectTocMismatch` | Finds TOC page, extracts entries via regex, checks body for matches | Flags only if < 50% of entries found in body AND \u2265 3 entries exist |\\n| `detectDuplicateContent` | Jaccard word-overlap similarity across content pages | Flags only if > 10% of page pairs exceed 90% similarity |\\n| `detectLowDensity` | Word count per page | Flags only if > 40% of pages < 50 words AND doc \u2265 10 pages |\\n\\n**Public export**\\n```ts\\ngetKdpRiskSignals(pages: PageConte\"\n  },\n  {\n    \"id\": \"github-feedback-comment-9f6f963bc383a859\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/18#issuecomment-4343345176\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/18#issuecomment-4343345176\\nTitle: \\nBody:\\n[vc]: #rtcyiz8eUDif5J0h1BON07/PvgEo+dl0SWkR1qvf0M8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMV\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-8be7e4311a03029a", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433925, "scanner": "foundry_dataset", "fingerprint": "863bac60b0b238b11c79b99fea2fdc6858432465b1553316c3b68b1ef99b9caa", "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": "QZEE777/LayoutForge#17", "human_labels": ["api_integration_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "17", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.76, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-190ff8da7b6bc737", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#17\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#17\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7f39ca977b968fcd\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/17\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/17\\nTitle: feat(B3): real FAQ on KDP PDF Checker page\\nBody:\\n## What changed\\n\\n**FAQS data array** \u2014 6 old questions replaced with 6 scoped questions:\\n1. Does this replace Amazon KDP's review?\\n2. What does the checker look for?\\n3. Will it fix my PDF automatically?\\n4. How long does a scan take?\\n5. What do I get after payment?\\n6. What does $9 include?\\n\\n**FAQ section** \u2014 removed `{false &&` wrapper and closing `}` so the section now renders. The `FaqAccordion` component and styling are unchanged.\\n\\n## What was NOT touched\\n- All other `{false &&}` blocks remain disabled (problem section, 26 checks grid, how-it-works, second CTA, share blocks)\\n- `FaqAccordion` component \u2014 unchanged\\n- No backend, API, upload, scan, payment, or worker changes\\n- Page layout and styling \u2014 unchanged\\n\\n## Files changed\\n- `src/app/kdp-pdf-checker/page.tsx` only\\n\\n## Test plan\\n- [ ] FAQ section visible on `/kdp-pdf-checker` between upload widget and pricing\\n- [ ] All 6 questions expand/collapse correctly via accordion\\n- [ ] Other `{false &&}` sect\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7a260355fb53d712\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/17#issuecomment-4341202338\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/17#issuecomment-4341202338\\nTitle: \\nBody:\\n[vc]: #ktR+vNvcZbbv5UaPONzapdcsfghhnllexqT5CLnvzUo=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaV\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-f353a8279b2f3537", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433924, "scanner": "foundry_dataset", "fingerprint": "cdac35b590f197176caa2bdfde2a9d49c92765bc07d5ce2c75a51bf466cc1cdf", "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": "QZEE777/LayoutForge#16", "human_labels": ["api_integration_gap", "api_or_backend", "deployment_env_gap"], "issue_number": "16", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.812, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-6814c1de35463334", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#16\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#16\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'api_or_backend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b18b27f10e36e0a9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/16\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/16\\nTitle: feat(A6): receipt button copy \u2014 \\\"Download Your Manuscript\\\" \u2192 \\\"View My Report\\\"\\nBody:\\n## Change\\nSingle string change on the `single_use` branch of `receiptButtonText`.\\n\\n| | Before | After |\\n|---|---|---|\\n| `single_use` receipt button | `\\\"Download Your Manuscript\\\"` | `\\\"View My Report\\\"` |\\n| Pack receipt button | `\\\"View My Credits\\\"` | unchanged |\\n\\n## Files changed\\n- `src/app/api/create-checkout-session/route.ts` only \u2014 1 line\\n\\n## What was NOT touched\\n- No checkout logic\\n- No variant IDs\\n- No pricing\\n- No success URL\\n- No webhook logic\\n- No credits\\n\\n## \u26a0\ufe0f QA required after deploy\\nRun one live $9 checkout and confirm the Lemon Squeezy receipt button reads **\\\"View My Report\\\"** before marking complete.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-83f058f8b13ac02b\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/16#issuecomment-4337154752\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/16#issuecomment-4337154752\\nTitle: \\nBody:\\n[vc]: #mW1HIuw7Vh5QpGXjcBo0+txlU9emVomA/8F7wSg81LE=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3F6ZWU3NzdzLXByb2plY3RzL2xheW91dC1mb3JnZS9BYkh6c1U1TWgzVkJRRDFLOHhQcjNTTkE5Y3dqIiwibmV\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-18a24ccef83247ef", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433923, "scanner": "foundry_dataset", "fingerprint": "e4cf9d0255d8f83e63ea459c92928ab4b316e2e68bbe117950b62921d45ebf0d", "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": "QZEE777/LayoutForge#15", "human_labels": ["api_integration_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "15", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.76, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-59c87c6fc2a835d6", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#15\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#15\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ac9edadc260d3919\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/15\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/15\\nTitle: feat(A4+A5): simplify pricing layout and unify $9 copy\\nBody:\\n## A4 \u2014 Simplified pricing layout\\n\\n**Before:** 4 equal-weight cards competing for attention \u2014 Single Check, Author Pack, Indie Pack, Pro Pack all at the same visual size.\\n\\n**After:**\\n- `$9 Single Check` is the hero card \u2014 centered, orange border, large price, prominent CTA `\\\"Get started \u2014 $9 \u2192\\\"`\\n- 3 packs demoted to a quieter secondary row below a divider, introduced by: *\\\"Need more scans? Save more per scan with a pack.\\\"*\\n- Pack cards are smaller (`w-44` vs `w-52`), subtler, no visual competition with the entry offer\\n- All checkout `href` values preserved exactly \u2014 no payment logic touched\\n\\n## A5 \u2014 Unified $9 copy\\n\\nExact wording `$9 includes 1 full scan + 1 free recheck.` now appears consistently:\\n\\n| Location | Before | After |\\n|---|---|---|\\n| Upload card header | `2 scans included` | `1 full scan + 1 free recheck` |\\n| Hero badge | `$9 \u00b7 2 scans \u00b7 Results in ~90 seconds` | `$9 \u00b7 1 full scan + 1 free recheck \u00b7 ~90 seconds` |\\n| Pricing hero ca\"\n  },\n  {\n    \"id\": \"github-feedback-comment-40b0c7737e6efb77\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/15#issuecomment-4336617848\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/15#issuecomment-4336617848\\nTitle: \\nBody:\\n[vc]: #0CgvGbWVjb2KGJYhNT+E5oKXEr4NrMTgfvv8EQ/RV70=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVUR\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-245c69e984fb0498", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433922, "scanner": "foundry_dataset", "fingerprint": "0241f381cb70959def4547887bb1e3be0759a7c314352dc6b3e6503d3e9a028c", "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": "QZEE777/LayoutForge#14", "human_labels": ["api_integration_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "14", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.795, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-737996efc6fdad85", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#14\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#14\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-760a22f013c95c19\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/14\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/14\\nTitle: feat(A2+A3): upload progress bar and 60s calm copy during scan\\nBody:\\n## A2 \u2014 Upload progress bar\\n\\nReplaces the silent `fetch()` PUT with an XHR-based upload (`putWithProgress`) that fires `onprogress` events. During the R2 upload phase:\\n- Shows `\ud83d\udce4 Uploading your PDF\u2026` heading\\n- Orange progress bar fills 0\u2192100%\\n- Percentage counter below the bar\\n- \\\"do not close this tab\\\" instruction\\n\\nOnce upload hits 100%, `uploadProgress` is set to `null` and the existing scan spinner/checks UI takes over as before.\\n\\n## A3 \u2014 Calm copy after 60 seconds\\n\\nAfter `checkElapsedSec >= 60`, the bottom copy in the scan phase changes from:\\n> \\\"Most scans finish in under 90 seconds\\\"\\n\\nto:\\n> \\\"Larger files can take 2\u20133 minutes. Keep this tab open while we finish your scan.\\\"\\n\\nText also brightens slightly (`rgba(255,255,255,0.55)` vs `0.3`) so it reads as an active reassurance, not a footnote.\\n\\n## Files changed\\n- `src/app/kdp-pdf-checker/page.tsx` only\\n\\n## What was NOT touched\\n- No API routes\\n- No worker logic\\n- No R2 contract\\n- No upl\"\n  },\n  {\n    \"id\": \"github-feedback-comment-ccfefc452e834b47\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/14#issuecomment-4335915158\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/14#issuecomment-4335915158\\nTitle: \\nBody:\\n[vc]: #5nfmOvcyiN9qCu6HgbFexsbDpXj2AH6JDhVRAzUqq5M=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNU\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-d3bc1415f2d5a90a", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433921, "scanner": "foundry_dataset", "fingerprint": "0de410ee192a2a34c672e0d2b81f4c283a0dc34f02e63d154d072cc185dd8f4d", "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": "QZEE777/LayoutForge#13", "human_labels": ["data_schema_persistence", "deployment_env_gap", "ui_or_frontend"], "issue_number": "13", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.812, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-76dcc59167caa9fd", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#13\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#13\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'data_schema_persistence': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fd90772f4aa59b24\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/13\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/13\\nTitle: feat: resume banner \u2014 surface completed reports on return visit\\nBody:\\n## What this does\\nIf a user's tab closes or the 5-min client poll times out while the worker is still running, the report gets completed but the user loses the URL. This PR surfaces a banner on next visit: **\\\"Your report is ready \u2014 View it now \u2192\\\"**\\n\\n## How it works\\n\\n**localStorage key:** `m2p_resume_check`\\n\\n1. **Polling starts** \u2192 `{ checkId, ctxParams, ts }` written to localStorage\\n2. **Scan completes (redirect)** \u2192 localStorage cleared before `router.push`\\n3. **On page mount** \u2192 reads localStorage, polls `/api/print-ready-check-status` once:\\n   - `done` \u2192 sets `resumeUrl`, clears localStorage, shows banner\\n   - anything else \u2192 silent, no banner\\n4. **24-hour expiry** \u2192 stale entries auto-purge on next visit\\n5. **Dismiss button** \u2192 clears `resumeUrl` state only (no side effects)\\n\\n## Files changed\\n- `src/app/kdp-pdf-checker/page.tsx` only\\n\\n## What was NOT touched\\n- No API routes modified\\n- No worker logic modified\\n- No polling beh\"\n  },\n  {\n    \"id\": \"github-feedback-comment-4a6b9d8c46218444\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/13#issuecomment-4334351038\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/13#issuecomment-4334351038\\nTitle: \\nBody:\\n[vc]: #5W89hh1+DQ5S7jD/C3tX2ZZuZ/Q7wskHBc/Or7NhVIQ=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVp\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-2357a68e52d21d19", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433920, "scanner": "foundry_dataset", "fingerprint": "1989da3447b246413da6df106304ea628ab9a105cbb528db8328e0f7e6cc8f74", "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": "QZEE777/LayoutForge#12", "human_labels": ["deployment_env_gap", "security_auth_secret", "ui_or_frontend"], "issue_number": "12", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.742, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-fe0584c965572deb", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#12\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#12\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7c87b71c2e9828dd\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/12\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/12\\nTitle: Add Manny avatar to top-left of all nav bars\\nBody:\\n## Summary\\n- Adds `MANNY AVATAR.png` (36px, `rounded-full`) to the far-left of the navbar on all live pages\\n- Updated `src/components/SiteNav.tsx` \u2014 covers all SiteShell pages (legal, blog, partners, checker app)\\n- Updated homepage header in `src/app/page.tsx`\\n- Avatar is static (no link, no click action) \u2014 purely visual brand anchor\\n- No layout, auth, routing, or global styling changes\\n\\n## Files changed\\n- `src/components/SiteNav.tsx`\\n- `src/app/page.tsx`\\n\\n## Test plan\\n- [ ] Homepage \u2014 Manny appears top-left before wordmark\\n- [ ] Legal pages (privacy, terms, refunds, cookies) \u2014 Manny appears top-left\\n- [ ] Blog, partners, checker pages \u2014 Manny appears top-left\\n- [ ] Mobile responsive \u2014 no layout shift\\n- [ ] Avatar is circular, no shadow\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-57effc8fb49c4ff8\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/12#issuecomment-4333102261\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/12#issuecomment-4333102261\\nTitle: \\nBody:\\n[vc]: #tPXtglJ5tREPwEN6spcfAbEY3jazmdp2CaDfVk4qqik=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29t\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-560c910b4a1f9259", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: QZEE777/LayoutForge"}, "properties": {"repobilityId": 433919, "scanner": "foundry_dataset", "fingerprint": "c03e638254fa9e48223528c4fdbb92ef5c3bd59f5d998d3a5bc8d2203d520582", "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": "QZEE777/LayoutForge#10", "human_labels": ["deployment_env_gap", "test_ci_gap", "ui_or_frontend"], "issue_number": "10", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.837, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-6ee62b6f4c417c48", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#10\nOutcome: ambiguous_needs_more_evidence\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#10\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b2c4c2f01d407c02\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/10\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: cto-new[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/10\\nTitle: feat: add CTO_CONNECTED constant\\nBody:\\nAdd test-cto.ts file with CTO_CONNECTED export\\n\\nPowered by [CTO.new](https://cto.new?utm_source=github_footer)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7f7f0bb57cf0cad8\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/10#issuecomment-4305922315\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/10#issuecomment-4305922315\\nTitle: \\nBody:\\n[vc]: #VbhHFt9YkrLIqTbnB0OiK6pWE+n+OXVs0vrhnQA7Zx8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3F6ZWU3NzdzLXByb2plY3RzL2xheW91dC1mb3JnZS9BVURneGdEWk5BeXloeExRVmE3bVRTTWRDUWJBIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n\\n<details><summary>1 Skipped Deployment</summary>\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [layout-forge](https://vercel.com/qzee777s-projects/layout-forge) | ![Ignored](https://vercel.com/static/status/canceled.svg) [Ignored](https://vercel.com/qzee777s-projects/layout-forge/AUDgxgDZNAyyhxLQVa7mTSMdCQbA) |  | Apr 23, 2026 4:00pm |\\n</details>\\n\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-a1c45e1d733246e6\",\n    \"filename\": \"src/lib/\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-assumption_checks-2788fce65baf73ea", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 457646, "scanner": "foundry_dataset", "fingerprint": "510bc11062cf4875ca9c0faba14374dca5c2f9755a14e2f46296a707baaba133", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "ui_or_frontend": 1, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 20, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#11", "issue_number": "11", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-6dd380fccc5b65f5", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 5}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#11\nRepo: QZEE777/LayoutForge\nIssue/PR number: 11\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-fef3d82e2b60a77e", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: QZEE777/LayoutForge"}, "properties": {"repobilityId": 457645, "scanner": "foundry_dataset", "fingerprint": "06d5eaf3f9fcc0ee8e5d902867ee28a611f2c15866a757ff6ee69fc8eb276e6d", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "ui_or_frontend": 1, "deployment_env_gap": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 4, "comment_has_related_commit_context": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"ambiguous_needs_more_evidence": 8}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#10", "issue_number": "10", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-77a957b812a4fa2a", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"ui_or_frontend": 5}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#10\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#10\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#10\nRepo: QZEE777/LayoutForge\nIssue/PR number: 10\nGraph consistency label: supported_by_high_confidence_link\nNodes: 14\nEdges: 22\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 4, 'comment_has_related_commit_context': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1, 'verification_or_tests': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-84e87b3ba1056fdb", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: QZEE777/LayoutForge"}, "properties": {"repobilityId": 452707, "scanner": "foundry_dataset", "fingerprint": "7ced1e2ff25810ffa221368c4536c2972f1e22a8246bd0edf2bbe9d6b753ee80", "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": {"deployment_env_gap": 1, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#4", "issue_number": "4", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-e26da22cb86aec95", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "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: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#4\nRepo: QZEE777/LayoutForge\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-ee7acdc54cf404bd", "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": "QZEE777/LayoutForge", "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: QZEE777/LayoutForge"}, "properties": {"repobilityId": 452706, "scanner": "foundry_dataset", "fingerprint": "c6a728e4aab6358443a3270ee6c8c8f1efa49deda6e08e2a97426eed054a20ca", "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": {"deployment_env_gap": 1, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-65c18b4e4f64a7d3", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "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: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#3\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#3\nRepo: QZEE777/LayoutForge\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-8111cd6427947af9", "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": "QZEE777/LayoutForge", "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: QZEE777/LayoutForge"}, "properties": {"repobilityId": 452705, "scanner": "foundry_dataset", "fingerprint": "f61b599da8f18aeaccb7db8494b9da9ce79d92be8a0eef700522ef4f6be946a4", "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": {"data_schema": 1, "commit_general": 1, "ui_or_frontend": 2, "deployment_env_gap": 1, "data_schema_persistence": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 6, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 27, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 3, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 16, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#13", "issue_number": "13", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-8056c15faf88a445", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"ui_or_frontend": 10}}, "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: supported_by_high_confidence_link\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#13\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: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#13\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#13\nRepo: QZEE777/LayoutForge\nIssue/PR number: 13\nGraph consistency label: supported_by_high_confidence_link\nNodes: 16\nEdges: 27\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'ui_or_frontend': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'commit_general': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-7ec022d2cdfd14e2", "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": "QZEE777/LayoutForge", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441526, "scanner": "foundry_dataset", "fingerprint": "4bea9478062b135522e4a278b2b51b92f642d778623e050192dd38ff1346af85", "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": "QZEE777/LayoutForge#6", "human_labels": ["deployment_env_gap", "runtime_failure", "ui_or_frontend"], "issue_number": "6", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-ea2f69acffa46416", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#6\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#6\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d683d151613d5126\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/6\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: railway-app[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/6\\nTitle: Temporarily disable S3 fallback in get_pdf_path for debugging\\nBody:\\n## Problem\\n\\nThe `/annotate/` endpoint is returning 500 errors with no exception logged, suggesting the failure occurs before the endpoint handler runs. The S3 fallback in `get_pdf_path()` in `storage.py` is the prime suspect \u2014 it constructs a boto3 client and performs a network call that could raise an unhandled exception or hang silently.\\n\\n## Solution\\n\\nReplaced the entire S3 fallback block (boto3 client construction, `get_object` call, and temp-file write) with an immediate `logger.warning(\\\"get_pdf_path_local_miss\\\", ...)` + `return None`. This makes any request whose PDF is not on local disk return a clean 404 instead of a 500, confirming or ruling out the S3 path as the source of the error. Also removed the now-unused `boto3` and `tempfile` imports. The original S3 logic is straightforward to restore once the root cause is identified.\\n\\n### Changes\\n- **Modified** `kdp-preflight-engine/app/storage.py`\\n\\n---\\n*Generated by [Railway](ht\"\n  },\n  {\n    \"id\": \"github-feedback-comment-238c15a2c4b7d53f\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/6#issuecomment-4251520895\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/6#issuecomment-4251520895\\nTitle: \\nBody:\\n[vc]: #f6st1DWzCGQm8nXbgwEmqKltKfPtDu9imQC6pEKor6o=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImx\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-c0dd647b68807dbf", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441525, "scanner": "foundry_dataset", "fingerprint": "d97541679d01ff2c1fa4b6924c40705c0d96e7ee19c08b8997a8b7b8a7e72310", "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": "QZEE777/LayoutForge#5", "human_labels": ["deployment_env_gap", "runtime_failure"], "issue_number": "5", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-c1960ef0626d9499", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#5\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#5\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b834c0f2195b40c5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/5\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: railway-app[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/5\\nTitle: Add explicit error logging to annotate endpoint\\nBody:\\n## Problem\\n\\nThe `/annotate/{job_id}` endpoint was silently swallowing exceptions from `annotate_pdf_inline()`. The try/except caught the error and re-raised it as an HTTPException, but FastAPI's default 500 handler does not log the original traceback, making it impossible to diagnose failures from logs alone.\\n\\n## Solution\\n\\nAdded `structlog` import and a module-level `logger = structlog.get_logger(__name__)`. In the except branch, `logger.exception(...)` is now called before the HTTPException is raised, which emits the full traceback along with structured `job_id` and `error` fields. A `logger.info(...)` call was also added on the happy path so successful annotations are observable in the log stream.\\n\\n### Changes\\n- **Modified** `kdp-preflight-engine/app/api/annotate.py`\\n\\n---\\n*Generated by [Railway](https://railway.com)*\"\n  },\n  {\n    \"id\": \"github-feedback-comment-e5bd7d8bb112cb90\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/5#issuecomment-4251316866\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/5#issuecomment-4251316866\\nTitle: \\nBody:\\n[vc]: #zi1gIZmKgwyQzE0itpjcnucWnN8So3qcLxyNAvi1y+U=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3F6ZWU3NzdzLXByb2plY3\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-fcf1a158f188247f", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441524, "scanner": "foundry_dataset", "fingerprint": "0d9a976ef4f85140e588004b4e8adb8a5b859860857108e02bd9b9a62499a0a2", "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": "QZEE777/LayoutForge#4", "human_labels": ["data_schema_persistence", "deployment_env_gap"], "issue_number": "4", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4546f55ec490fadc", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#4\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#4\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f1348b0716e12017\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/4\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: railway-app[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/4\\nTitle: Support reading PDFs from S3/R2 in annotation endpoint\\nBody:\\n## Problem\\n\\nThe `/annotate/{job_id}` endpoint called `get_local_path()` exclusively, so it returned a 404 \\\"PDF not found\\\" whenever the file was not present on local disk \u2014 even though the same PDF may have been stored in S3/R2. Because `store_upload_local()` always writes to disk the file is typically present right after upload, but any deployment where the annotate request lands on a different instance (or after a restart that cleared the local volume) would fail.\\n\\n## Solution\\n\\nAdded `get_pdf_path(job_id)` to `storage.py`. It first checks local disk via the existing `get_local_path()` (zero overhead for the common case), and if the file is absent it downloads it from S3/R2 using the same boto3 credentials already used by `annotate_pdf_inline`, writing the bytes to a `NamedTemporaryFile` and returning that path. Updated `annotate.py` to import and call `get_pdf_path()` instead of `get_local_path()`, so annotation works regardless o\"\n  },\n  {\n    \"id\": \"github-feedback-comment-210eb61a10f2d9b3\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/4#issuecomment-4251224651\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/4#issuecomment-4251224651\\nTitle: \\nBody:\\n[vc]: #ph4Umy7tFNwPhUJd2CIAABWRn4uB3C8u8ZaSwuwmRvk=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVk\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-51572eb2ef9ba755", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441523, "scanner": "foundry_dataset", "fingerprint": "8c482853863814b6f3216efce04e11a4f039c6cb7d578d08f3dc7f52ba4193b4", "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": "QZEE777/LayoutForge#3", "human_labels": ["data_schema_persistence", "deployment_env_gap"], "issue_number": "3", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4dfbf2b6b886a996", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#3\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#3\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3ab64cc80e6c55c9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/3\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: railway-app[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/3\\nTitle: Set storage provider to s3 by default\\nBody:\\n## Problem\\n\\nThe `storage_provider` setting in `kdp-preflight-engine/app/config.py` defaulted to `\\\"local\\\"`, so unless `STORAGE_PROVIDER=s3` was explicitly set as an environment variable, the service stored uploaded PDFs on ephemeral local disk. When the `/annotate/{job_id}` endpoint ran \u2014 potentially in a different container or after a restart \u2014 `get_local_path` returned nothing and the endpoint returned a 500 because the file no longer existed.\\n\\n## Solution\\n\\nChanged the default value of `storage_provider` from `\\\"local\\\"` to `\\\"s3\\\"` so the service uses R2/S3 storage by default, consistent with the S3 credentials already configured in Railway. The environment variable `STORAGE_PROVIDER` can still override this if local storage is ever needed explicitly.\\n\\n### Changes\\n- **Modified** `kdp-preflight-engine/app/config.py`\\n\\n---\\n*Generated by [Railway](https://railway.com)*\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7a2de4ad5675e5cb\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/3#issuecomment-4251099923\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/3#issuecomment-4251099923\\nTitle: \\nBody:\\n[vc]: #Z7Len+LsKmZDhh3w00I4GaMUYJNg1EcGiSwhxEcxeps=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwia\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-475474b8d234e54b", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441522, "scanner": "foundry_dataset", "fingerprint": "55b78bc110d874d8acf30385382a8b852ac449d4f0a43c3c3fabede247098907", "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": "QZEE777/LayoutForge#27", "human_labels": ["dependency_or_build", "deployment_env_gap", "runtime_failure"], "issue_number": "27", "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": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-886f0c5eb756a4fc", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#27\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: QZEE777/LayoutForge#27\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f17e050921edf15a\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/27\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/27\\nTitle: build(deps): bump the npm_and_yarn group across 2 directories with 2 updates\\nBody:\\nBumps the npm_and_yarn group with 1 update in the / directory: [@opentelemetry/core](https://github.com/open-telemetry/opentelemetry-js).\\nBumps the npm_and_yarn group with 1 update in the /kdp-preflight-engine/frontend directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).\\n\\nUpdates `@opentelemetry/core` from 2.6.0 to 2.8.0\\n<details>\\n<summary>Release notes</summary>\\n<p><em>Sourced from <a href=\\\"https://github.com/open-telemetry/opentelemetry-js/releases\\\">@\u200bopentelemetry/core's releases</a>.</em></p>\\n<blockquote>\\n<h2>v2.8.0</h2>\\n<h2>2.8.0</h2>\\n<h3>:rocket: Features</h3>\\n<ul>\\n<li>feat(sdk-trace-base): pretty-print <code>SpanImpl</code>, <code>Tracer</code>, and <code>BasicTracerProvider</code> via <code>util.inspect</code> so they render through <code>diag</code> and <code>console.log</code> <a href=\\\"https://redirect.github.com/open-telemetry/opentelemetry-js/pull/6690\\\">#6690</a> <a href=\\\"https://gith\"\n  },\n  {\n    \"id\": \"github-feedback-comment-45ec85adf05c7eb7\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/27#issuecomment-4733112462\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/27#issuecomment-4733112462\\nTitle: \\nBody:\\n[vc]: #QlxCMKV9U77qNR+NGMPAy6aZWC99ZfQQuZ4wXBMvTZ8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWG\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-998d7cbbc192c67f", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441521, "scanner": "foundry_dataset", "fingerprint": "c8162fe30b2efa52bd28641d72939a1544825b4719f56346cbdba82cd49d9da9", "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": "QZEE777/LayoutForge#26", "human_labels": ["dependency_or_build", "deployment_env_gap", "human_feedback_general", "security_auth_secret"], "issue_number": "26", "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": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4db2d7f51676b7a6", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\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: QZEE777/LayoutForge#26\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 2, 'neutral': 1}\nChanged file labels: {'dependency_or_build': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-20297a5d1cb18290\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/26\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/26\\nTitle: build(deps-dev): bump vite from 8.0.10 to 8.0.16 in the npm_and_yarn group across 1 directory\\nBody:\\nBumps the npm_and_yarn group with 1 update in the /kdp-preflight-engine/frontend directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).\\n\\nUpdates `vite` from 8.0.10 to 8.0.16\\n<details>\\n<summary>Release notes</summary>\\n<p><em>Sourced from <a href=\\\"https://github.com/vitejs/vite/releases\\\">vite's releases</a>.</em></p>\\n<blockquote>\\n<h2>v8.0.16</h2>\\n<p>Please refer to <a href=\\\"https://github.com/vitejs/vite/blob/v8.0.16/packages/vite/CHANGELOG.md\\\">CHANGELOG.md</a> for details.</p>\\n<h2>v8.0.15</h2>\\n<p>Please refer to <a href=\\\"https://github.com/vitejs/vite/blob/v8.0.15/packages/vite/CHANGELOG.md\\\">CHANGELOG.md</a> for details.</p>\\n<h2>v8.0.14</h2>\\n<p>Please refer to <a href=\\\"https://github.com/vitejs/vite/blob/v8.0.14/packages/vite/CHANGELOG.md\\\">CHANGELOG.md</a> for details.</p>\\n<h2>v8.0.13</h2>\\n<p>Please refer to <a href=\\\"https://github.com/vitejs/vite/blob/v8.0.13/packages/vite/CHA\"\n  },\n  {\n    \"id\": \"github-feedback-comment-6faf7add202424f9\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/26#issuecomment-4716197422\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/26#issuecomment-4716197422\\nTitle: \\nBody:\\n[vc]: #xg/AxvAiG0A8jJKd+3aiXk8MQiSjVzXk/dOj9W9Y5Do=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-dbc75657e369045e", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441520, "scanner": "foundry_dataset", "fingerprint": "edbe92217f24b3f7090b8d65f57ddda5852f9145656cfddb49f71cad9329a83c", "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": "QZEE777/LayoutForge#25", "human_labels": ["dependency_or_build", "deployment_env_gap", "security_auth_secret"], "issue_number": "25", "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": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-43632989b285461b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#25\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: QZEE777/LayoutForge#25\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-51bb45cd3006fcb0\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/25\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: dependabot[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/25\\nTitle: build(deps): bump the npm_and_yarn group across 1 directory with 2 updates\\nBody:\\nBumps the npm_and_yarn group with 2 updates in the / directory: [picomatch](https://github.com/micromatch/picomatch) and [fast-xml-builder](https://github.com/NaturalIntelligence/fast-xml-builder).\\n\\nUpdates `picomatch` from 4.0.3 to 4.0.4\\n<details>\\n<summary>Release notes</summary>\\n<p><em>Sourced from <a href=\\\"https://github.com/micromatch/picomatch/releases\\\">picomatch's releases</a>.</em></p>\\n<blockquote>\\n<h2>4.0.4</h2>\\n<p>This is a security release fixing several security relevant issues.</p>\\n<h2>What's Changed</h2>\\n<ul>\\n<li>Fix for <a href=\\\"https://github.com/micromatch/picomatch/security/advisories/GHSA-c2c7-rcm5-vvqj\\\">CVE-2026-33671</a></li>\\n<li>Fix for <a href=\\\"https://github.com/micromatch/picomatch/security/advisories/GHSA-3v7f-55p6-f55p\\\">CVE-2026-33672</a></li>\\n</ul>\\n<p><strong>Full Changelog</strong>: <a href=\\\"https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4\\\">https://github.com/micromatch/pico\"\n  },\n  {\n    \"id\": \"github-feedback-comment-ed83e93a06258535\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/25#issuecomment-4408127026\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/25#issuecomment-4408127026\\nTitle: \\nBody:\\n[vc]: #kzgjZh6kAd7IKhZFiMJVkiGGpow2sydLcwiKAqnl1Ss=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVUR\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-6ea79dab067340aa", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441519, "scanner": "foundry_dataset", "fingerprint": "5f1be897210c498902f02c9f40340c78a5531d3e7a3ab58c8c1c542e57039434", "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": "QZEE777/LayoutForge#20", "human_labels": ["deployment_env_gap", "mock_placeholder", "ui_or_frontend"], "issue_number": "20", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.795, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-119f73b4061710d1", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#20\nOutcome: ambiguous_needs_more_evidence\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: QZEE777/LayoutForge#20\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'mock_placeholder': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-61c7eb3913825b5b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/20\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: QZEE777 (User)\\nURL: https://github.com/QZEE777/LayoutForge/pull/20\\nTitle: feat: Title & Metadata Check tool v1\\nBody:\\n## What this is\\nReplaces the \\\"Coming Soon\\\" placeholder at `/title-metadata-check` with a fully working free tool. No backend, no credits, no login \u2014 instant client-side results.\\n\\n## Files changed\\n| File | Change |\\n|---|---|\\n| `src/lib/kdpMetadataRules.ts` | **New** \u2014 pure rules engine, zero imports |\\n| `src/app/title-metadata-check/page.tsx` | **Replaced** \u2014 full tool page |\\n\\n## Rules engine (`kdpMetadataRules.ts`)\\nPure functions, no dependencies. Checks:\\n\\n| Rule | Severity |\\n|---|---|\\n| Character limits (title \u2264200, subtitle \u2264200, keyword \u226450) | Error |\\n| ALL CAPS title (\u226512 letter chars, no lowercase) | Warning |\\n| Risky promotional terms (#1, bestseller, free, guaranteed, award-winning, Amazon, Kindle, NYT, must-read, miracle, cure, clinically proven, doctor recommended, get rich) | Warning |\\n| Misleading claims (the only, scientifically proven, secrets, world's best) | Warning |\\n| Series numbering in title | Warning |\\n| Subtitle duplicating title (>70% word o\"\n  },\n  {\n    \"id\": \"github-feedback-comment-cb7afd08f039b912\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/20#issuecomment-4349714276\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/20#issuecomment-4349714276\\nTitle: \\nBody:\\n[vc]: #0ZkB7HXtpkqr9ZnzEDlOT5yewR/fsIppF6Eq8UTqxiU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHW\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-4571d5876cf80aa5", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441518, "scanner": "foundry_dataset", "fingerprint": "01779e9d05ce2be8cd348c643188972e7fafe476cfb440b2f999293b6dab7418", "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": "QZEE777/LayoutForge#11", "human_labels": ["deployment_env_gap", "test_ci_gap", "ui_or_frontend"], "issue_number": "11", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-111d684cab476a75", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#11\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#11\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d81223453a758f4d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/11\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: cto-new[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/11\\nTitle: Add test-cto.ts\\nBody:\\nAdds a new file `src/lib/test-cto.ts` to verify CTO connection.\\n\\nPowered by [CTO.new](https://cto.new?utm_source=github_footer)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-6118d713da8c937e\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/11#issuecomment-4313211704\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/11#issuecomment-4313211704\\nTitle: \\nBody:\\n[vc]: #+ycWPqpTFePBXqdm7I0+EhXNczU9M4wWSZAM1Yc458w=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgxa0o0VSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3F6ZWU3NzdzLXByb2plY3RzL2xheW91dC1mb3JnZS9EWDNBMmRiRmk1OG52V0dRRVNxUVBuSHZpYkg5IiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n\\n<details><summary>1 Skipped Deployment</summary>\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [layout-forge](https://vercel.com/qzee777s-projects/layout-forge) | ![Ignored](https://vercel.com/static/status/canceled.svg) [Ignored](https://vercel.com/qzee777s-projects/layout-forge/DX3A2dbFi58nvWGQESqQPnHvibH9) |  | Apr 24, 2026 0:40am |\\n</details>\\n\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-0bbd1311f29d5d07\",\n    \"filename\": \"src/lib/test-c\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-1bb208d64c63fc58", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: QZEE777/LayoutForge"}, "properties": {"repobilityId": 441517, "scanner": "foundry_dataset", "fingerprint": "0ac4f634f5ba0bd40ff1a35559fc6fe35207f853a2397e15340bb831ed215373", "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": "QZEE777/LayoutForge#1", "human_labels": ["dependency_or_build", "deployment_env_gap", "security_auth_secret"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-b7f7a87708164c2c", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 7, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: QZEE777/LayoutForge#1\nRepo: QZEE777/LayoutForge\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-73c9c473d065974f\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/1\\nTitle: Fix React Server Components CVE vulnerabilities\\nBody:\\n> [!IMPORTANT]\\n> This is an automatic PR generated by Vercel to help you with patching efforts. We can't guarantee it's comprehensive, and it may contain mistakes. Please review our [guidance](https://vercel.link/additional-checks) before merging these changes.\\n\\nA critical remote code execution (RCE) vulnerability in React Server Components, impacting frameworks such as Next.js, was identified in the project [layout-forge](https://vercel.com/qzee777s-projects/layout-forge). The vulnerability enables unauthenticated RCE on the server via insecure deserialization in the React Flight protocol.\\n\\nThis issue is tracked under:\\n\\n- GitHub Security Advisory: [GHSA-9qr9-h5gf-34mp](https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp)\\n- React Advisory: [CVE-2025-55182](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)\\n- Next.js Advisory: [CVE-2025-66478](https://nextjs.org/blog/CVE-2025-66478)\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-2608ffce785aec59\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/QZEE777/LayoutForge/pull/1#issuecomment-3941396066\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: QZEE777/LayoutForge\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/QZEE777/LayoutForge/pull/1#issuecomment-3941396066\\nTitle: \\nBody:\\n[vc]: #ZEK8EoaqWXemGPM2e5eDfVyoCe/WJ3RlscS7vYqPPt8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJsYXlvdXQtZm9yZ2UiLCJwcm9qZWN0SWQiOiJwcmpfUXNUNzBSeVpaVURnMVgxYXNJVmxHWGgx\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "comment-chain-pattern-bad_chains-0307af9b66f7b2ea", "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": "QZEE777/LayoutForge", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge"}, "properties": {"repobilityId": 454826, "scanner": "foundry_dataset", "fingerprint": "6dbadfde1341bf974f931e3f0703099d6c77253d5be2a5243736967765e29cfb", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 4, "security_auth_secret": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 41, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "thread_touches_file": 4, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 3, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 19, "node_types": {"repo": 1, "thread": 1, "comment": 3, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#26", "issue_number": "26", "quality_tiers": {"unresolved": 5}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-de30f4816adfe071", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 24}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#26\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#26\nRepo: QZEE777/LayoutForge\nIssue/PR number: 26\nGraph consistency label: needs_more_evidence\nNodes: 19\nEdges: 41\nNode types: {'link_quality': 5, 'pr_file': 4, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 12, 'chain_has_link_quality': 5, 'thread_touches_file': 4, 'issue_chain_touches_file': 4, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'dependency_or_build': 4, 'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-e140fa35dd2c8e0a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "QZEE777/LayoutForge", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge"}, "properties": {"repobilityId": 454825, "scanner": "foundry_dataset", "fingerprint": "7f0b24d8307c55f5858372f0403ee98ffdae8b3784fe98017cd79649304c5e3f", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#25", "issue_number": "25", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-46f053d3a46446b1", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#25\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#25\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#25\nRepo: QZEE777/LayoutForge\nIssue/PR number: 25\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-ac31edde7c907be3", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "QZEE777/LayoutForge", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge"}, "properties": {"repobilityId": 454824, "scanner": "foundry_dataset", "fingerprint": "4c984abe2aee6d2a3cadd64eca022de6e54f163b601d6804828308fa27e44aa5", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"feature": 1, "ui_or_frontend": 2, "deployment_env_gap": 1, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 4, "comment_has_related_commit_context": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"ambiguous_needs_more_evidence": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 26, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#12", "issue_number": "12", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-6f2be72459485e02", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"ui_or_frontend": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#12\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#12\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#12\nRepo: QZEE777/LayoutForge\nIssue/PR number: 12\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 4, 'ui_or_frontend': 2, 'comment_has_related_commit_context': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'feature': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 8}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-47ebc793ee22a657", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "QZEE777/LayoutForge", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: QZEE777/LayoutForge"}, "properties": {"repobilityId": 454823, "scanner": "foundry_dataset", "fingerprint": "0edda79f30f2280fc3255b1b5635327bb7426119ef79a7b5c10d73e42d196313", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 24, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-64da59056e219748", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#1\nRepo: QZEE777/LayoutForge\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 14\nEdges: 24\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-61e87636ea937ff2", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "QZEE777/LayoutForge", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: QZEE777/LayoutForge"}, "properties": {"repobilityId": 451016, "scanner": "foundry_dataset", "fingerprint": "6672ab99afdf28153446697011f161fcc6eeea9c13047a14c4576ee91c2c97c0", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"commit_general": 1, "ui_or_frontend": 2, "mock_placeholder": 1, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 4, "comment_has_related_commit_context": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"ambiguous_needs_more_evidence": 8}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 26, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "QZEE777/LayoutForge#20", "issue_number": "20", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "QZEE777/LayoutForge", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-21333472c81b9f1a", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"ui_or_frontend": 10}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#20\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: QZEE777/LayoutForge\nThread: QZEE777/LayoutForge#20\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: QZEE777/LayoutForge#20\nRepo: QZEE777/LayoutForge\nIssue/PR number: 20\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 4, 'ui_or_frontend': 2, 'comment_has_related_commit_context': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'commit_general': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 8}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/QZEE777/LayoutForge", "source_id": "graph-query-motif_query-88eafbb5b5ce4d3d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "QZEE777/LayoutForge", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-9ca44585510826af", "level": "note", "message": {"text": "Possibly dead Python function: delete_local"}, "properties": {"repobilityId": "52e4149f50c52d27", "scanner": "scanner-primary", "fingerprint": "9ca44585510826af", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/storage.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac951e2970b7a399", "level": "note", "message": {"text": "Possibly dead Python function: set_annotated_path"}, "properties": {"repobilityId": "bc475cc4684d5616", "scanner": "scanner-primary", "fingerprint": "ac951e2970b7a399", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/job_store.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ba8e3a413f67f88", "level": "note", "message": {"text": "Possibly dead Python function: set_annotated_status"}, "properties": {"repobilityId": "fd1392cc456f1707", "scanner": "scanner-primary", "fingerprint": "5ba8e3a413f67f88", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/job_store.py:91"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c11f80f51b415002", "level": "note", "message": {"text": "Possibly dead Python function: rule_image_bleed"}, "properties": {"repobilityId": "465355a2625e15dd", "scanner": "scanner-primary", "fingerprint": "c11f80f51b415002", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/image_rules.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e04add283b2a045", "level": "note", "message": {"text": "Possibly dead Python function: rule_image_resolution"}, "properties": {"repobilityId": "de01ac6736395374", "scanner": "scanner-primary", "fingerprint": "7e04add283b2a045", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/image_rules.py:69"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b909cfdaeef44adb", "level": "note", "message": {"text": "Possibly dead Python function: rule_image_color_mode"}, "properties": {"repobilityId": "d148576baa3fff0e", "scanner": "scanner-primary", "fingerprint": "b909cfdaeef44adb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/image_rules.py:103"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0feec3f83cea4825", "level": "note", "message": {"text": "Possibly dead Python function: rule_image_placement"}, "properties": {"repobilityId": "a5982943cc0e2dff", "scanner": "scanner-primary", "fingerprint": "0feec3f83cea4825", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/image_rules.py:157"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a09c851fa3eecdb7", "level": "note", "message": {"text": "Possibly dead Python function: rule_min_page_count"}, "properties": {"repobilityId": "8c019a3b2be2187c", "scanner": "scanner-primary", "fingerprint": "a09c851fa3eecdb7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:29"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-31efefa60f2185be", "level": "note", "message": {"text": "Possibly dead Python function: rule_max_page_count"}, "properties": {"repobilityId": "62f3869739eeec97", "scanner": "scanner-primary", "fingerprint": "31efefa60f2185be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:38"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-207207f3c2e99379", "level": "note", "message": {"text": "Possibly dead Python function: rule_odd_page_count"}, "properties": {"repobilityId": "d77fbdb698d3dd39", "scanner": "scanner-primary", "fingerprint": "207207f3c2e99379", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df45e034b9dc56bb", "level": "note", "message": {"text": "Possibly dead Python function: rule_allowed_trim_sizes"}, "properties": {"repobilityId": "955f4a0bea6fd651", "scanner": "scanner-primary", "fingerprint": "df45e034b9dc56bb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:94"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a650b2e75445147", "level": "note", "message": {"text": "Possibly dead Python function: rule_mixed_page_sizes"}, "properties": {"repobilityId": "5053312127ba8232", "scanner": "scanner-primary", "fingerprint": "8a650b2e75445147", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:125"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13740f73ee878cff", "level": "note", "message": {"text": "Possibly dead Python function: rule_bleed_validation"}, "properties": {"repobilityId": "22f8b69182055f67", "scanner": "scanner-primary", "fingerprint": "13740f73ee878cff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:134"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-695968d7bcd0e078", "level": "note", "message": {"text": "Possibly dead Python function: rule_pdf_version"}, "properties": {"repobilityId": "77a53f85b2e5c278", "scanner": "scanner-primary", "fingerprint": "695968d7bcd0e078", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:168"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b81fded272608b51", "level": "note", "message": {"text": "Possibly dead Python function: rule_transparency_flattening"}, "properties": {"repobilityId": "e710147e3cf736e5", "scanner": "scanner-primary", "fingerprint": "b81fded272608b51", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:178"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed067b70174c712f", "level": "note", "message": {"text": "Possibly dead Python function: rule_interactive_elements"}, "properties": {"repobilityId": "e051e72c6ec0d0a0", "scanner": "scanner-primary", "fingerprint": "ed067b70174c712f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:218"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6e2447b8547556ef", "level": "note", "message": {"text": "Possibly dead Python function: rule_orientation_consistency"}, "properties": {"repobilityId": "ee6df6b2aa77d67f", "scanner": "scanner-primary", "fingerprint": "6e2447b8547556ef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:252"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b8a702242ccc30fd", "level": "note", "message": {"text": "Possibly dead Python function: rule_rotated_pages"}, "properties": {"repobilityId": "d5b3eb331a95932f", "scanner": "scanner-primary", "fingerprint": "b8a702242ccc30fd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:275"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-279273035d92632f", "level": "note", "message": {"text": "Possibly dead Python function: rule_empty_page_detection"}, "properties": {"repobilityId": "f8a2c86f093569d6", "scanner": "scanner-primary", "fingerprint": "279273035d92632f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:318"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40e0c42638c87457", "level": "note", "message": {"text": "Possibly dead Python function: rule_trim_box_validation"}, "properties": {"repobilityId": "e3a02d2b25c597ea", "scanner": "scanner-primary", "fingerprint": "40e0c42638c87457", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/page_rules.py:351"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c94b5dd5386f3a50", "level": "note", "message": {"text": "Possibly dead Python function: rule_kdp_trim_profile"}, "properties": {"repobilityId": "fda1a55b4a34aba5", "scanner": "scanner-primary", "fingerprint": "c94b5dd5386f3a50", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/trim_rules.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da40174408c80285", "level": "note", "message": {"text": "Possibly dead Python function: rule_gutter_margin"}, "properties": {"repobilityId": "d5d359af51c6d2d0", "scanner": "scanner-primary", "fingerprint": "da40174408c80285", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:11"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70a068abcd73ed88", "level": "note", "message": {"text": "Possibly dead Python function: rule_outside_margin_min"}, "properties": {"repobilityId": "db9e75ab8f0b56bd", "scanner": "scanner-primary", "fingerprint": "70a068abcd73ed88", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:41"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-780ce6979a007762", "level": "note", "message": {"text": "Possibly dead Python function: rule_top_margin_min"}, "properties": {"repobilityId": "81429cef59f6a2c6", "scanner": "scanner-primary", "fingerprint": "780ce6979a007762", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2e2f239575953b34", "level": "note", "message": {"text": "Possibly dead Python function: rule_bottom_margin_min"}, "properties": {"repobilityId": "7bd3dc6f9d32da85", "scanner": "scanner-primary", "fingerprint": "2e2f239575953b34", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:89"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e34f972a81081f6f", "level": "note", "message": {"text": "Possibly dead Python function: rule_text_outside_trim"}, "properties": {"repobilityId": "db67170c3f8bea64", "scanner": "scanner-primary", "fingerprint": "e34f972a81081f6f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:113"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2c9adf9c0110912a", "level": "note", "message": {"text": "Possibly dead Python function: rule_safe_zone_validation"}, "properties": {"repobilityId": "66f2b9cf11292970", "scanner": "scanner-primary", "fingerprint": "2c9adf9c0110912a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/margin_rules.py:138"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-726ab68597b6a122", "level": "note", "message": {"text": "Possibly dead Python function: rule_embedded_fonts"}, "properties": {"repobilityId": "c4f0a3bce2c65db6", "scanner": "scanner-primary", "fingerprint": "726ab68597b6a122", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/rules/font_rules.py:13"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72125af874bc22fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/scripts/test-email.ts:6"}, "properties": {"repobilityId": "186f62945607b48e", "scanner": "scanner-primary", "fingerprint": "72125af874bc22fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88637c7f66bfc430", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/SocialLinks.tsx:14"}, "properties": {"repobilityId": "3c173341b4643289", "scanner": "scanner-primary", "fingerprint": "88637c7f66bfc430", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1c0ef71e8add2d49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/upload-panel.tsx:166"}, "properties": {"repobilityId": "f56250781a92ecc9", "scanner": "scanner-primary", "fingerprint": "1c0ef71e8add2d49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-24b56c95ec3c3f66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/sidebar.tsx:120"}, "properties": {"repobilityId": "f7716acee6631d80", "scanner": "scanner-primary", "fingerprint": "24b56c95ec3c3f66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-871e3c3a180514bd", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/components/dashboard/sidebar.tsx:160"}, "properties": {"repobilityId": "012b1c2c907b864c", "scanner": "scanner-primary", "fingerprint": "871e3c3a180514bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-9e8449448186b58c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/settings-panel.tsx:123"}, "properties": {"repobilityId": "91c5119d354907dc", "scanner": "scanner-primary", "fingerprint": "9e8449448186b58c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2f9e6f1031c5073", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/dashboard/scan-history-panel.tsx:105"}, "properties": {"repobilityId": "65eea016a7370fe3", "scanner": "scanner-primary", "fingerprint": "a2f9e6f1031c5073", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67dc0d5439991ed7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:71"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "67dc0d5439991ed7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f2e9bcea3bdbb94c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/blog/[slug]/page.tsx:54"}, "properties": {"repobilityId": "edc166468e8868e7", "scanner": "scanner-primary", "fingerprint": "f2e9bcea3bdbb94c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-714bf7bd833b4068", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/kdp-formatter/page.tsx:3"}, "properties": {"repobilityId": "a5790b7348c47461", "scanner": "scanner-primary", "fingerprint": "714bf7bd833b4068", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b0f70281d9e270f5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/keyword-research-pdf/page.tsx:3"}, "properties": {"repobilityId": "f8f223cfddcdfcc7", "scanner": "scanner-primary", "fingerprint": "b0f70281d9e270f5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cfff11fd86f94905", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/print-ready-check-status/route.ts:26"}, "properties": {"repobilityId": "40e9fcc98858dc29", "scanner": "scanner-primary", "fingerprint": "cfff11fd86f94905", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1db42e608f6b86c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/send-scan-nudges/route.ts:255"}, "properties": {"repobilityId": "1fe859323269267c", "scanner": "scanner-primary", "fingerprint": "1db42e608f6b86c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf2f47e9c14ab79f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/annotate-local/route.ts:23"}, "properties": {"repobilityId": "7049eb05ef46fe65", "scanner": "scanner-primary", "fingerprint": "bf2f47e9c14ab79f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb79c8f79567fece", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/kdp-pdf-check-from-preflight/route.ts:15"}, "properties": {"repobilityId": "9e921032f08705c4", "scanner": "scanner-primary", "fingerprint": "fb79c8f79567fece", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f24586a86277b68e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/preview/[id]/page.tsx:206"}, "properties": {"repobilityId": "bc888833ec1c5688", "scanner": "scanner-primary", "fingerprint": "f24586a86277b68e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e23223c67b24533", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/preview/[id]/page.tsx:3"}, "properties": {"repobilityId": "79531918991becab", "scanner": "scanner-primary", "fingerprint": "6e23223c67b24533", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d82dce803139939c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:527"}, "properties": {"repobilityId": "8d313b2589100140", "scanner": "scanner-primary", "fingerprint": "d82dce803139939c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8cab0de16986a87", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/account/page.tsx:367"}, "properties": {"repobilityId": "30e12ea70ec35bd8", "scanner": "scanner-primary", "fingerprint": "e8cab0de16986a87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9392a0f74a9e2e3a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/download/[id]/page.tsx:1389"}, "properties": {"repobilityId": "22b51c8ff970ce5e", "scanner": "scanner-primary", "fingerprint": "9392a0f74a9e2e3a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a52588b00eaefffe", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/download/[id]/page.tsx:4"}, "properties": {"repobilityId": "b3ceca9821025b20", "scanner": "scanner-primary", "fingerprint": "a52588b00eaefffe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-140a63d2a94000c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/kdp-pdf-checker/page.tsx:262"}, "properties": {"repobilityId": "433f179d2399b390", "scanner": "scanner-primary", "fingerprint": "140a63d2a94000c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8d040113da94502", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/security.ts:59"}, "properties": {"repobilityId": "34d0e7ba410dcdf2", "scanner": "scanner-primary", "fingerprint": "b8d040113da94502", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae1ca45f0791e5b1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/storage.ts:221"}, "properties": {"repobilityId": "d6490c4f2c5e8157", "scanner": "scanner-primary", "fingerprint": "ae1ca45f0791e5b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ae0fdcffb865e083", "level": "warning", "message": {"text": "Dockerfile runs as root: kdp-preflight-engine/Dockerfile"}, "properties": {"repobilityId": "49509071aabf4ede", "scanner": "scanner-primary", "fingerprint": "ae0fdcffb865e083", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-c8140216109a2fb9", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "0a8349f7dd136cbe", "scanner": "scanner-primary", "fingerprint": "c8140216109a2fb9", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/Dockerfile"}, "region": {"startLine": 2}}}]}, {"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-d9aa4149ad5a074c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:71"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "d9aa4149ad5a074c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-3d9306d8b290e729", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/blog/[slug]/page.tsx:54"}, "properties": {"repobilityId": "df5a2a4c38f975f6", "scanner": "scanner-primary", "fingerprint": "3d9306d8b290e729", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/blog/[slug]/page.tsx"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-24d42c3807fc6033", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/app/download/[id]/page.tsx:279"}, "properties": {"repobilityId": "252755b959b5b6a2", "scanner": "scanner-primary", "fingerprint": "24d42c3807fc6033", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/download/[id]/page.tsx"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-f5c6e806454f7092", "level": "warning", "message": {"text": "Install-time lifecycle script performs network/shell-sensitive actions"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "f5c6e806454f7092", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-00177a5c28610531", "level": "note", "message": {"text": "Very large file: src/app/download/[id]/page.tsx (2019 lines)"}, "properties": {"repobilityId": "380d74e8c4b3fbab", "scanner": "scanner-primary", "fingerprint": "00177a5c28610531", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3fd3fec0f0f07e5c", "level": "note", "message": {"text": "Very large file: src/app/kdp-pdf-checker/page.tsx (1197 lines)"}, "properties": {"repobilityId": "2cc7ef318b2f33c5", "scanner": "scanner-primary", "fingerprint": "3fd3fec0f0f07e5c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63afbd941c60db6f", "level": "note", "message": {"text": "Very large file: src/lib/blog.ts (1630 lines)"}, "properties": {"repobilityId": "40964c3f0e967402", "scanner": "scanner-primary", "fingerprint": "63afbd941c60db6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e6fe1511106acb5f", "level": "note", "message": {"text": "Very large file: src/lib/kdpReportEnhance.ts (1028 lines)"}, "properties": {"repobilityId": "dbbad6868dfe2b61", "scanner": "scanner-primary", "fingerprint": "e6fe1511106acb5f", "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": "0b944fe5c85361da", "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": "83cf37851d767a6e", "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": "dd02e12521588a7c", "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": "9391d374a38e21ee", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "ede0064483d03312", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "2562647910cad2c8", "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": "608f37abd9d26332", "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": "dbff18f06774aff6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f41cc24189943bf0", "level": "note", "message": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/schemas.py:33"}, "properties": {"repobilityId": "bd3914d636c990a8", "scanner": "scanner-primary", "fingerprint": "f41cc24189943bf0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c83b8fc8a4ff2a5", "level": "note", "message": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/validation_report.py:126"}, "properties": {"repobilityId": "f378c4b995088fa0", "scanner": "scanner-primary", "fingerprint": "6c83b8fc8a4ff2a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ad6da4856d4acac0", "level": "note", "message": {"text": "Legacy-named symbol `kdp_preflight_v2` in kdp-preflight-engine/app/core/kdp_rules_engine.py:13"}, "properties": {"repobilityId": "fddfaaf4eca7b9c1", "scanner": "scanner-primary", "fingerprint": "ad6da4856d4acac0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1c91f8c8ac558fa4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/PaymentGate.tsx:190"}, "properties": {"repobilityId": "3fa1ebbde9a242c4", "scanner": "scanner-primary", "fingerprint": "1c91f8c8ac558fa4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62064667b7dd2cd4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/CheckerPdfViewer.tsx:248"}, "properties": {"repobilityId": "13f2a5b4c61a5464", "scanner": "scanner-primary", "fingerprint": "62064667b7dd2cd4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65afd08cbe4d0609", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/KdpRiskSignalsPanel.tsx:32"}, "properties": {"repobilityId": "dd9ebb914cf3989a", "scanner": "scanner-primary", "fingerprint": "65afd08cbe4d0609", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-465c42a32645b824", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/HeroDemo.tsx:54"}, "properties": {"repobilityId": "102c1b1ac2015a0c", "scanner": "scanner-primary", "fingerprint": "465c42a32645b824", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dff18b12eb2c008a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/keyword-research-pdf/page.tsx:42"}, "properties": {"repobilityId": "3155d1a08a448fdb", "scanner": "scanner-primary", "fingerprint": "dff18b12eb2c008a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b63b246b8b042b3d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/manny/route.ts:106"}, "properties": {"repobilityId": "7236c633e98ad704", "scanner": "scanner-primary", "fingerprint": "b63b246b8b042b3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-468a807d9b08b102", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/route.ts:75"}, "properties": {"repobilityId": "0c51795a0a491fd2", "scanner": "scanner-primary", "fingerprint": "468a807d9b08b102", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3f3a389cddbb5ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/generate/status/route.ts:33"}, "properties": {"repobilityId": "0979ef710cead63c", "scanner": "scanner-primary", "fingerprint": "f3f3a389cddbb5ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0527b58978b602ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research-pdf/route.ts:32"}, "properties": {"repobilityId": "2e89a2c65a38fc46", "scanner": "scanner-primary", "fingerprint": "0527b58978b602ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58a31e07dbf04b73", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-job-status/route.ts:21"}, "properties": {"repobilityId": "c44d293313e26ef2", "scanner": "scanner-primary", "fingerprint": "58a31e07dbf04b73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e124f7d3e47f17b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator/route.ts:107"}, "properties": {"repobilityId": "5b75edba6b722ed6", "scanner": "scanner-primary", "fingerprint": "e124f7d3e47f17b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84314ab3d7391bd9", "level": "note", "message": {"text": "Legacy-named symbol `anchorOld` in src/app/api/cron/send-expiry-warnings/route.ts:46"}, "properties": {"repobilityId": "629dc00dcf628fbf", "scanner": "scanner-primary", "fingerprint": "84314ab3d7391bd9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b1ead7b25e7022c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/keyword-research/route.ts:37"}, "properties": {"repobilityId": "d91791d0b75ec4fe", "scanner": "scanner-primary", "fingerprint": "b1ead7b25e7022c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a3b3b73d7af8b42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-pdf-check/route.ts:64"}, "properties": {"repobilityId": "05a479eb39037a56", "scanner": "scanner-primary", "fingerprint": "0a3b3b73d7af8b42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83c808d6656669fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/cloudconvert-upload-url/route.ts:112"}, "properties": {"repobilityId": "5190fc766d05915f", "scanner": "scanner-primary", "fingerprint": "83c808d6656669fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54d0cad267c66100", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/description-generator-pdf/route.ts:47"}, "properties": {"repobilityId": "1422e889bea591f8", "scanner": "scanner-primary", "fingerprint": "54d0cad267c66100", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4be2b0db0f3a9fe4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/kdp-format-review/route.ts:135"}, "properties": {"repobilityId": "fc959758d56f5d56", "scanner": "scanner-primary", "fingerprint": "4be2b0db0f3a9fe4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-313e10314a87d31d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/page.tsx:83"}, "properties": {"repobilityId": "6fd634d22f831cca", "scanner": "scanner-primary", "fingerprint": "313e10314a87d31d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54f84e2edf9e7ab5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/preview/[id]/page.tsx:49"}, "properties": {"repobilityId": "59d7dc5df095b320", "scanner": "scanner-primary", "fingerprint": "54f84e2edf9e7ab5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-891060d6ebafcb46", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/verify/[id]/client.tsx:60"}, "properties": {"repobilityId": "4decd7d0c8ee94e7", "scanner": "scanner-primary", "fingerprint": "891060d6ebafcb46", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f7b6182f73c8cbc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/download/[id]/page.tsx:471"}, "properties": {"repobilityId": "86d0191e89c80530", "scanner": "scanner-primary", "fingerprint": "6f7b6182f73c8cbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91796641b86cac3b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/kdp-pdf-checker/page.tsx:22"}, "properties": {"repobilityId": "de6a50386493d25b", "scanner": "scanner-primary", "fingerprint": "91796641b86cac3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd1bcf8b656c63b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/annotatePdf.ts:385"}, "properties": {"repobilityId": "6c1ab6c4e24cbede", "scanner": "scanner-primary", "fingerprint": "dd1bcf8b656c63b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a81da4a1d5c009c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/lemonsqueezy.ts:29"}, "properties": {"repobilityId": "eaeb450a373fd5a5", "scanner": "scanner-primary", "fingerprint": "a81da4a1d5c009c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1a3bb1078e853ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/checkerReportPdf.ts:54"}, "properties": {"repobilityId": "8ca3a705efa6a35c", "scanner": "scanner-primary", "fingerprint": "d1a3bb1078e853ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a04efee72005d25b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/kdpConfig.ts:18"}, "properties": {"repobilityId": "2218ce4d463b2586", "scanner": "scanner-primary", "fingerprint": "a04efee72005d25b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa5af25316da646", "level": "note", "message": {"text": "16 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e0919a3f6a45e8c2", "scanner": "scanner-primary", "fingerprint": "5fa5af25316da646", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-28c288ea6b460650", "level": "error", "message": {"text": "FastAPI POST `upload_pdf` without auth dependency \u2014 kdp-preflight-engine/app/api/upload.py:21"}, "properties": {"repobilityId": "01258e7e02913d14", "scanner": "scanner-primary", "fingerprint": "28c288ea6b460650", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/api/upload.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-d94f6e8a1c7f1d98", "level": "error", "message": {"text": "FastAPI POST `trigger_annotate` without auth dependency \u2014 kdp-preflight-engine/app/api/annotate.py:21"}, "properties": {"repobilityId": "fd32ad20dc1688c7", "scanner": "scanner-primary", "fingerprint": "d94f6e8a1c7f1d98", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kdp-preflight-engine/app/api/annotate.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-badb63287c182e30", "level": "error", "message": {"text": "Dangling fetch: GET /api/credits/balance (src/components/PaymentGate.tsx:107)"}, "properties": {"repobilityId": "c7d52d1f6c66be6c", "scanner": "scanner-primary", "fingerprint": "badb63287c182e30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e99fb24ead84fd1", "level": "error", "message": {"text": "Dangling fetch: POST /api/credits/use-session (src/components/PaymentGate.tsx:127)"}, "properties": {"repobilityId": "1928b81dac4101f0", "scanner": "scanner-primary", "fingerprint": "0e99fb24ead84fd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a2de8943558e7ca", "level": "error", "message": {"text": "Dangling fetch: POST /api/verify-access (src/components/PaymentGate.tsx:190)"}, "properties": {"repobilityId": "1965ec5ff92817e8", "scanner": "scanner-primary", "fingerprint": "5a2de8943558e7ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3dab37574c0a97ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/nudge-subscribe (src/components/PaymentGate.tsx:267)"}, "properties": {"repobilityId": "b70c3882ad25efa0", "scanner": "scanner-primary", "fingerprint": "3dab37574c0a97ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63c106cdfce5d53a", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-checkout-session (src/components/PaymentGate.tsx:284)"}, "properties": {"repobilityId": "fb4dca6ae3429184", "scanner": "scanner-primary", "fingerprint": "63c106cdfce5d53a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1174c675585ae3c", "level": "error", "message": {"text": "Dangling fetch: POST /api/credits/send-code (src/components/PaymentGate.tsx:322)"}, "properties": {"repobilityId": "835d4bb6bc2718a0", "scanner": "scanner-primary", "fingerprint": "d1174c675585ae3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d363a48f3cfacd36", "level": "error", "message": {"text": "Dangling fetch: POST /api/credits/use (src/components/PaymentGate.tsx:349)"}, "properties": {"repobilityId": "9b0118f72be841b3", "scanner": "scanner-primary", "fingerprint": "d363a48f3cfacd36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52c489e7d6f65762", "level": "error", "message": {"text": "Dangling fetch: POST /api/tool-vote (src/components/DocxVoteCard.tsx:13)"}, "properties": {"repobilityId": "6acf744442378c16", "scanner": "scanner-primary", "fingerprint": "52c489e7d6f65762", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1c7e3c159a099fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-checkout-session (src/components/PackBuyButton.tsx:19)"}, "properties": {"repobilityId": "c586cd8a0ed0986d", "scanner": "scanner-primary", "fingerprint": "f1c7e3c159a099fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dc8f6c42ca0835f", "level": "error", "message": {"text": "Dangling fetch: GET /api/track-usage (src/components/UsageBanner.tsx:25)"}, "properties": {"repobilityId": "63bf894d7f384842", "scanner": "scanner-primary", "fingerprint": "9dc8f6c42ca0835f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92eedb7b07e01ccc", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/purchase-history (src/components/dashboard/settings-panel.tsx:233)"}, "properties": {"repobilityId": "b2199709454a36b9", "scanner": "scanner-primary", "fingerprint": "92eedb7b07e01ccc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fc1cc3067415770", "level": "error", "message": {"text": "Dangling fetch: GET /api/docx-meta?id=${encodeURIComponent(uploadId)} (src/app/kdp-formatter/page.tsx:64)"}, "properties": {"repobilityId": "c36465f3da467db7", "scanner": "scanner-primary", "fingerprint": "4fc1cc3067415770", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f5ad1a58b4e2c83", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/magic-link (src/app/auth/page.tsx:32)"}, "properties": {"repobilityId": "06be50fc64728669", "scanner": "scanner-primary", "fingerprint": "1f5ad1a58b4e2c83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79e8f3b75dbe558e", "level": "error", "message": {"text": "Dangling fetch: POST /api/cloudconvert-upload-url (src/app/keyword-research-pdf/page.tsx:68)"}, "properties": {"repobilityId": "dffaba779d7669d5", "scanner": "scanner-primary", "fingerprint": "79e8f3b75dbe558e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30ce4943e9a8e591", "level": "error", "message": {"text": "Dangling fetch: POST https://api.crisp.chat/v1/website/${CRISP_WEBSITE_ID}/conversation/${sessionId}/message (src/app/api/manny/route.ts:106)"}, "properties": {"repobilityId": "22d897023616592e", "scanner": "scanner-primary", "fingerprint": "30ce4943e9a8e591", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86fa78dddb03cb61", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/generate/route.ts:75)"}, "properties": {"repobilityId": "bb0f3ff42147c8cf", "scanner": "scanner-primary", "fingerprint": "86fa78dddb03cb61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c938acb5aacbc658", "level": "error", "message": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/generate/status/route.ts:33)"}, "properties": {"repobilityId": "a9db1d9937f4e140", "scanner": "scanner-primary", "fingerprint": "c938acb5aacbc658", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25e2e1613a881d91", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research-pdf/route.ts:32)"}, "properties": {"repobilityId": "18e61143e37a2b7f", "scanner": "scanner-primary", "fingerprint": "25e2e1613a881d91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2675486a023c5ac", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-job-status/route.ts:47)"}, "properties": {"repobilityId": "aca9df8b406c4757", "scanner": "scanner-primary", "fingerprint": "b2675486a023c5ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bc0794fe5a61a8c", "level": "error", "message": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${docxJobId}?include=tasks (src/app/api/cloudconvert-job-status/route.ts:77)"}, "properties": {"repobilityId": "721d072cf0e5dead", "scanner": "scanner-primary", "fingerprint": "0bc0794fe5a61a8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc04186784e22975", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:107)"}, "properties": {"repobilityId": "4a896275f5cbb243", "scanner": "scanner-primary", "fingerprint": "dc04186784e22975", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aaae534231b6dee", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cloudconvert-job-status/route.ts:164)"}, "properties": {"repobilityId": "d458eb389ccb2a8b", "scanner": "scanner-primary", "fingerprint": "7aaae534231b6dee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70eb9e3fe83fe05e", "level": "error", "message": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/jobs/${jobId}?include=tasks (src/app/api/cloudconvert-job-status/route.ts:248)"}, "properties": {"repobilityId": "ad228aaa21672e43", "scanner": "scanner-primary", "fingerprint": "70eb9e3fe83fe05e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc9289ead7303c98", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator/route.ts:107)"}, "properties": {"repobilityId": "c9b4c3994998e50e", "scanner": "scanner-primary", "fingerprint": "fc9289ead7303c98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bf96e0adf909df9", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/keyword-research/route.ts:37)"}, "properties": {"repobilityId": "4600d02e7b8796e4", "scanner": "scanner-primary", "fingerprint": "3bf96e0adf909df9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a9fb671c6bd274f", "level": "error", "message": {"text": "Dangling fetch: GET https://api.cloudconvert.com/v2/users/me (src/app/api/cc-test/route.ts:25)"}, "properties": {"repobilityId": "9840f334eefe8de6", "scanner": "scanner-primary", "fingerprint": "8a9fb671c6bd274f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95911e0941a941b7", "level": "error", "message": {"text": "Dangling fetch: POST https://api.cloudconvert.com/v2/jobs (src/app/api/cloudconvert-upload-url/route.ts:112)"}, "properties": {"repobilityId": "bc9a62e2691ac315", "scanner": "scanner-primary", "fingerprint": "95911e0941a941b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35ef22759430484a", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/description-generator-pdf/route.ts:47)"}, "properties": {"repobilityId": "9b7481f9adff2544", "scanner": "scanner-primary", "fingerprint": "35ef22759430484a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b520d9eaa5681a3c", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/kdp-format-review/route.ts:135)"}, "properties": {"repobilityId": "23b66b18ab57c630", "scanner": "scanner-primary", "fingerprint": "b520d9eaa5681a3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6bb5a72b743e108", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/pro-pack/page.tsx:49)"}, "properties": {"repobilityId": "61ba8731a0bca896", "scanner": "scanner-primary", "fingerprint": "c6bb5a72b743e108", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e59705762d2f06fb", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/summary (src/app/dashboard/page.tsx:83)"}, "properties": {"repobilityId": "825d5803806778a3", "scanner": "scanner-primary", "fingerprint": "e59705762d2f06fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c0847edfa3b255a", "level": "error", "message": {"text": "Dangling fetch: GET /api/affiliates/me (src/app/dashboard/page.tsx:84)"}, "properties": {"repobilityId": "32e1000f2c1dec9e", "scanner": "scanner-primary", "fingerprint": "2c0847edfa3b255a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2718a35650d5b5fa", "level": "error", "message": {"text": "Dangling fetch: POST /api/profile/avatar (src/app/dashboard/page.tsx:144)"}, "properties": {"repobilityId": "d80f3fa83424d128", "scanner": "scanner-primary", "fingerprint": "2718a35650d5b5fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eff0c982cd2b6fe7", "level": "error", "message": {"text": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/page.tsx:25)"}, "properties": {"repobilityId": "e7e4e13e6ad152c7", "scanner": "scanner-primary", "fingerprint": "eff0c982cd2b6fe7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dcffeeac7e5972cb", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/author-pack/page.tsx:51)"}, "properties": {"repobilityId": "56391adc91b7fb54", "scanner": "scanner-primary", "fingerprint": "dcffeeac7e5972cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9966b499219ddb00", "level": "error", "message": {"text": "Dangling fetch: GET /api/credits/balance-public?email=${encodeURIComponent(email)} (src/app/success/page.tsx:25)"}, "properties": {"repobilityId": "359bc43d54868c89", "scanner": "scanner-primary", "fingerprint": "9966b499219ddb00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b52bd0d6d26a17f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/verify-access (src/app/success/page.tsx:73)"}, "properties": {"repobilityId": "c96636e684511cd9", "scanner": "scanner-primary", "fingerprint": "b52bd0d6d26a17f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-133e3819fb620775", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-checkout-session (src/app/indie-pack/page.tsx:41)"}, "properties": {"repobilityId": "55885795dbed47ec", "scanner": "scanner-primary", "fingerprint": "133e3819fb620775", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7af7946453a6216a", "level": "error", "message": {"text": "Dangling fetch: POST /api/pdf-compress/lead (src/app/pdf-compress/page.tsx:97)"}, "properties": {"repobilityId": "7c748da4046d9559", "scanner": "scanner-primary", "fingerprint": "7af7946453a6216a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb5866042d72ae08", "level": "error", "message": {"text": "Dangling fetch: POST /api/parse (src/app/preview/[id]/page.tsx:49)"}, "properties": {"repobilityId": "523e600b0b731cd4", "scanner": "scanner-primary", "fingerprint": "bb5866042d72ae08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a989230e74361f1f", "level": "error", "message": {"text": "Dangling fetch: GET /api/generate/status?id=${id}&jobId=${jobId} (src/app/preview/[id]/page.tsx:83)"}, "properties": {"repobilityId": "9d6f889caad1ecd1", "scanner": "scanner-primary", "fingerprint": "a989230e74361f1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0b067d342bc2150", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate (src/app/preview/[id]/page.tsx:111)"}, "properties": {"repobilityId": "ec6a70560557a731", "scanner": "scanner-primary", "fingerprint": "d0b067d342bc2150", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34246929ffd7e581", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/stats (src/app/admin/page.tsx:166)"}, "properties": {"repobilityId": "2fce918c3c3544b2", "scanner": "scanner-primary", "fingerprint": "34246929ffd7e581", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cd4fda24866a685", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/leads (src/app/admin/page.tsx:210)"}, "properties": {"repobilityId": "19c5749b4ce07f86", "scanner": "scanner-primary", "fingerprint": "6cd4fda24866a685", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7812e9445c296ffd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/user-lookup?email=${encodeURIComponent(userLookupEmail.trim())} (src/app/admin/page.tsx:267)"}, "properties": {"repobilityId": "3c97a239cc1d8d7b", "scanner": "scanner-primary", "fingerprint": "7812e9445c296ffd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b8e85b135a2ed6f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/grant-credits (src/app/admin/page.tsx:352)"}, "properties": {"repobilityId": "b11d804de38b22b5", "scanner": "scanner-primary", "fingerprint": "0b8e85b135a2ed6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79205278bfcf5efd", "level": "error", "message": {"text": "Dangling fetch: GET /api/affiliates/me (src/app/verify/[id]/client.tsx:60)"}, "properties": {"repobilityId": "8aa6c15805529043", "scanner": "scanner-primary", "fingerprint": "79205278bfcf5efd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-958e08a78bf218d4", "level": "error", "message": {"text": "Dangling fetch: POST /api/my-orders/send-code (src/app/account/page.tsx:124)"}, "properties": {"repobilityId": "01c176d35c970ba8", "scanner": "scanner-primary", "fingerprint": "958e08a78bf218d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2676aa459331736f", "level": "error", "message": {"text": "Dangling fetch: POST /api/my-orders/verify (src/app/account/page.tsx:205)"}, "properties": {"repobilityId": "b7ceab330f519b0e", "scanner": "scanner-primary", "fingerprint": "2676aa459331736f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b738fe5512dab383", "level": "error", "message": {"text": "Dangling fetch: POST /api/resend-link (src/app/resend-link/page.tsx:15)"}, "properties": {"repobilityId": "95697de7e06ae1ed", "scanner": "scanner-primary", "fingerprint": "b738fe5512dab383", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac1a1e45d52c87ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/metadata/optimize (src/app/metadata/[id]/page.tsx:68)"}, "properties": {"repobilityId": "122e691c1724d1d5", "scanner": "scanner-primary", "fingerprint": "ac1a1e45d52c87ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b010bddb6f57517", "level": "error", "message": {"text": "Dangling fetch: GET /api/format-report?id=${encodeURIComponent(id)}&t=${Date.now()} (src/app/download/[id]/page.tsx:471)"}, "properties": {"repobilityId": "920ccd5a1d40ff46", "scanner": "scanner-primary", "fingerprint": "5b010bddb6f57517", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47016b7a7351ca10", "level": "error", "message": {"text": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:489)"}, "properties": {"repobilityId": "25aaadbd5dd7539e", "scanner": "scanner-primary", "fingerprint": "47016b7a7351ca10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14f181dd51300a05", "level": "error", "message": {"text": "Dangling fetch: GET /api/kdp-annotated-status?job_id=${encodeURIComponent(jobId)} (src/app/download/[id]/page.tsx:524)"}, "properties": {"repobilityId": "74a099f687f2093a", "scanner": "scanner-primary", "fingerprint": "14f181dd51300a05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a645adcd5ccf81a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/checker-annotated-email (src/app/download/[id]/page.tsx:570)"}, "properties": {"repobilityId": "935ce7b5eafd0c3c", "scanner": "scanner-primary", "fingerprint": "a645adcd5ccf81a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e9b1383227b5bb0", "level": "error", "message": {"text": "Dangling fetch: POST /api/annotate-local (src/app/download/[id]/page.tsx:620)"}, "properties": {"repobilityId": "b50c332b23a4f69e", "scanner": "scanner-primary", "fingerprint": "8e9b1383227b5bb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68496eb9ef86e2be", "level": "error", "message": {"text": "Dangling fetch: POST /api/share/click (src/app/kdp-pdf-checker/page.tsx:500)"}, "properties": {"repobilityId": "fa09e2d3dd6f5ae5", "scanner": "scanner-primary", "fingerprint": "68496eb9ef86e2be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0f7361b0798f5dc", "level": "error", "message": {"text": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(saved.checkId)} (src/app/kdp-pdf-checker/page.tsx:522)"}, "properties": {"repobilityId": "fec18d5a475e7e62", "scanner": "scanner-primary", "fingerprint": "b0f7361b0798f5dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ec3cb69b3ffd6d7", "level": "error", "message": {"text": "Dangling fetch: POST /api/create-upload-url (src/app/kdp-pdf-checker/page.tsx:576)"}, "properties": {"repobilityId": "4f70eabeef9aed30", "scanner": "scanner-primary", "fingerprint": "7ec3cb69b3ffd6d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f433aff0d06655fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/kdp-pdf-check-from-preflight (src/app/kdp-pdf-checker/page.tsx:600)"}, "properties": {"repobilityId": "26154bafd57e6315", "scanner": "scanner-primary", "fingerprint": "f433aff0d06655fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f19e4910561ca29", "level": "error", "message": {"text": "Dangling fetch: GET /api/print-ready-check-status?checkId=${encodeURIComponent(checkId)} (src/app/kdp-pdf-checker/page.tsx:633)"}, "properties": {"repobilityId": "a9b95a0274ccb690", "scanner": "scanner-primary", "fingerprint": "5f19e4910561ca29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbad03e1dda77484", "level": "error", "message": {"text": "Dangling fetch: POST /api/kdp-format-review (src/app/kdp-format-review/page.tsx:38)"}, "properties": {"repobilityId": "b83ba870a25130e4", "scanner": "scanner-primary", "fingerprint": "fbad03e1dda77484", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "6e3a6afeaba572d0", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6cde9027e257390", "level": "note", "message": {"text": "Unused endpoint: GET /file/{job_id}"}, "properties": {"repobilityId": "c730626c65d131ad", "scanner": "scanner-primary", "fingerprint": "f6cde9027e257390", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f9c4239802524087", "level": "note", "message": {"text": "Unused endpoint: POST /annotate/{job_id}"}, "properties": {"repobilityId": "43407485a7c11b2a", "scanner": "scanner-primary", "fingerprint": "f9c4239802524087", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-79d5c59fb1ed6b33", "level": "note", "message": {"text": "Unused endpoint: GET /report/{job_id}"}, "properties": {"repobilityId": "e298f8c89e9c625b", "scanner": "scanner-primary", "fingerprint": "79d5c59fb1ed6b33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}