{"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: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined unresolved feedback: walcocer1982/sophia_next"}, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_o"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined assumption checks: walcocer1982/sophia_next"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next#2\nRepo: walcocer1982/sophia_next\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: 38\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'source_or_other': 12, 'docs_or_claims': 5, 'ui_or_frontend': 11, 'api_or_backend': 6, 'dependency_or_build': 2, 'schema_or_data': 2}\n"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_docs_only_fix", "name": "Foundry mined docs only runtime fix: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined docs only runtime fix: walcocer1982/sophia_next"}, "fullDescription": {"text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#1\nRepo: walcocer1982/sophia_next\nIssue/PR number: 1\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':"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.8, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined schema ui api mismatch: walcocer1982/sophia_next"}, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_fi"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined bad chains: walcocer1982/sophia_next"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\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: 17\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 1, 'ui_or_frontend': 5, 'api_or_backend': 2, 'source_or_other': 8, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3c"}, "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: walcocer1982/sophia_next", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: walcocer1982/sophia_next"}, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1,"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c1c1e4542caeed7b", "name": "Stray `console.log` in TS/JS \u2014 auth.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 auth.ts:7"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2472b075c7dc1ac9", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-report-causes.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-report-causes.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5974feb6d746d753", "name": "Stray `console.log` in TS/JS \u2014 scripts/read-lesson-content.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-lesson-content.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b320d122c37a604a", "name": "Stray `console.log` in TS/JS \u2014 scripts/inventory-agent-instructions.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inventory-agent-instructions.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-722a2ff134d1d2a8", "name": "Stray `console.log` in TS/JS \u2014 scripts/refactor-ciclo-minado-lesson.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refactor-ciclo-minado-lesson.ts:44"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0c124156e541f27", "name": "Stray `console.log` in TS/JS \u2014 scripts/reeval-session.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reeval-session.ts:49"}, "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-171a8e2a92c5f585", "name": "Stray `console.log` in TS/JS \u2014 scripts/assign-courses-track-sedes.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-courses-track-sedes.ts:69"}, "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-6f900181a4d1c7ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/attendance-tutoria.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/attendance-tutoria.ts:49"}, "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-79a02d26b6e1a57a", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-abq-tutoria.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-abq-tutoria.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36a2834f9daf59dc", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-ai101.ts:223", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ai101.ts:223"}, "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-0025b84b7860771a", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-cetemin-carreras.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-cetemin-carreras.ts:61"}, "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-c20f8c6da8270d9f", "name": "Stray `console.log` in TS/JS \u2014 scripts/get-session-feedback.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-session-feedback.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-27d84b0212d08ac6", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-activity-order.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-activity-order.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-4adfab9f819e91b4", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-guest-users.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-guest-users.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5153bdc9ab4726ca", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-sedes-and-campaigns.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sedes-and-campaigns.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a66da980d0d5893e", "name": "Stray `console.log` in TS/JS \u2014 scripts/set-abq-tutoria-schedule.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-abq-tutoria-schedule.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-a34dfe30c87a8b2c", "name": "Stray `console.log` in TS/JS \u2014 scripts/voice-cost-report.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/voice-cost-report.ts:67"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f640fd789a7b585", "name": "Stray `console.log` in TS/JS \u2014 scripts/analyze-lessons.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-lessons.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34ce63ba3f3b3575", "name": "Stray `console.log` in TS/JS \u2014 scripts/recalculate-grades.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recalculate-grades.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5398b5136990b23b", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95ae0c8512e95479", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83"}, "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-557a58a5d3d37f1a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/learning/chat-input.tsx:203", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/learning/chat-input.tsx:203"}, "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-73c9d521cee5620e", "name": "Stray `console.log` in TS/JS \u2014 components/learning/chat-input.tsx:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/learning/chat-input.tsx:170"}, "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-348661cd2d206c2a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/learning/tutor-mode.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/learning/tutor-mode.tsx:76"}, "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-f2481604ad95e9e4", "name": "Stray `console.log` in TS/JS \u2014 components/learning/avatar-3d/sophia-talkinghead.tsx:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/learning/avatar-3d/sophia-talkinghead.tsx:128"}, "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-d6d7c699d5e49968", "name": "TODO/FIXME marker in shipping code \u2014 components/eval/assessment-session.tsx:116", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 components/eval/assessment-session.tsx:116"}, "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-6a74272877c2ce26", "name": "Stray `console.log` in TS/JS \u2014 components/eval/assessment-session.tsx:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/eval/assessment-session.tsx:112"}, "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-8728da0e88fce4c8", "name": "Stray `console.log` in TS/JS \u2014 app/api/planner/chat/route.ts:220", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/planner/chat/route.ts:220"}, "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-e35081d8694bd4c8", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/planner/[courseId]/page.tsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/planner/[courseId]/page.tsx:278"}, "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-bc92620739c95315", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/page.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/page.tsx:335"}, "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-003081a67cf6de8c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:415", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:415"}, "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-7026068d585d6c84", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/eventos/page.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/eventos/page.tsx:334"}, "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-f005368bb377da85", "name": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/programacion/page.tsx:1514", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/programacion/page.tsx:1514"}, "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-0baa51141900b31a", "name": "TODO/FIXME marker in shipping code \u2014 lib/hallucination-detector.ts:29", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 lib/hallucination-detector.ts:29"}, "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-20e304c0a4429f46", "name": "TODO/FIXME marker in shipping code \u2014 lib/lesson-parser.ts:12", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 lib/lesson-parser.ts:12"}, "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-a7f994d7dd6d8b81", "name": "Stray `console.log` in TS/JS \u2014 lib/logger.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/logger.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6563fdbedd3a7c70", "name": "Stray `console.log` in TS/JS \u2014 hooks/use-voice-chat.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 hooks/use-voice-chat.ts:153"}, "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-038f95f510f35674", "name": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-354ae04c5a342f49", "name": "Very large file: app/(protected)/programacion/page.tsx (1870 lines)", "shortDescription": {"text": "Very large file: app/(protected)/programacion/page.tsx (1870 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": "2 test file(s) for 229 source file(s) (ratio 0.01). 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 385 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 66 placeholder/mock markers across 26 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17d866d91a7c451e", "name": "Agent instruction/config may expose a secret: CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ece55f1c9c386e50", "name": "Commented-code block (5 lines) in eslint.config.mjs:20", "shortDescription": {"text": "Commented-code block (5 lines) in eslint.config.mjs:20"}, "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-ca5a60a23e465861", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/planner/resource-manager.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/planner/resource-manager.tsx: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-245a4965675e1e9f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/test-mode-banner.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/test-mode-banner.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b43202117467e5f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/chat-interface.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/chat-interface.tsx:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a99a1e4fce24efc", "name": "Commented-code block (5 lines) in components/learning/tutor-mode.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in components/learning/tutor-mode.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c89c1fc18fb2bdd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/assessments-manager.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/assessments-manager.tsx:79"}, "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-396be5faba13a376", "name": "Commented-code block (7 lines) in components/eval/assessment-session.tsx:148", "shortDescription": {"text": "Commented-code block (7 lines) in components/eval/assessment-session.tsx:148"}, "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-3e836f112c0f0200", "name": "Commented-code block (5 lines) in app/api/dashboard/[courseId]/route.ts:94", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/dashboard/[courseId]/route.ts:94"}, "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-497aa7d3ff08bd56", "name": "Commented-code block (5 lines) in app/api/chat/stream/route.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/chat/stream/route.ts:119"}, "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-39ab2fe19e6fbb2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/speak/route.ts:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/speak/route.ts: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-76413400f8df4bc0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/session/route.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/session/route.ts:59"}, "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-1806168962e82dd7", "name": "Commented-code block (5 lines) in app/api/eval/[code]/start/route.ts:56", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/eval/[code]/start/route.ts:56"}, "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-7f3000863c400eac", "name": "Commented-code block (5 lines) in app/(protected)/select-section/page.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in app/(protected)/select-section/page.tsx:35"}, "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-86780749fbbb3438", "name": "Commented-code block (5 lines) in app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:128", "shortDescription": {"text": "Commented-code block (5 lines) in app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:128"}, "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-1a07ab151ac020a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:115"}, "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-53bccf11202bc05b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/eventos/page.tsx:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/eventos/page.tsx:121"}, "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-e5bb4253f0b524cf", "name": "Commented-code block (5 lines) in app/(protected)/programacion/page.tsx:966", "shortDescription": {"text": "Commented-code block (5 lines) in app/(protected)/programacion/page.tsx:966"}, "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-63d2e40e33ad71d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/programacion/page.tsx:439", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/programacion/page.tsx:439"}, "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-eff757875d2c018c", "name": "Commented-code block (5 lines) in lib/prompt-builder.ts:235", "shortDescription": {"text": "Commented-code block (5 lines) in lib/prompt-builder.ts:235"}, "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-fa138268bcd9ec9c", "name": "Commented-code block (6 lines) in lib/hallucination-detector.ts:84", "shortDescription": {"text": "Commented-code block (6 lines) in lib/hallucination-detector.ts:84"}, "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-aa39158d04bfee21", "name": "Commented-code block (5 lines) in hooks/use-voice-chat.ts:274", "shortDescription": {"text": "Commented-code block (5 lines) in hooks/use-voice-chat.ts:274"}, "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-77a9a4505ceb5f1a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/use-voice-chat.ts:469", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/use-voice-chat.ts:469"}, "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-d0b17c8c07a7421d", "name": "8 env vars used in code but missing from .env.example", "shortDescription": {"text": "8 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AUTH_TRUST_HOST`, `CLOUDINARY_API_KEY`, `CLOUDINARY_API_SECRET`, `CLOUDINARY_CLOUD_NAME`, `NEXT_PUBLIC_ALLOW_PASTE_INPUT`, `NEXT_PUBLIC_ENABLE_3D_AVATAR`, `NODE_ENV`, `OPENAI_API_KEY`. 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}}]}}, "automationDetails": {"id": "repobility/22500"}, "properties": {"repository": "walcocer1982/sophia_next", "repoUrl": "https://github.com/walcocer1982/sophia_next", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: walcocer1982/sophia_next"}, "properties": {"repobilityId": 371360, "scanner": "foundry_dataset", "fingerprint": "c9aecd91b069a4bd1a39414fd9fbfbfb9ec062ef087641732c12a5e9e4296d14", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_or_backend": 2, "docs_or_claims": 1, "schema_or_data": 1, "ui_or_frontend": 5, "source_or_other": 8, "deployment_env_gap": 1, "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": 69, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 17, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 29, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "walcocer1982/sophia_next#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-9797dc5291b8fe77", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 10, "docs_or_claims": 5, "schema_or_data": 5, "ui_or_frontend": 25, "source_or_other": 40}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 5, 'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'schema_or_data': 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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-14e484fb8bcbf016", "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": "walcocer1982/sophia_next", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: walcocer1982/sophia_next"}, "properties": {"repobilityId": 371359, "scanner": "foundry_dataset", "fingerprint": "7e608598a0cf65fe1274f668b7aaa3be411cb209b037333eb61ceb1403a57b9f", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_or_backend": 6, "docs_or_claims": 5, "schema_or_data": 2, "ui_or_frontend": 11, "source_or_other": 12, "deployment_env_gap": 1, "dependency_or_build": 2, "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": 90, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 38, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 50, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 38, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "walcocer1982/sophia_next#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-02dd5f0cb5c8df9c", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 30, "docs_or_claims": 25, "schema_or_data": 10, "ui_or_frontend": 55, "source_or_other": 60, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#2\nRepo: walcocer1982/sophia_next\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 50\nEdges: 90\nNode types: {'pr_file': 38, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 38, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 12, 'ui_or_frontend': 11, 'api_or_backend': 6, 'docs_or_claims': 5, 'ambiguous_needs_more_evidence': 3, 'dependency_or_build': 2, 'schema_or_data': 2, '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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-020d7fc733312d8b", "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": "walcocer1982/sophia_next", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: walcocer1982/sophia_next"}, "properties": {"repobilityId": 371358, "scanner": "foundry_dataset", "fingerprint": "318cc983b53adb3cedc6e59a2d47a9291c596b05b2b02500fe7f928b21969f6d", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"docs_or_claims": 1, "deployment_env_gap": 1, "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": 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": "walcocer1982/sophia_next#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-096f1395540e1385", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 5}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#1\nRepo: walcocer1982/sophia_next\nIssue/PR number: 1\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: {'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, 'docs_or_claims': 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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-61e8b929fc604f9b", "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": "walcocer1982/sophia_next", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: walcocer1982/sophia_next"}, "properties": {"repobilityId": 313673, "scanner": "foundry_dataset", "fingerprint": "52b7fb8f5525d3373b75a67defaf8c3666add3badb0e44a201345cbe767bf134", "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": "walcocer1982/sophia_next#2", "human_labels": ["api_or_backend", "dependency_or_build", "deployment_env_gap", "docs_or_claims", "human_feedback_general", "schema_or_data", "source_or_other", "ui_or_frontend"], "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": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-3a8d2e2f66da01d0", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 2, "docs": 3, "designs": 1, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 38, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 6, "docs_or_claims": 5, "schema_or_data": 2, "ui_or_frontend": 11, "source_or_other": 12, "dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 2}, "text": "Comment chain pattern product: assumption_checks\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next#2\nRepo: walcocer1982/sophia_next\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: 38\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'source_or_other': 12, 'docs_or_claims': 5, 'ui_or_frontend': 11, 'api_or_backend': 6, 'dependency_or_build': 2, 'schema_or_data': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f1ea6fd8ca7daf4d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/2\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: walcocer1982/sophia_next\\nAuthor: bdiazc90 (User)\\nURL: https://github.com/walcocer1982/sophia_next/pull/2\\nTitle: Hito 2: Orquestador\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-aaec356ac4c7259a\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/2#issuecomment-3513926856\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: walcocer1982/sophia_next\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/walcocer1982/sophia_next/pull/2#issuecomment-3513926856\\nTitle: \\nBody:\\n[vc]: #DWHFriiG7KFqmVUkGPsWSzghuJmUJ6mZfl1e+KKA2MI=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJzb3BoaWEtbmV4dCIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJzb3BoaWEtbmV4dC1naXQtYnJ1bm8td2FsY29jZXIxOTgycy1wcm9qZWN0cy52ZXJjZWwuYXBwIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS93YWxjb2NlcjE5ODJzLXByb2plY3RzL3NvcGhpYS1uZXh0L0M5a28yQ3pGYkdUUjkyTDZxelh3ZlJ1ZkM1OFciLCJwcmV2aWV3VXJsIjoic29waGlhLW5leHQtZ2l0LWJydW5vLXdhbGNvY2VyMTk4MnMtcHJvamVjdHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCJ9XX0=\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Preview | Comments | Updated (UTC) |\\n| :--- | :----- | :------ | :------- | :------ |\\n| [sophia-next](https://vercel.com/walcocer1982s-projects/sophia-next) | ![Ready](https://vercel.com/static/status/ready.svg) [Ready](https://vercel.com/walcocer1982s-projects/\"\n  }\n]\nChanged file\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/walcocer1982/sophia_next", "source_id": "comment-chain-pattern-assumption_checks-84c736430f031357", "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": "walcocer1982/sophia_next", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: walcocer1982/sophia_next"}, "properties": {"repobilityId": 313672, "scanner": "foundry_dataset", "fingerprint": "bc4330e97fbd117e4847f1bc47bf180eab181d87c6b5c515c0383e8be51e8a1e", "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": "walcocer1982/sophia_next#1", "human_labels": ["deployment_env_gap", "docs_or_claims", "human_feedback_general"], "issue_number": "1", "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": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-3003acfeb8dcc396", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 2, "docs": 3, "designs": 1, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 1}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 2}, "text": "Comment chain pattern product: assumption_checks\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\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: walcocer1982/sophia_next#1\nRepo: walcocer1982/sophia_next\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: 1\nLabels: {'human_feedback_general': 1, 'deployment_env_gap': 1}\nPolarities: {'neutral': 1, 'bad': 1}\nChanged file labels: {'docs_or_claims': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c991461be1a16aaf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: walcocer1982/sophia_next\\nAuthor: bdiazc90 (User)\\nURL: https://github.com/walcocer1982/sophia_next/pull/1\\nTitle: add new branch and README update\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-6f084cfcec15dbbd\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/1#issuecomment-3504144785\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: walcocer1982/sophia_next\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/walcocer1982/sophia_next/pull/1#issuecomment-3504144785\\nTitle: \\nBody:\\nDeployment failed with the following error:\\n~~~\\nYou don't have permission to create a Preview Deployment for this Vercel project: sophia-next.\\n~~~\\nView Documentation: https://vercel.com/docs/accounts/team-members-and-roles\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-e718dcf912307268\",\n    \"filename\": \"README.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"modified\",\n    \"additions\": 5,\n    \"deletions\": 0,\n    \"changes\": 5,\n    \"blob_url\": \"https://github.com/walcocer1982/sophia_next/blob/82f13931eab77c7cce29c6b6412591eb64948e42/README.md\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-fb1d87b650ada4bd\", \"evidence-chain-comment_to_commit-02788fd5568bc948\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: walcocer1982/sophia_next\nGraph label: source_backed_multi_signal_graph\nNodes: 14\nEdges: 22\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 2, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 4, \"artifact_supports_design_schema_api\": 1, \"artifact_s\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/walcocer1982/sophia_next", "source_id": "comment-chain-pattern-assumption_checks-dba66c214ac7b23f", "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": "walcocer1982/sophia_next", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_docs_only_fix", "level": "error", "message": {"text": "Foundry mined docs only runtime fix: walcocer1982/sophia_next"}, "properties": {"repobilityId": 358315, "scanner": "foundry_dataset", "fingerprint": "fcac3f4ddb8e6f493003b673fe34a366f67e64e1e8863f36e22d6e5de25fb565", "category": "practices", "severity": "high", "confidence": 0.8, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Docs-only response to runtime or integration issue", "intent": "Assumption-check examples where docs or claims are not enough proof.", "labels": {"docs_or_claims": 1, "deployment_env_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "ambiguous_needs_more_evidence": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "docs_only_runtime_fix", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "docs_only_runtime_fix", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 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": "walcocer1982/sophia_next#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-e83e163a575d7b82", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"docs_or_claims": 5}}, "text": "Graph query export: Docs-only response to runtime or integration issue\nQuery id: docs_only_runtime_fix\nQuery type: motif_query\nIntent: Assumption-check examples where docs or claims are not enough proof.\nMotif: docs_only_runtime_fix\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\nEvidence:\nGraph motif: Runtime/integration complaint answered mostly with docs or claims\nMotif id: docs_only_runtime_fix\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#1\nRepo: walcocer1982/sophia_next\nIssue/PR number: 1\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: {'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, 'docs_or_claims': 1, 'unlinked_human_feedback': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Train models to reject docs-only fixes for runtime, integration, data, or security failures.\n- Add paired examples where the correct fix changes executable paths and adds verification.\nAssumption checks:\n- Do changed files include executable code or only documentation/claims?\n- Does the complaint require runtime behavior that docs cannot prove?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-034d97ec3f52354c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/docs_only_runtime_fix/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "walcocer1982/sophia_next", "source_dataset": "graph_queries/docs_only_runtime_fix", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: walcocer1982/sophia_next"}, "properties": {"repobilityId": 331172, "scanner": "foundry_dataset", "fingerprint": "43ade61ed5fee874b2e86bb72f0748511685dffb31005af1d499cd497f59b0ad", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"api_or_backend": 2, "docs_or_claims": 1, "schema_or_data": 1, "ui_or_frontend": 5, "source_or_other": 8, "deployment_env_gap": 1, "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": "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": 69, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 17, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 29, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "walcocer1982/sophia_next#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-059bcdcb473bbb7a", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 10, "docs_or_claims": 5, "schema_or_data": 5, "ui_or_frontend": 25, "source_or_other": 40}}, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 5, 'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'schema_or_data': 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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-7ce7fd80454e34ed", "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": "walcocer1982/sophia_next", "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: walcocer1982/sophia_next"}, "properties": {"repobilityId": 331171, "scanner": "foundry_dataset", "fingerprint": "e14315dda202b9aa64c2f929a4263b3eb95d088c8c11f0baac78935bc483654a", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"api_or_backend": 6, "docs_or_claims": 5, "schema_or_data": 2, "ui_or_frontend": 11, "source_or_other": 12, "deployment_env_gap": 1, "dependency_or_build": 2, "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": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 2, "ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 90, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 38, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 50, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 38, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "walcocer1982/sophia_next#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-8cd91c5647867c58", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 30, "docs_or_claims": 25, "schema_or_data": 10, "ui_or_frontend": 55, "source_or_other": 60, "dependency_or_build": 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: needs_more_evidence\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#2\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#2\nRepo: walcocer1982/sophia_next\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 50\nEdges: 90\nNode types: {'pr_file': 38, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 38, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 12, 'ui_or_frontend': 11, 'api_or_backend': 6, 'docs_or_claims': 5, 'ambiguous_needs_more_evidence': 3, 'dependency_or_build': 2, 'schema_or_data': 2, '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- 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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-7d02e76b997de663", "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": "walcocer1982/sophia_next", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: walcocer1982/sophia_next"}, "properties": {"repobilityId": 323844, "scanner": "foundry_dataset", "fingerprint": "faaebd0e32d2a92f3e1af4bda0896de5595e1fdc7bc7495fb383140e76d48637", "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": "walcocer1982/sophia_next#3", "human_labels": ["api_or_backend", "deployment_env_gap", "docs_or_claims", "schema_or_data", "security_auth_secret", "source_or_other", "ui_or_frontend"], "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": "walcocer1982/sophia_next", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-5cbf9fd48672dca3", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 2, "docs": 3, "designs": 1, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 17, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 2, "docs_or_claims": 1, "schema_or_data": 1, "ui_or_frontend": 5, "source_or_other": 8}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 2}, "text": "Comment chain pattern product: bad_chains\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#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: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\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: 17\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 1, 'ui_or_frontend': 5, 'api_or_backend': 2, 'source_or_other': 8, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3cb6c63af481f474\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/3\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: walcocer1982/sophia_next\\nAuthor: bdiazc90 (User)\\nURL: https://github.com/walcocer1982/sophia_next/pull/3\\nTitle: feat: centralizar configs AI + optimizar verification prompt\\nBody:\\n- Crear lib/ai-config.ts con 21 configuraciones centralizadas\\r\\n- Eliminar historial de verification prompt (ahorro ~200-500 tokens)\\r\\n- Actualizar 8 archivos para usar AI_CONFIG\\r\\n- Documentar arquitectura de memoria en CLAUDE.md\\r\\n- Agregar secci\u00f3n \\\"AI Config Protocol\\\" en CLAUDE.md\\r\\n\\r\\nBeneficios:\\r\\n- Single source of truth para todas las configs AI\\r\\n- Optimizaci\u00f3n de tokens en verificaci\u00f3n (-30%)\\r\\n- Documentaci\u00f3n viva con comentarios exhaustivos\\r\\n- F\u00e1cil ajuste de costos (cambiar modelo en 1 lugar)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7023f1fe6af68c20\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/walcocer1982/sophia_next/pull/3#issuecomment-3518130103\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: walcocer1982/sophia_next\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/walcocer1982/sophia_next/pull/3#issuecomment-3518130103\\nTitle: \\nBody:\\n[vc]: #vBUhRDmZ5pLvflG3/DL0gypyO6QJMoWzeIrrtMJ/moA=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJzb3BoaWEtbmV4dCIsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS93YWxjb2NlcjE5ODJzLXByb2plY3RzL3NvcGhpYS1uZXh0L0FNNDg1eGFVSnl2M1FtMzNTQnVpZ1lkeFRLTWEiLCJwcmV2aWV3VXJsIjoic29waGlhLW5leHQtZ2l0LWJydW5vLXdhbGNvY2VyMTk4MnMtcHJvamVjdHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJzb3BoaWEtbm\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/walcocer1982/sophia_next", "source_id": "comment-chain-pattern-bad_chains-00b87cb2db94f46d", "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": "walcocer1982/sophia_next", "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: walcocer1982/sophia_next"}, "properties": {"repobilityId": 335253, "scanner": "foundry_dataset", "fingerprint": "c5045d0f667a167a7550c6f6fd7e7497454e4dc82d68e96d28d941fc61b96064", "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": {"api_or_backend": 2, "docs_or_claims": 1, "schema_or_data": 1, "ui_or_frontend": 5, "source_or_other": 8, "deployment_env_gap": 1, "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": 69, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 17, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 29, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 17, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "walcocer1982/sophia_next#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "walcocer1982/sophia_next", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-3118d42067817083", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 10, "docs_or_claims": 5, "schema_or_data": 5, "ui_or_frontend": 25, "source_or_other": 40}}, "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: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: walcocer1982/sophia_next\nThread: walcocer1982/sophia_next#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: walcocer1982/sophia_next#3\nRepo: walcocer1982/sophia_next\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 29\nEdges: 69\nNode types: {'pr_file': 17, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 17, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 8, 'ui_or_frontend': 5, 'not_resolved_or_not_observed': 4, 'api_or_backend': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'schema_or_data': 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/walcocer1982/sophia_next", "source_id": "graph-query-motif_query-ab267fd843414d3e", "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": "walcocer1982/sophia_next", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-c1c1e4542caeed7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 auth.ts:7"}, "properties": {"repobilityId": "a0c5ab5fac82939a", "scanner": "scanner-primary", "fingerprint": "c1c1e4542caeed7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2472b075c7dc1ac9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-report-causes.ts:42"}, "properties": {"repobilityId": "83b648143ce5a02e", "scanner": "scanner-primary", "fingerprint": "2472b075c7dc1ac9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5974feb6d746d753", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-lesson-content.ts:21"}, "properties": {"repobilityId": "28ade7d487118548", "scanner": "scanner-primary", "fingerprint": "5974feb6d746d753", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b320d122c37a604a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inventory-agent-instructions.ts:76"}, "properties": {"repobilityId": "d8ab8aea37bbd032", "scanner": "scanner-primary", "fingerprint": "b320d122c37a604a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-722a2ff134d1d2a8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refactor-ciclo-minado-lesson.ts:44"}, "properties": {"repobilityId": "2d432ed693e705de", "scanner": "scanner-primary", "fingerprint": "722a2ff134d1d2a8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0c124156e541f27", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reeval-session.ts:49"}, "properties": {"repobilityId": "098b8d9bbd65234f", "scanner": "scanner-primary", "fingerprint": "d0c124156e541f27", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-171a8e2a92c5f585", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/assign-courses-track-sedes.ts:69"}, "properties": {"repobilityId": "92a929a711698cd9", "scanner": "scanner-primary", "fingerprint": "171a8e2a92c5f585", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f900181a4d1c7ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/attendance-tutoria.ts:49"}, "properties": {"repobilityId": "e18efd62b49c66e4", "scanner": "scanner-primary", "fingerprint": "6f900181a4d1c7ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79a02d26b6e1a57a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-abq-tutoria.ts:21"}, "properties": {"repobilityId": "efd8f20b509b6fab", "scanner": "scanner-primary", "fingerprint": "79a02d26b6e1a57a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36a2834f9daf59dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-ai101.ts:223"}, "properties": {"repobilityId": "5fe9353198d67d79", "scanner": "scanner-primary", "fingerprint": "36a2834f9daf59dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0025b84b7860771a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-cetemin-carreras.ts:61"}, "properties": {"repobilityId": "b186ada32c5523d2", "scanner": "scanner-primary", "fingerprint": "0025b84b7860771a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c20f8c6da8270d9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/get-session-feedback.ts:59"}, "properties": {"repobilityId": "b313783d98a9784a", "scanner": "scanner-primary", "fingerprint": "c20f8c6da8270d9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27d84b0212d08ac6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-activity-order.ts:26"}, "properties": {"repobilityId": "789d77af1f9b5394", "scanner": "scanner-primary", "fingerprint": "27d84b0212d08ac6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4adfab9f819e91b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup-guest-users.ts:27"}, "properties": {"repobilityId": "a8855a9fd993f06d", "scanner": "scanner-primary", "fingerprint": "4adfab9f819e91b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5153bdc9ab4726ca", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-sedes-and-campaigns.ts:14"}, "properties": {"repobilityId": "5af31291b19e72e5", "scanner": "scanner-primary", "fingerprint": "5153bdc9ab4726ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a66da980d0d5893e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-abq-tutoria-schedule.ts:23"}, "properties": {"repobilityId": "7356143641afe1ec", "scanner": "scanner-primary", "fingerprint": "a66da980d0d5893e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a34dfe30c87a8b2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/voice-cost-report.ts:67"}, "properties": {"repobilityId": "375f90d414f65685", "scanner": "scanner-primary", "fingerprint": "a34dfe30c87a8b2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f640fd789a7b585", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/analyze-lessons.ts:31"}, "properties": {"repobilityId": "2a8cc2fb0ea42ee1", "scanner": "scanner-primary", "fingerprint": "5f640fd789a7b585", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-34ce63ba3f3b3575", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/recalculate-grades.ts:20"}, "properties": {"repobilityId": "d1421edfbf8ace09", "scanner": "scanner-primary", "fingerprint": "34ce63ba3f3b3575", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5398b5136990b23b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:14"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "5398b5136990b23b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95ae0c8512e95479", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/ui/chart.tsx:83"}, "properties": {"repobilityId": "dd1e3f2d87b6f488", "scanner": "scanner-primary", "fingerprint": "95ae0c8512e95479", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-557a58a5d3d37f1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/learning/chat-input.tsx:203"}, "properties": {"repobilityId": "2c88cd4c895eb6d9", "scanner": "scanner-primary", "fingerprint": "557a58a5d3d37f1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-73c9d521cee5620e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/learning/chat-input.tsx:170"}, "properties": {"repobilityId": "10da972a5a33a421", "scanner": "scanner-primary", "fingerprint": "73c9d521cee5620e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-348661cd2d206c2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/learning/tutor-mode.tsx:76"}, "properties": {"repobilityId": "d775c9765caa0474", "scanner": "scanner-primary", "fingerprint": "348661cd2d206c2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2481604ad95e9e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/learning/avatar-3d/sophia-talkinghead.tsx:128"}, "properties": {"repobilityId": "986aa4814f66871a", "scanner": "scanner-primary", "fingerprint": "f2481604ad95e9e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6d7c699d5e49968", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 components/eval/assessment-session.tsx:116"}, "properties": {"repobilityId": "47c7831f5b88e7cc", "scanner": "scanner-primary", "fingerprint": "d6d7c699d5e49968", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6a74272877c2ce26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/eval/assessment-session.tsx:112"}, "properties": {"repobilityId": "6f4e548855be266b", "scanner": "scanner-primary", "fingerprint": "6a74272877c2ce26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8728da0e88fce4c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/planner/chat/route.ts:220"}, "properties": {"repobilityId": "f99776a2ba6c910d", "scanner": "scanner-primary", "fingerprint": "8728da0e88fce4c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e35081d8694bd4c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/planner/[courseId]/page.tsx:278"}, "properties": {"repobilityId": "a7002cb4a1614186", "scanner": "scanner-primary", "fingerprint": "e35081d8694bd4c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc92620739c95315", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/page.tsx:335"}, "properties": {"repobilityId": "fcd0b759e9d7480d", "scanner": "scanner-primary", "fingerprint": "bc92620739c95315", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-003081a67cf6de8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:415"}, "properties": {"repobilityId": "8f877cd913d61cb7", "scanner": "scanner-primary", "fingerprint": "003081a67cf6de8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7026068d585d6c84", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/eventos/page.tsx:334"}, "properties": {"repobilityId": "a95a807fcfe038bf", "scanner": "scanner-primary", "fingerprint": "7026068d585d6c84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f005368bb377da85", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/(protected)/programacion/page.tsx:1514"}, "properties": {"repobilityId": "001a41b16ed2ee5d", "scanner": "scanner-primary", "fingerprint": "f005368bb377da85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0baa51141900b31a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 lib/hallucination-detector.ts:29"}, "properties": {"repobilityId": "ee9917dd88de003c", "scanner": "scanner-primary", "fingerprint": "0baa51141900b31a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-20e304c0a4429f46", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 lib/lesson-parser.ts:12"}, "properties": {"repobilityId": "33c8f29d44890cc9", "scanner": "scanner-primary", "fingerprint": "20e304c0a4429f46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a7f994d7dd6d8b81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/logger.ts:31"}, "properties": {"repobilityId": "828e96ab86ae12d1", "scanner": "scanner-primary", "fingerprint": "a7f994d7dd6d8b81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6563fdbedd3a7c70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 hooks/use-voice-chat.ts:153"}, "properties": {"repobilityId": "e5846c987940d239", "scanner": "scanner-primary", "fingerprint": "6563fdbedd3a7c70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-038f95f510f35674", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/ui/chart.tsx:83"}, "properties": {"repobilityId": "c41c7626c87bbabe", "scanner": "scanner-primary", "fingerprint": "038f95f510f35674", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-354ae04c5a342f49", "level": "note", "message": {"text": "Very large file: app/(protected)/programacion/page.tsx (1870 lines)"}, "properties": {"repobilityId": "ece04cee00a79079", "scanner": "scanner-primary", "fingerprint": "354ae04c5a342f49", "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": "248f453beff26ea7", "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": "7b2fe92507cbfd81", "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": "7894993a13620549", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "de88e41f9cca34f8", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "bda6f6f7826121dc", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "d61b0d28e818ec9f", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "ff80955211091083", "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": "c62574e016f97a0d", "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": "22ded0bf6107deef", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-17d866d91a7c451e", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: CLAUDE.md"}, "properties": {"repobilityId": "ccce5984e58a48f0", "scanner": "scanner-primary", "fingerprint": "17d866d91a7c451e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1275}}}]}, {"ruleId": "scanner-ece55f1c9c386e50", "level": "none", "message": {"text": "Commented-code block (5 lines) in eslint.config.mjs:20"}, "properties": {"repobilityId": "725a2c7c82668167", "scanner": "scanner-primary", "fingerprint": "ece55f1c9c386e50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca5a60a23e465861", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/planner/resource-manager.tsx:112"}, "properties": {"repobilityId": "8c6740ee55c7eca2", "scanner": "scanner-primary", "fingerprint": "ca5a60a23e465861", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-245a4965675e1e9f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/test-mode-banner.tsx:41"}, "properties": {"repobilityId": "2146a4fabd0f0788", "scanner": "scanner-primary", "fingerprint": "245a4965675e1e9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b43202117467e5f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/learning/chat-interface.tsx:86"}, "properties": {"repobilityId": "339f9040a00b215a", "scanner": "scanner-primary", "fingerprint": "b43202117467e5f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0a99a1e4fce24efc", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/learning/tutor-mode.tsx:53"}, "properties": {"repobilityId": "207341696c4371b1", "scanner": "scanner-primary", "fingerprint": "0a99a1e4fce24efc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c89c1fc18fb2bdd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/assessments-manager.tsx:79"}, "properties": {"repobilityId": "c3b50c9029787b33", "scanner": "scanner-primary", "fingerprint": "3c89c1fc18fb2bdd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-396be5faba13a376", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/eval/assessment-session.tsx:148"}, "properties": {"repobilityId": "f0cf078d640011d3", "scanner": "scanner-primary", "fingerprint": "396be5faba13a376", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e836f112c0f0200", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/dashboard/[courseId]/route.ts:94"}, "properties": {"repobilityId": "70222786a1daf723", "scanner": "scanner-primary", "fingerprint": "3e836f112c0f0200", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-497aa7d3ff08bd56", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/chat/stream/route.ts:119"}, "properties": {"repobilityId": "7b957a020382fcea", "scanner": "scanner-primary", "fingerprint": "497aa7d3ff08bd56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39ab2fe19e6fbb2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/speak/route.ts:60"}, "properties": {"repobilityId": "44f3cd7a2f56c776", "scanner": "scanner-primary", "fingerprint": "39ab2fe19e6fbb2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-76413400f8df4bc0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/voice/session/route.ts:59"}, "properties": {"repobilityId": "ac78a0236ed2da6a", "scanner": "scanner-primary", "fingerprint": "76413400f8df4bc0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1806168962e82dd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/eval/[code]/start/route.ts:56"}, "properties": {"repobilityId": "cab24c9d2a534e3a", "scanner": "scanner-primary", "fingerprint": "1806168962e82dd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f3000863c400eac", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(protected)/select-section/page.tsx:35"}, "properties": {"repobilityId": "a25e234ec3f1a2aa", "scanner": "scanner-primary", "fingerprint": "7f3000863c400eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86780749fbbb3438", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:128"}, "properties": {"repobilityId": "b7e0568aaeed9d54", "scanner": "scanner-primary", "fingerprint": "86780749fbbb3438", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a07ab151ac020a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/dashboard/[courseId]/[studentId]/page.tsx:115"}, "properties": {"repobilityId": "17db42d7ca8975ab", "scanner": "scanner-primary", "fingerprint": "1a07ab151ac020a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53bccf11202bc05b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/eventos/page.tsx:121"}, "properties": {"repobilityId": "18c1b1900f368a82", "scanner": "scanner-primary", "fingerprint": "53bccf11202bc05b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5bb4253f0b524cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/(protected)/programacion/page.tsx:966"}, "properties": {"repobilityId": "4838bd757cdd7e4c", "scanner": "scanner-primary", "fingerprint": "e5bb4253f0b524cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63d2e40e33ad71d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(protected)/programacion/page.tsx:439"}, "properties": {"repobilityId": "f8b18ba032b4fd0c", "scanner": "scanner-primary", "fingerprint": "63d2e40e33ad71d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eff757875d2c018c", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/prompt-builder.ts:235"}, "properties": {"repobilityId": "0ba09c5aaacfdd61", "scanner": "scanner-primary", "fingerprint": "eff757875d2c018c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa138268bcd9ec9c", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/hallucination-detector.ts:84"}, "properties": {"repobilityId": "9a10c503374fbdb0", "scanner": "scanner-primary", "fingerprint": "fa138268bcd9ec9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa39158d04bfee21", "level": "none", "message": {"text": "Commented-code block (5 lines) in hooks/use-voice-chat.ts:274"}, "properties": {"repobilityId": "8bd515e4bfc6fb52", "scanner": "scanner-primary", "fingerprint": "aa39158d04bfee21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77a9a4505ceb5f1a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/use-voice-chat.ts:469"}, "properties": {"repobilityId": "7dc97ec315d0383e", "scanner": "scanner-primary", "fingerprint": "77a9a4505ceb5f1a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0b17c8c07a7421d", "level": "note", "message": {"text": "8 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "17fe720e8247f9df", "scanner": "scanner-primary", "fingerprint": "d0b17c8c07a7421d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}