{"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_assumption_check", "name": "Foundry mined assumption checks: rijapagu/cobranzas-guipak", "shortDescription": {"text": "Foundry mined assumption checks: rijapagu/cobranzas-guipak"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#4\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d205b800a9874a21\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \""}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: rijapagu/cobranzas-guipak", "shortDescription": {"text": "Foundry mined schema ui api mismatch: rijapagu/cobranzas-guipak"}, "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: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#4\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 4\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain':"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: rijapagu/cobranzas-guipak", "shortDescription": {"text": "Foundry mined bad chains: rijapagu/cobranzas-guipak"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#6\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e3a1d78da81745b8\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"http"}, "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: rijapagu/cobranzas-guipak", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: rijapagu/cobranzas-guipak"}, "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: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#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: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#3\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'r"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: rijapagu/cobranzas-guipak", "shortDescription": {"text": "Foundry mined mock as real or placeholder: rijapagu/cobranzas-guipak"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#6\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 6\nGraph consistency label: supported_by_high_confidence_link\nNodes: 16\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 3, 'pr_file'"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "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-9f2730c0d9c79723", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor-telegram.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor-telegram.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-8d6053dc643fe566", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor.ts:45"}, "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-ddc74291c6a468cb", "name": "Stray `console.log` in TS/JS \u2014 scripts/test-parser-extracto.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-parser-extracto.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d5a2af417b82193", "name": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/validar_gateway.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/validar_gateway.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec97401afc4bd397", "name": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/debug_numctx.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/debug_numctx.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-6aeb5932eded48b3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/asistente/AsistenteChat.tsx:432", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/asistente/AsistenteChat.tsx:432"}, "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-03fa894e541ce61a", "name": "Stray `console.log` in TS/JS \u2014 app/api/internal/cron/scan-drive-facturas/route.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/internal/cron/scan-drive-facturas/route.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-564184d57299edfa", "name": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/whatsapp/route.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/whatsapp/route.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3af37d875b2fe97", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/worker.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/worker.ts:8"}, "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-7031c56955f4ac28", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/bullmq.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/bullmq.ts:62"}, "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-4ae93c415d958d1b", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/cadencias.ts:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/cadencias.ts:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b32e623541d34e2", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/inteligencia-clientes.ts:229", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/inteligencia-clientes.ts:229"}, "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-326e9bcb1d8d45ab", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-promesas.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-promesas.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-b7defedcd8f94717", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-lote.ts:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-lote.ts:108"}, "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-86d28721f1840391", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-alertas.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-alertas.ts:171"}, "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-148077392376491e", "name": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/verificar-acuerdos.ts:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/verificar-acuerdos.ts:73"}, "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-ca2fed7bd96e96da", "name": "Privileged port 465 in use", "shortDescription": {"text": "Privileged port 465 in use"}, "fullDescription": {"text": "Port 465 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8987d6d1c30c7202", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c27c24bf7771b1e", "name": "Insecure pattern 'dangerous_innerhtml' in components/asistente/AsistenteChat.tsx:432", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/asistente/AsistenteChat.tsx:432"}, "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-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-ad58d3cd0a9074db", "name": "Very large file: lib/telegram/tools.ts (1956 lines)", "shortDescription": {"text": "Very large file: lib/telegram/tools.ts (1956 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": "12 test file(s) for 197 source file(s) (ratio 0.06). 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 176 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 177 placeholder/mock markers across 40 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, 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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db900f182a5e9804", "name": "Commented-code block (5 lines) in middleware.ts:46", "shortDescription": {"text": "Commented-code block (5 lines) in middleware.ts:46"}, "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-3a3f77918802af2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-onboarding-empresa-demo.mjs:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-onboarding-empresa-demo.mjs:28"}, "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-30634930f5030f21", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-aislamiento-empresa2.mjs:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-aislamiento-empresa2.mjs:26"}, "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-d71bf5aeae1b1f2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-importar-cartera-empresa2.mjs:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-importar-cartera-empresa2.mjs:33"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ef8e81890fa11ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_test1.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_test1.ts:63"}, "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-c33ffde9d1e87aea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_numctx.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_numctx.ts: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-ff3a0c13835bb5c0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/asistente/AsistenteChat.tsx:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/asistente/AsistenteChat.tsx:88"}, "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-6c042ffc1831fb49", "name": "Commented-code block (5 lines) in app/api/cobranzas/generar-cola/route.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cobranzas/generar-cola/route.ts:73"}, "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-d7648a0c18165e0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/page.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/page.tsx:105"}, "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-f45d9d91a7ad2488", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/plantillas/page.tsx:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/plantillas/page.tsx:166"}, "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-89a730166b23cfda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/page.tsx:508", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/page.tsx:508"}, "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-6502a7d6b679d289", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/importar-cartera/page.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/importar-cartera/page.tsx:55"}, "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-d455827f20f128f6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/empresa/page.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/empresa/page.tsx:46"}, "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-0310bee6783c9aee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/disputas/page.tsx:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/disputas/page.tsx:139"}, "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-f71d9012029ba89d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/documentos/page.tsx:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/documentos/page.tsx:85"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-74f9f50dcb9e582e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/tareas/page.tsx:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/tareas/page.tsx:120"}, "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-7c50e07b9d132dad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/cartera/page.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/cartera/page.tsx:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-62708528dbf24e51", "name": "Commented-code block (7 lines) in lib/telegram/agent.ts:235", "shortDescription": {"text": "Commented-code block (7 lines) in lib/telegram/agent.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-6c30329e8bcbd5d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/drive/client.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/drive/client.ts:30"}, "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-8826619f0908488a", "name": "Commented-code block (5 lines) in lib/conciliacion/matcher.ts:156", "shortDescription": {"text": "Commented-code block (5 lines) in lib/conciliacion/matcher.ts:156"}, "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-243e263db7aa7a0d", "name": "Commented-code block (5 lines) in lib/queue/jobs/cadencias.ts:138", "shortDescription": {"text": "Commented-code block (5 lines) in lib/queue/jobs/cadencias.ts:138"}, "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-9bbe479f3d34b077", "name": "Commented-code block (6 lines) in lib/llm/ollama.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in lib/llm/ollama.ts:63"}, "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-4d223bfdf539b12d", "name": "42 env vars used in code but missing from .env.example", "shortDescription": {"text": "42 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_MODEL`, `CANARY_CHAT_IDS`, `COBRANZAS_TELEFONO`, `CONFIG_CIPHER_KEY`, `DATOS_FALTANTES_SALDO_ALTA_DOP`, `DATOS_FALTANTES_SALDO_MIN_DOP`, `GATEWAY_AUTH_TOKEN`, `GATEWAY_BASE_URL` + 34 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18158"}, "properties": {"repository": "rijapagu/cobranzas-guipak", "repoUrl": "https://github.com/rijapagu/cobranzas-guipak", "branch": "main"}, "results": [{"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 381534, "scanner": "foundry_dataset", "fingerprint": "e08468aaca57a57fdc4d5afd21b430f94f74f6b42e1fa0ed6607e15dd98e4f98", "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": "rijapagu/cobranzas-guipak#4", "human_labels": ["agent_instruction_gap", "api_or_backend", "schema_or_data", "source_or_other"], "issue_number": "4", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.9, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-d0ecd6a2f60ae37f", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "schema_or_data": 1, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#4\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d205b800a9874a21\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/4\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/4\\nTitle: feat(asistente): cron deteccion de datos de contacto faltantes (#9)\\nBody:\\nCron diario que detecta clientes vencidos sin email/WhatsApp y crea tareas en /tareas. Cubre tarea #9 del Asistente. Migracion 024 anade DATO_FALTANTE + RESPUESTA_CLIENTE + SIN_RESPUESTA al ENUM origen (los 3 PRs proximos los usaran). Idempotente, batch queries sin N+1, umbral configurable RD\\\\. tsc limpio. Memoria: project_cobros_frontera_asistente_supervisor.md.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-8b32a4162b4c87a1\",\n    \"filename\": \"app/api/internal/cron/datos-faltantes/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 42,\n    \"deletions\": 0,\n    \"changes\": 42,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/c79a7558fa4af1fe4de45a74cad5012107055552/app%2Fapi%2Finternal%2Fcron%2Fdatos-faltantes%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-c7bf8e77c5cac910\",\n    \"filename\": \"db/migrations/024_origenes_asistente_resto.sql\",\n    \"label\": \"schema_or_data\",\n    \"status\": \"added\",\n    \"additions\": 22,\n    \"deletions\": 0,\n    \"changes\": 22,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/c79a7558fa4af1fe4de45a74cad5012107055552/db%2Fmigrations%2F024_origenes_asistente_resto.sql\"\n  },\n  {\n    \"id\": \"github-pr-file-file-08975b84849f6dcd\",\n    \"filename\": \"lib/queue/jobs/datos-faltantes.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 197,\n    \"deletions\": 0,\n    \"changes\": 197,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/c79a7558fa4af1fe4de45a74cad5012107055552\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-assumption_checks-4202efe21c2c90b2", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 381533, "scanner": "foundry_dataset", "fingerprint": "93f1edaa0dbafedd6a002aebf94fd60b90b95220b154cdfb25c4fc4925ab506e", "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": "rijapagu/cobranzas-guipak#3", "human_labels": ["api_or_backend", "schema_or_data", "security_auth_secret", "source_or_other"], "issue_number": "3", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.9, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-9ced2feacee41875", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "schema_or_data": 1, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#3\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#3\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ed5c9a5fb714299d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/3\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/3\\nTitle: feat(asistente): cron para aplicar anticipos pendientes (#8)\\nBody:\\n## Contexto\\n\\nTarea **#8 del Asistente Cobros**: aplicar saldo a favor a facturas pendientes para los 58 clientes detectados por CP-15 (cubiertos por anticipo) **y** clientes con saldo a favor parcial.\\n\\nHoy el sistema (CP-15) **excluye** estos clientes de la cobranza activa pero no avisa al equipo que tienen anticipos por aplicar. Resultado: dinero en Softec sin asignar, facturas que se ven pendientes pero realmente ya pagadas. Este PR cierra ese loop.\\n\\n## C\u00f3mo funciona\\n\\nCron nuevo `POST /api/internal/cron/aplicar-anticipos` (sugerido 7:45 AM AST, entre el cron de promesas 7:30 y el empuje matutino 8:00).\\n\\n```\\n1. obtenerSaldoAFavorPorCliente()          \u2192 Map<codigo, saldo_favor>\\n   (helper existente con CP-13 + CP-14 ya aplicados)\\n2. Filtrar saldo > UMBRAL (default RD$1,000)\\n3. Idempotencia batch: skip codigos con tarea SALDO_FAVOR activa\\n4. Softec batch: nombre + saldo_pendiente para los codigos restantes\\n5. Clasificar cobe\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-d62aecb3827d4311\",\n    \"filename\": \"app/api/internal/cron/aplicar-anticipos/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 44,\n    \"deletions\": 0,\n    \"changes\": 44,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/92d8440be0e3ebbe2f9c51baed54fbade0760017/app%2Fapi%2Finternal%2Fcron%2Faplicar-anticipos%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-647f4a20b364af46\",\n    \"filename\": \"db/migrations/023_origen_saldo_favor.sql\",\n    \"label\": \"schema_or_data\",\n    \"status\": \"added\",\n    \"additions\"\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-assumption_checks-29d4f3555ec00c39", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 381532, "scanner": "foundry_dataset", "fingerprint": "b64ee891f4417911d24bd1a79cc3ec830a1bc6b8569501c0f65634261216b042", "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": "rijapagu/cobranzas-guipak#1", "human_labels": ["api_or_backend", "security_auth_secret", "source_or_other"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.812, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-e4a33bdfbc9c4993", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 2, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#1\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'security_auth_secret': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 2, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-8a91f0aa21dd80e3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/1\\nTitle: feat(asistente): tareas espejo de cadencia para correos diarios en /tareas\\nBody:\\n## Contexto\\n\\nTras la sesi\u00f3n de 2026-06-01 donde definimos la frontera Asistente vs Supervisor de Cobros, Ricardo pidi\u00f3 que los correos diarios de cobranza (auto-generados por el cron `cadencias-horarias`) sean **visibles tambi\u00e9n en `/tareas`**, no solo en Cola de Aprobaci\u00f3n. Raz\u00f3n: necesita ver el d\u00eda completo (manuales + conciliaci\u00f3n + correos diarios) en un solo lugar con fecha y prioridad.\\n\\nDecisi\u00f3n: **Camino A \u2014 tarea espejo**. Mantenemos la Cola de Aprobaci\u00f3n intacta. Cada gesti\u00f3n EMAIL/WHATSAPP con `requiere_aprobacion=1` genera adem\u00e1s una tarea ligada v\u00eda `origen_ref`. Aprobar/descartar desde la cola cierra la tarea espejo autom\u00e1ticamente.\\n\\n## Cambios\\n\\n### `lib/queue/jobs/cadencias.ts`\\n\\nDespu\u00e9s del INSERT en `cobranza_gestiones`, si `estado='PENDIENTE'`, INSERT extra en `cobranza_tareas`:\\n\\n- `titulo`: \\\"Aprobar correo cobranza \u2014 {cliente}\\\" o \\\"Aprobar WhatsApp cobranza \u2014 {cliente}\\\"\\n- `descripcion`: contex\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-68b807298b90c3a3\",\n    \"filename\": \"app/api/cobranzas/gestiones/[id]/aprobar/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 18,\n    \"deletions\": 0,\n    \"changes\": 18,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/07cb8b9d5c6e85358b7375b10c8a9cb09f03c88d/app%2Fapi%2Fcobranzas%2Fgestiones%2F%5Bid%5D%2Faprobar%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-e183ae6a11b88d38\",\n    \"filename\": \"app/api/cobranzas/gestiones/[id]/descartar/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"addit\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-assumption_checks-0ca165a69e25959b", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 410994, "scanner": "foundry_dataset", "fingerprint": "b8476ef694746f532e6b76b1f5aa7e4c62887b5eebbab6e90285577659282277", "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": 1, "commit_general": 2, "schema_or_data": 1, "source_or_other": 1, "security_or_secrets": 1, "generated_provenance": 2, "agent_instruction_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 25, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#4", "issue_number": "4", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-f6349229bb5294db", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "schema_or_data": 4, "source_or_other": 4}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#4\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#4\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 4\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'generated_provenance': 2, 'commit_general': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'security_or_secrets': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-97132ae4997c4559", "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": "rijapagu/cobranzas-guipak", "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: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 410993, "scanner": "foundry_dataset", "fingerprint": "9e9a46172fda1f0c553382dd7bb2928099c259adc3e3bc69ce4aa827e7a1e86c", "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": 1, "commit_general": 1, "schema_or_data": 1, "source_or_other": 1, "security_or_secrets": 1, "generated_provenance": 3, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 25, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-246749ac5722a9df", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "schema_or_data": 4, "source_or_other": 4}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#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: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#3\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 3, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'security_or_secrets': 1, 'commit_general': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-6635b312d1dded9c", "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": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 390746, "scanner": "foundry_dataset", "fingerprint": "79b6dc90533bd6cbc65ea0d0553a0daeafc0f449b3e6b99b2e2806ebce285e5c", "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": "rijapagu/cobranzas-guipak#6", "human_labels": ["agent_instruction_gap", "api_or_backend", "source_or_other"], "issue_number": "6", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.9, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-83fb1f9a97de4862", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#6\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-e3a1d78da81745b8\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/6\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/6\\nTitle: feat(asistente): cron mensajes entrantes sin responder (#5) - cierra las 13 tareas\\nBody:\\nCron cada 30 min que detecta mensajes ENTRANTES de clientes en cobranza_conversaciones sin respuesta posterior. Crea tareas para responder. Priorizacion automatica por palabras clave (urgente/queja=ALTA, pago=ALTA). Sin LLM automatico (el bot @CobrosGuipakBot puede generar draft). 4 queries batch (sin N+1). Idempotente. Reutiliza migracion 024 del PR #4.\\n\\nCon este PR cierran las 13 tareas del Asistente Cobros acordadas con Ricardo 2026-06-01.\\n\\nMemoria: project_cobros_frontera_asistente_supervisor.md.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-97b088e2cb23e0c2\",\n    \"filename\": \"app/api/internal/cron/respuesta-cliente/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 43,\n    \"deletions\": 0,\n    \"changes\": 43,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/7c07a3ec7264b1f55a47a0ca29a7e69e22072c0b/app%2Fapi%2Finternal%2Fcron%2Frespuesta-cliente%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-b538b33919dcd16a\",\n    \"filename\": \"lib/queue/jobs/respuesta-cliente.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 213,\n    \"deletions\": 0,\n    \"changes\": 213,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/7c07a3ec7264b1f55a47a0ca29a7e69e22072c0b/lib%2Fqueue%2Fjobs%2Frespuesta-cliente.ts\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-cc42d6d0ac60804c\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: rijapagu/cobranzas-guipak\nGraph label: source_backed_multi_signal_graph\nNodes: 14\nE\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-bad_chains-8935afda43dcd02f", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 390745, "scanner": "foundry_dataset", "fingerprint": "6d36a3ff3ee812160afa31a64f359154cf8be354da81c798bbf16c1873b59c40", "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": "rijapagu/cobranzas-guipak#5", "human_labels": ["agent_instruction_gap", "api_or_backend", "source_or_other"], "issue_number": "5", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.9, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-ddbf52f0c9726995", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#5\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#5\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ad03fa028827f070\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/5\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/5\\nTitle: feat(asistente): cron deteccion sin-respuesta a correos enviados (#11)\\nBody:\\nCron diario que detecta gestiones EMAIL/WhatsApp aprobadas hace >=5 dias sin respuesta del cliente y sin gestion posterior. Crea tareas para re-enviar/llamar/escalar. 5 queries batch (sin N+1). Idempotente. Reutiliza migracion 024 del PR #4. tsc limpio. Memoria: project_cobros_frontera_asistente_supervisor.md.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-759a4479f4621a3a\",\n    \"filename\": \"app/api/internal/cron/sin-respuesta/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 43,\n    \"deletions\": 0,\n    \"changes\": 43,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/2beb2428387648c118a2aa1b76f3485b5b969290/app%2Fapi%2Finternal%2Fcron%2Fsin-respuesta%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f8846be3480e8883\",\n    \"filename\": \"lib/queue/jobs/sin-respuesta.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 245,\n    \"deletions\": 0,\n    \"changes\": 245,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/2beb2428387648c118a2aa1b76f3485b5b969290/lib%2Fqueue%2Fjobs%2Fsin-respuesta.ts\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-2c28389c1a0db517\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: rijapagu/cobranzas-guipak\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\": 6, \"artifact_supports\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-bad_chains-99048c310ef6083c", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 390744, "scanner": "foundry_dataset", "fingerprint": "8bedfc7bb69937db7d7039969156effe0b3e54b5a312f2b0ac12cdf4ca44fb10", "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": "rijapagu/cobranzas-guipak#2", "human_labels": ["api_or_backend", "mock_placeholder", "source_or_other"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.8, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-ddb7198e4ba3444e", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 1, "docs": 5, "schemas": 1, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "source_or_other": 1}, "linked_commit_count": 5, "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_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#2\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: rijapagu/cobranzas-guipak#2\nRepo: rijapagu/cobranzas-guipak\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'mock_placeholder': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'api_or_backend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-861120e383549f55\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/rijapagu/cobranzas-guipak/pull/2\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: rijapagu/cobranzas-guipak\\nAuthor: rijapagu (User)\\nURL: https://github.com/rijapagu/cobranzas-guipak/pull/2\\nTitle: feat(asistente): cron de recordatorios de promesas (#3 + #4 + #12)\\nBody:\\n## Contexto\\n\\nContinuaci\u00f3n de las tareas del **Asistente Cobros** acordadas en sesi\u00f3n 2026-06-01 con Ricardo. Despu\u00e9s de #1 (correos diarios \u2014 PR #1 ya mergeado y deployado), este PR cubre las 3 tareas relacionadas con promesas de pago en un solo cron:\\n\\n- **#3** \u2014 Recordatorios de promesas que vencen HOY\\n- **#4** \u2014 Confirmaci\u00f3n de pago tras acuerdo (24-48h despu\u00e9s)\\n- **#12** \u2014 Promesas vencidas no cumplidas (>2 d\u00edas sin pago)\\n\\nLas 3 tocan la misma tabla (`cobranza_acuerdos`) \u2014 verlas como \u00e1ngulos de la misma cosa permite un \u00fanico cron en lugar de 3.\\n\\n## C\u00f3mo funciona\\n\\nCron nuevo `POST /api/internal/cron/recordatorios-promesas` (sugerido 7:30 AM AST, antes del empuje matutino 8:00).\\n\\n```sql\\nSELECT id, codigo_cliente, ij_inum, monto_prometido, fecha_prometida,\\n       DATEDIFF(CURDATE(), fecha_prometida) AS dias_diff\\nFROM cobranza_acuerdos\\nWHERE estado='PENDIENTE' AND fecha_prometida <= CURDATE()\\n```\\n\\nUna sola query clasifica\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-f2ae9b8dc3b778af\",\n    \"filename\": \"app/api/internal/cron/recordatorios-promesas/route.ts\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 38,\n    \"deletions\": 0,\n    \"changes\": 38,\n    \"blob_url\": \"https://github.com/rijapagu/cobranzas-guipak/blob/e207dc0c086cb71c03d996756910fc9f5f5d577a/app%2Fapi%2Finternal%2Fcron%2Frecordatorios-promesas%2Froute.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-ee1957447bc3c91e\",\n    \"filename\": \"lib/queue/jobs/recordatorios-promesas.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 224,\n    \"deletions\": 0,\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "comment-chain-pattern-bad_chains-6e5496b2a5e7c8dd", "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": "rijapagu/cobranzas-guipak", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 414519, "scanner": "foundry_dataset", "fingerprint": "c92414aff1413e2f51bbb5ec26cecbda8921ee14caa8f76c73758e52a819d9c5", "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": 1, "commit_general": 1, "schema_or_data": 1, "source_or_other": 1, "security_or_secrets": 1, "generated_provenance": 3, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 25, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-5dbf3c8e7478c418", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "schema_or_data": 4, "source_or_other": 4}}, "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: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#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: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#3\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 3, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'api_or_backend': 1, 'schema_or_data': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'security_or_secrets': 1, 'commit_general': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'high_confidence': 3}\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/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-cbc615e2ba59ad65", "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": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 414518, "scanner": "foundry_dataset", "fingerprint": "6b2719157b6a442700d12eb850140d09fba24eef589b6a8cb355bbcccd86a187", "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": {"bug_fix": 2, "api_or_backend": 2, "commit_general": 1, "source_or_other": 1, "security_or_secrets": 1, "generated_provenance": 1, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 25, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#1", "issue_number": "1", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-cae11b8c76b8643a", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 8, "source_or_other": 4}}, "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: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#1\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'api_or_backend': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'commit_general': 1, 'generated_provenance': 1, 'security_or_secrets': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'high_confidence': 3}\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/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-545bf669c9356233", "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": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 408028, "scanner": "foundry_dataset", "fingerprint": "30974c5aa529480a738d73d82fae475043c8829c3d7b15096eb765c648de485f", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 1, "commit_general": 1, "source_or_other": 1, "generated_provenance": 4, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#6", "issue_number": "6", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-2db9b9434425673e", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "source_or_other": 4}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#6\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#6\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 6\nGraph consistency label: supported_by_high_confidence_link\nNodes: 16\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'api_or_backend': 1, 'source_or_other': 1, 'self_attested_or_generated_fix_unverified': 1, 'commit_general': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-eff2aeb9fefd9097", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 408027, "scanner": "foundry_dataset", "fingerprint": "e0babda44c790af0932f47f295ca16e645f83149f531e80786470dc3119a30f7", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 1, "commit_general": 2, "source_or_other": 1, "generated_provenance": 3, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#5", "issue_number": "5", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-3b7c024cd78d21b1", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "source_or_other": 4}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#5\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#5\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#5\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 5\nGraph consistency label: supported_by_high_confidence_link\nNodes: 16\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 3, 'self_attested_unverified': 3, 'commit_general': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'api_or_backend': 1, 'source_or_other': 1, 'self_attested_or_generated_fix_unverified': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-c028b3aaca6a810c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: rijapagu/cobranzas-guipak"}, "properties": {"repobilityId": 408026, "scanner": "foundry_dataset", "fingerprint": "cbff210352be91cf3c841247083bda3e463c009b7d4f936c9fc59d2332de2f56", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 1, "source_or_other": 1, "mock_placeholder": 1, "generated_provenance": 5, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 16, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "rijapagu/cobranzas-guipak#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "rijapagu/cobranzas-guipak", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-00365ae8bbf99a51", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 4, "source_or_other": 4}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#2\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: rijapagu/cobranzas-guipak\nThread: rijapagu/cobranzas-guipak#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: rijapagu/cobranzas-guipak#2\nRepo: rijapagu/cobranzas-guipak\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 16\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 5, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'api_or_backend': 1, 'source_or_other': 1, 'self_attested_or_generated_fix_unverified': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/rijapagu/cobranzas-guipak", "source_id": "graph-query-motif_query-e16f86cfc5f21b24", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "rijapagu/cobranzas-guipak", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"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-9f2730c0d9c79723", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor-telegram.ts:42"}, "properties": {"repobilityId": "ab4997efcbcebece", "scanner": "scanner-primary", "fingerprint": "9f2730c0d9c79723", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d6053dc643fe566", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-saldo-favor.ts:45"}, "properties": {"repobilityId": "70060ff51a0ecdec", "scanner": "scanner-primary", "fingerprint": "8d6053dc643fe566", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ddc74291c6a468cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/test-parser-extracto.ts:15"}, "properties": {"repobilityId": "279d6ca7b3e8fca8", "scanner": "scanner-primary", "fingerprint": "ddc74291c6a468cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d5a2af417b82193", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/validar_gateway.ts:50"}, "properties": {"repobilityId": "8d41f85401603f68", "scanner": "scanner-primary", "fingerprint": "3d5a2af417b82193", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec97401afc4bd397", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migracion-llm-local/debug_numctx.ts:49"}, "properties": {"repobilityId": "328d5c07299e45da", "scanner": "scanner-primary", "fingerprint": "ec97401afc4bd397", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6aeb5932eded48b3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/asistente/AsistenteChat.tsx:432"}, "properties": {"repobilityId": "395e716afeffd1a7", "scanner": "scanner-primary", "fingerprint": "6aeb5932eded48b3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-03fa894e541ce61a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/internal/cron/scan-drive-facturas/route.ts:31"}, "properties": {"repobilityId": "a3c27fe7b77e737e", "scanner": "scanner-primary", "fingerprint": "03fa894e541ce61a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-564184d57299edfa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/whatsapp/route.ts:116"}, "properties": {"repobilityId": "4ddb4ad2cbd26f6b", "scanner": "scanner-primary", "fingerprint": "564184d57299edfa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3af37d875b2fe97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/worker.ts:8"}, "properties": {"repobilityId": "e60c7e9acbb9b7da", "scanner": "scanner-primary", "fingerprint": "a3af37d875b2fe97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7031c56955f4ac28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/bullmq.ts:62"}, "properties": {"repobilityId": "ea0dde77d9f5d44c", "scanner": "scanner-primary", "fingerprint": "7031c56955f4ac28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4ae93c415d958d1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/cadencias.ts:117"}, "properties": {"repobilityId": "9b56965d43c5e55b", "scanner": "scanner-primary", "fingerprint": "4ae93c415d958d1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b32e623541d34e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/inteligencia-clientes.ts:229"}, "properties": {"repobilityId": "d11952a210aa00f4", "scanner": "scanner-primary", "fingerprint": "3b32e623541d34e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-326e9bcb1d8d45ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-promesas.ts:153"}, "properties": {"repobilityId": "7895ebd4f785c7a2", "scanner": "scanner-primary", "fingerprint": "326e9bcb1d8d45ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7defedcd8f94717", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-lote.ts:108"}, "properties": {"repobilityId": "bcd20c804868a9ff", "scanner": "scanner-primary", "fingerprint": "b7defedcd8f94717", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86d28721f1840391", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/supervisor-alertas.ts:171"}, "properties": {"repobilityId": "cdff630c2721d9fd", "scanner": "scanner-primary", "fingerprint": "86d28721f1840391", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-148077392376491e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/queue/jobs/verificar-acuerdos.ts:73"}, "properties": {"repobilityId": "4e2415b9031378a1", "scanner": "scanner-primary", "fingerprint": "148077392376491e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca2fed7bd96e96da", "level": "warning", "message": {"text": "Privileged port 465 in use"}, "properties": {"repobilityId": "bcd1f06b60a2b6bc", "scanner": "scanner-primary", "fingerprint": "ca2fed7bd96e96da", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/test-onboarding-empresa-demo.mjs"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8987d6d1c30c7202", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "068fbf45727eac17", "scanner": "scanner-primary", "fingerprint": "8987d6d1c30c7202", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-7c27c24bf7771b1e", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/asistente/AsistenteChat.tsx:432"}, "properties": {"repobilityId": "ea4bdb0de2ca05ff", "scanner": "scanner-primary", "fingerprint": "7c27c24bf7771b1e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/asistente/AsistenteChat.tsx"}, "region": {"startLine": 432}}}]}, {"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-ad58d3cd0a9074db", "level": "note", "message": {"text": "Very large file: lib/telegram/tools.ts (1956 lines)"}, "properties": {"repobilityId": "ef19de7f2b5dce3e", "scanner": "scanner-primary", "fingerprint": "ad58d3cd0a9074db", "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": "62e724531999c37a", "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": "51c8c7725b228338", "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": "9735890c5d7f6fb6", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "dde67df1580ef584", "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": "fe158ad4d6c9e5b0", "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": "e1b12730995edcfa", "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": "75b4f5b4cdfc5af2", "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": "7ec6c17d7974a722", "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": 166}}}]}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-db900f182a5e9804", "level": "none", "message": {"text": "Commented-code block (5 lines) in middleware.ts:46"}, "properties": {"repobilityId": "4b89751052347f23", "scanner": "scanner-primary", "fingerprint": "db900f182a5e9804", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a3f77918802af2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-onboarding-empresa-demo.mjs:28"}, "properties": {"repobilityId": "85b3d3d15a1d868a", "scanner": "scanner-primary", "fingerprint": "3a3f77918802af2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30634930f5030f21", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-aislamiento-empresa2.mjs:26"}, "properties": {"repobilityId": "7ab3579e1c8a5481", "scanner": "scanner-primary", "fingerprint": "30634930f5030f21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d71bf5aeae1b1f2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/test-importar-cartera-empresa2.mjs:33"}, "properties": {"repobilityId": "ede6efcffbbb3eff", "scanner": "scanner-primary", "fingerprint": "d71bf5aeae1b1f2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ef8e81890fa11ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_test1.ts:63"}, "properties": {"repobilityId": "3d7bf6ec10d0af0d", "scanner": "scanner-primary", "fingerprint": "5ef8e81890fa11ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c33ffde9d1e87aea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/migracion-llm-local/debug_numctx.ts:41"}, "properties": {"repobilityId": "572d4d2ad99c6237", "scanner": "scanner-primary", "fingerprint": "c33ffde9d1e87aea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ff3a0c13835bb5c0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/asistente/AsistenteChat.tsx:88"}, "properties": {"repobilityId": "e48b8321ad9ae93e", "scanner": "scanner-primary", "fingerprint": "ff3a0c13835bb5c0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c042ffc1831fb49", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cobranzas/generar-cola/route.ts:73"}, "properties": {"repobilityId": "cc1a7517adc90891", "scanner": "scanner-primary", "fingerprint": "6c042ffc1831fb49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7648a0c18165e0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/page.tsx:105"}, "properties": {"repobilityId": "1c8316b46c960cdd", "scanner": "scanner-primary", "fingerprint": "d7648a0c18165e0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f45d9d91a7ad2488", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/plantillas/page.tsx:166"}, "properties": {"repobilityId": "b8e8e07cbf968af3", "scanner": "scanner-primary", "fingerprint": "f45d9d91a7ad2488", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89a730166b23cfda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/page.tsx:508"}, "properties": {"repobilityId": "bd46cf9415ab8efa", "scanner": "scanner-primary", "fingerprint": "89a730166b23cfda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6502a7d6b679d289", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/importar-cartera/page.tsx:55"}, "properties": {"repobilityId": "8d7f8155d97d6e1d", "scanner": "scanner-primary", "fingerprint": "6502a7d6b679d289", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d455827f20f128f6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/configuracion/empresa/page.tsx:46"}, "properties": {"repobilityId": "2293b7c55859d340", "scanner": "scanner-primary", "fingerprint": "d455827f20f128f6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0310bee6783c9aee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/disputas/page.tsx:139"}, "properties": {"repobilityId": "d09f3427884eef0f", "scanner": "scanner-primary", "fingerprint": "0310bee6783c9aee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f71d9012029ba89d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/documentos/page.tsx:85"}, "properties": {"repobilityId": "7db6711fc9968e05", "scanner": "scanner-primary", "fingerprint": "f71d9012029ba89d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74f9f50dcb9e582e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/tareas/page.tsx:120"}, "properties": {"repobilityId": "4e0735a1bd38daa4", "scanner": "scanner-primary", "fingerprint": "74f9f50dcb9e582e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c50e07b9d132dad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/(dashboard)/cartera/page.tsx:89"}, "properties": {"repobilityId": "e9d072e356a4820a", "scanner": "scanner-primary", "fingerprint": "7c50e07b9d132dad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62708528dbf24e51", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/telegram/agent.ts:235"}, "properties": {"repobilityId": "faa9201d47d8304b", "scanner": "scanner-primary", "fingerprint": "62708528dbf24e51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c30329e8bcbd5d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/drive/client.ts:30"}, "properties": {"repobilityId": "094c1bc1041a9391", "scanner": "scanner-primary", "fingerprint": "6c30329e8bcbd5d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8826619f0908488a", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/conciliacion/matcher.ts:156"}, "properties": {"repobilityId": "c45f31eb6eb970b5", "scanner": "scanner-primary", "fingerprint": "8826619f0908488a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-243e263db7aa7a0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/queue/jobs/cadencias.ts:138"}, "properties": {"repobilityId": "d047a153cebc09de", "scanner": "scanner-primary", "fingerprint": "243e263db7aa7a0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bbe479f3d34b077", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/llm/ollama.ts:63"}, "properties": {"repobilityId": "22d3713deef411c4", "scanner": "scanner-primary", "fingerprint": "9bbe479f3d34b077", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d223bfdf539b12d", "level": "note", "message": {"text": "42 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5bbbd2b50dcb630d", "scanner": "scanner-primary", "fingerprint": "4d223bfdf539b12d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}