{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined unresolved feedback: Teokoaaly/MyOwnClone"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 46\nEdges: 114\nNode types: {'pr_file': 28, 'link_quality': 6, 'comment': 4, 'comment_chain': 4, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types:"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined assumption checks: Teokoaaly/MyOwnClone"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 100\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 20, 'docs_or_claims': 24, 'security_or_auth': 1, 'api_or_backend': 46, 'schema_or_data': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6f35a102be81d174\",\n    \"kin"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined test ci gap after feedback: Teokoaaly/MyOwnClone"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 46\nEdges: 114\nNode types: {'pr_file': 28, 'link_quality': 6, 'comment': 4, 'comment_chain': 4, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_tou"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined schema ui api mismatch: Teokoaaly/MyOwnClone"}, "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: weak_supervision_needs_review\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'th"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined bad chains: Teokoaaly/MyOwnClone"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 4\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 28\nLabels: {'test_ci_gap': 1, 'security_auth_secret': 1, 'build_install_failure': 2}\nPolarities: {'bad': 4}\nChanged file labels: {'docs_or_claims': 2, 'test_or_ci': 4, 'ui_or_frontend': 18, 'api_or_backend': 2, 'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-"}, "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: Teokoaaly/MyOwnClone", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: Teokoaaly/MyOwnClone"}, "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: weak_supervision_needs_review\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain'"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "scanner-b79520221d671af4", "name": "Possibly dead Python function: naive_utc_now", "shortDescription": {"text": "Possibly dead Python function: naive_utc_now"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2d35f3bdd28d7f", "name": "Possibly dead Python function: generate_id", "shortDescription": {"text": "Possibly dead Python function: generate_id"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aa2d23535464b55", "name": "Possibly dead Python function: llm_call", "shortDescription": {"text": "Possibly dead Python function: llm_call"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-608bab61ade105ce", "name": "Possibly dead Python function: llm_call", "shortDescription": {"text": "Possibly dead Python function: llm_call"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16206dee03742cbc", "name": "Possibly dead Python function: naive_utc_now", "shortDescription": {"text": "Possibly dead Python function: naive_utc_now"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cad9f6fe2e3a03b9", "name": "Possibly dead Python function: to_doc_metadata", "shortDescription": {"text": "Possibly dead Python function: to_doc_metadata"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5ac7805abcf86a3", "name": "Possibly dead Python function: to_dataset_name", "shortDescription": {"text": "Possibly dead Python function: to_dataset_name"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6c49c0bc2b8de554", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/MobileNav.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/MobileNav.tsx:150"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2bcc035b8116116", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:437", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:437"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb3108122c0ad8dc", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/Sidebar.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/Sidebar.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a954650c3086e44c", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/EndpointCard.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/EndpointCard.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3368ece22315b003", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 MyOwnClone/src/components/chat/MessageBubble.tsx:88", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 MyOwnClone/src/components/chat/MessageBubble.tsx:88"}, "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-6993fb4fc5bc1808", "name": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/app/api/stripe/webhook/route.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/app/api/stripe/webhook/route.ts:72"}, "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-7bc0a3871694d317", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed5524627c9496b5", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:403", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:403"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f4d100b89a3196b", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:174"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0871479ccc6b96dc", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:144", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:144"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4236338f33479d5", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/inbox/page.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/inbox/page.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e12c70b199a79144", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/productos/page.tsx:282", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/productos/page.tsx:282"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37996eae3474ff0f", "name": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/admin/audit/page.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/admin/audit/page.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e16c3f871dc75420", "name": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/lib/db/seed.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/lib/db/seed.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e066691601852931", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-184ad36ee93ad3c1", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44cdc9b7a8b93197", "name": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/components/Modal.test.tsx:40", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/components/Modal.test.tsx:40"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-359cac90e76eb0ee", "name": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/app/register-form.test.tsx:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/app/register-form.test.tsx:16"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2e3c2749c3adbcf", "name": "Insecure pattern 'dangerous_innerhtml' in MyOwnClone/src/components/chat/MessageBubble.tsx:88", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in MyOwnClone/src/components/chat/MessageBubble.tsx:88"}, "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-1d22263773f410d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/app/widget.js/route.ts:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/app/widget.js/route.ts:67"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d92c4aa72e739fa8", "name": "Insecure pattern 'debug_true' in api/run_dev.py:15", "shortDescription": {"text": "Insecure pattern 'debug_true' in api/run_dev.py:15"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54f74e34a9b587ec", "name": "Insecure pattern 'subprocess_shell_true' in api/controllers/deploy.py:35", "shortDescription": {"text": "Insecure pattern 'subprocess_shell_true' in api/controllers/deploy.py:35"}, "fullDescription": {"text": "Found a known-risky pattern (subprocess_shell_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "29 tests / 199 src (ratio 0.15)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 21 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 42 placeholder/mock markers across 24 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-89525d52ff61bdbe", "name": "Commented-code block (5 lines) in MyOwnClone/src/proxy.ts:210", "shortDescription": {"text": "Commented-code block (5 lines) in MyOwnClone/src/proxy.ts:210"}, "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-364ca214cc068dde", "name": "Commented-code block (5 lines) in MyOwnClone/src/__tests__/components/Modal.test.tsx:96", "shortDescription": {"text": "Commented-code block (5 lines) in MyOwnClone/src/__tests__/components/Modal.test.tsx:96"}, "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-4b28a065122984a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:226", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:226"}, "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-e7381692f3e4282b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/admin/useAdminFetch.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/admin/useAdminFetch.ts:48"}, "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-2ac5550cff8dac14", "name": "Legacy-named symbol `local_lexical_v1` in MyOwnClone/src/app/api/clone/sources/route.ts:208", "shortDescription": {"text": "Legacy-named symbol `local_lexical_v1` in MyOwnClone/src/app/api/clone/sources/route.ts:208"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c101169fa3957443", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/api/stt/route.ts:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/api/stt/route.ts:51"}, "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-ed5537f597439d4b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61"}, "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-9c19a83cb82f1e74", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71"}, "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-6c4a0a3025e8ba75", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4836eadc4a81df2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/productos/page.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/productos/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-6f30ffec0ac8e7a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/lib/video.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/lib/video.ts:9"}, "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-08b90411e5942ee0", "name": "Legacy-named symbol `local_hybrid_v1` in tests/test_local_knowledge_retrieval.py:61", "shortDescription": {"text": "Legacy-named symbol `local_hybrid_v1` in tests/test_local_knowledge_retrieval.py:61"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-249bf3daeb8b07e9", "name": "Commented-code block (7 lines) in tests/test_local_knowledge_retrieval.py:128", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_local_knowledge_retrieval.py:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17e96bf5b91cc0bd", "name": "Commented-code block (6 lines) in tests/test_smoke.py:230", "shortDescription": {"text": "Commented-code block (6 lines) in tests/test_smoke.py:230"}, "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-67c6403697af9690", "name": "Commented-code block (5 lines) in api/controllers/console/auth.py:18", "shortDescription": {"text": "Commented-code block (5 lines) in api/controllers/console/auth.py:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4898ab615da04b7d", "name": "Legacy-named symbol `local_hybrid_v1` in api/core/retrieval.py:180", "shortDescription": {"text": "Legacy-named symbol `local_hybrid_v1` in api/core/retrieval.py:180"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7c391a0371c842d", "name": "Legacy-named symbol `local_hybrid_v1` in api/core/myownclone/silos.py:16", "shortDescription": {"text": "Legacy-named symbol `local_hybrid_v1` in api/core/myownclone/silos.py:16"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3438cca052e22ece", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 api/migrations/versions/2026_05_26_1648-b2c3d4e5f6a7_add_myownc", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 api/migrations/versions/2026_05_26_1648-b2c3d4e5f6a7_add_myownclone_columns_to_existing_tables.py:18"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_LOGIN_EMAIL`, `ADMIN_LOGIN_PASSWORD_HASH`, `CI`, `DB_DATABASE`, `DB_USERNAME`, `FROM_EMAIL`, `MAILGUN_API_KEY`, `MINIMAX_API_KEY` + 3 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/controllers/console/wraps.py:decorated_function, api/controllers/console/wraps.py:decorated_function\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76a2f6818267a9a8", "name": "Near-duplicate function bodies in 8 places", "shortDescription": {"text": "Near-duplicate function bodies in 8 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/controllers/console/myownclone/booking.py:get, api/controllers/console/myownclone/booking.py:get, api/controllers/console/myownclone/booking.py:get, api/controllers/console/myownclone/booking.py:get\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/controllers/console/myownclone/booking.py:post, api/controllers/console/myownclone/booking.py:post, api/controllers/console/myownclone/booking.py:post, api/controllers/console/myownclone/booking.py:post\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/controllers/console/myownclone/inbox.py:put, api/controllers/console/myownclone/inbox.py:delete, api/controllers/console/myownclone/inbox.py:post\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33a6b62e30ce7ab4", "name": "Near-duplicate function bodies in 6 places", "shortDescription": {"text": "Near-duplicate function bodies in 6 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napi/controllers/console/myownclone/admin_platform.py:get, api/controllers/console/myownclone/admin_platform.py:get, api/controllers/console/myownclone/admin_platform.py:get, api/controllers/console/myownclone/admin_platform.py:get\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80af63866efbd475", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:224)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:224)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:224` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c334f9c464dae2bb", "name": "Dangling fetch: GET /api/clone/memories?type=memory (MyOwnClone/src/components/ui/SearchCommandBar.tsx:225)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/memories?type=memory (MyOwnClone/src/components/ui/SearchCommandBar.tsx:225)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:225` calls `GET /api/clone/memories?type=memory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/memories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-694c2f503e47e556", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:226)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:226)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:226` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55821435550c21e1", "name": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/products (MyOwnClone/src/components/ui/SearchCommandBar.tsx:230)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/products (MyOwnClone/src/components/ui/SearchCommandBar.tsx:230)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:230` calls `GET /api/clone/clones/${arr[0].id}/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b8dcf99c8c9a0b4", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:234)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:234)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:234` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c64b59444cea485c", "name": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/meeting-types (MyOwnClone/src/components/ui/SearchCommandBar.tsx:238)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/meeting-types (MyOwnClone/src/components/ui/SearchCommandBar.tsx:238)"}, "fullDescription": {"text": "`MyOwnClone/src/components/ui/SearchCommandBar.tsx:238` calls `GET /api/clone/clones/${arr[0].id}/meeting-types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/meeting-types`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d141e327c05da703", "name": "Dangling fetch: POST /api/clone/feedback (MyOwnClone/src/components/chat/MessageBubble.tsx:28)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/feedback (MyOwnClone/src/components/chat/MessageBubble.tsx:28)"}, "fullDescription": {"text": "`MyOwnClone/src/components/chat/MessageBubble.tsx:28` calls `POST /api/clone/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-277d75413506e7a2", "name": "Dangling fetch: POST /api/clone/${slug}/chat (MyOwnClone/src/components/chat/ChatPanel.tsx:96)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/${slug}/chat (MyOwnClone/src/components/chat/ChatPanel.tsx:96)"}, "fullDescription": {"text": "`MyOwnClone/src/components/chat/ChatPanel.tsx:96` calls `POST /api/clone/${slug}/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/<p>/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ca7caf5261d39d9", "name": "Dangling fetch: POST /api/admin/impersonate (MyOwnClone/src/components/admin/ImpersonateButton.tsx:50)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/impersonate (MyOwnClone/src/components/admin/ImpersonateButton.tsx:50)"}, "fullDescription": {"text": "`MyOwnClone/src/components/admin/ImpersonateButton.tsx:50` calls `POST /api/admin/impersonate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/impersonate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d683ad77722f3c2a", "name": "Dangling fetch: POST /api/admin/courtesy (MyOwnClone/src/components/admin/CourtesyButton.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/courtesy (MyOwnClone/src/components/admin/CourtesyButton.tsx:52)"}, "fullDescription": {"text": "`MyOwnClone/src/components/admin/CourtesyButton.tsx:52` calls `POST /api/admin/courtesy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/courtesy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bffc2a829d662047", "name": "Dangling fetch: POST /api/auth/reset-password (MyOwnClone/src/app/reset-password/page.tsx:54)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/reset-password (MyOwnClone/src/app/reset-password/page.tsx:54)"}, "fullDescription": {"text": "`MyOwnClone/src/app/reset-password/page.tsx:54` calls `POST /api/auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/reset-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3316e047904b70a4", "name": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (MyOwnClone/src/app/api/stt/route.ts:51)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (MyOwnClone/src/app/api/stt/route.ts:51)"}, "fullDescription": {"text": "`MyOwnClone/src/app/api/stt/route.ts:51` calls `POST https://api.openai.com/v1/audio/transcriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/audio/transcriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd261f476e4305e2", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:77)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:77)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/settings/page.tsx:77` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8073f4e2aa25064", "name": "Dangling fetch: PUT /api/clone/clones/${clone.id} (MyOwnClone/src/app/(dashboard)/settings/page.tsx:111)", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/clones/${clone.id} (MyOwnClone/src/app/(dashboard)/settings/page.tsx:111)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/settings/page.tsx:111` calls `PUT /api/clone/clones/${clone.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22a002ecd9d62c0c", "name": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:134)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/settings/page.tsx:134` calls `POST /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c110584cb859f3d", "name": "Dangling fetch: PUT /api/clone/clones/${clone.id}/prompts (MyOwnClone/src/app/(dashboard)/settings/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/clones/${clone.id}/prompts (MyOwnClone/src/app/(dashboard)/settings/page.tsx:167)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/settings/page.tsx:167` calls `PUT /api/clone/clones/${clone.id}/prompts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/prompts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c8b78cd7a1fec11", "name": "Dangling fetch: GET /api/clone/billing (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/billing (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:71)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:71` calls `GET /api/clone/billing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/billing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d51fe86f74db121", "name": "Dangling fetch: GET /api/clone/plans (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/plans (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:72)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:72` calls `GET /api/clone/plans` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/plans`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-baad05c60f3cd83c", "name": "Dangling fetch: POST /api/clone/stripe/checkout (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/stripe/checkout (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:110)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:110` calls `POST /api/clone/stripe/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/stripe/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-480b07e9bb5b4eae", "name": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:59)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:59` calls `GET /api/clone/analytics/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/analytics/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3df9fd3643b72b88", "name": "Dangling fetch: GET /api/clone/analytics/top-questions (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/analytics/top-questions (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:60)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:60` calls `GET /api/clone/analytics/top-questions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/analytics/top-questions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74d39bc4434fef40", "name": "Dangling fetch: GET /api/clone/analytics/gaps (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/analytics/gaps (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61` calls `GET /api/clone/analytics/gaps` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/analytics/gaps`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfad05b03ee77699", "name": "Dangling fetch: GET /api/clone/analytics/costs (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/analytics/costs (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:62)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:62` calls `GET /api/clone/analytics/costs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/analytics/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9eb5f7f8369d11c", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:63)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:63` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4aa6f78572bcc290", "name": "Dangling fetch: GET /api/clone/clones/${cid}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71` calls `GET /api/clone/clones/${cid}/meeting-types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/meeting-types`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d09d84fca9ae5413", "name": "Dangling fetch: GET /api/clone/clones/${cid}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:72)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:72` calls `GET /api/clone/clones/${cid}/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42e1be458da73a71", "name": "Dangling fetch: POST /api/clone/clones/${cloneId}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:100)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:100` calls `POST /api/clone/clones/${cloneId}/meeting-types` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/meeting-types`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cae2594a7a7a6129", "name": "Dangling fetch: PUT /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reunion", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:134)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:134` calls `PUT /api/clone/clones/${cloneId}/meeting-types/${meetingType.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/meeting-types/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd61444badd79a0d", "name": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reun", "shortDescription": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:154)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:154` calls `DELETE /api/clone/clones/${cloneId}/meeting-types/${meetingType.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/meeting-types/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9e56a918ee1d427", "name": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/availability/${slot.id} (MyOwnClone/src/app/(dashboard)/reuniones/pa", "shortDescription": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/availability/${slot.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:176)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:176` calls `DELETE /api/clone/clones/${cloneId}/availability/${slot.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/availability/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e75a5e0e0f31ac4", "name": "Dangling fetch: POST /api/clone/clones/${cloneId}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:193)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:193` calls `POST /api/clone/clones/${cloneId}/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8fb1a4b47c318ba", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:73)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/resumen/page.tsx:73` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edbc4e06e310e1ca", "name": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83` calls `GET /api/clone/analytics/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/analytics/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-944036e92a533c48", "name": "Dangling fetch: GET /api/clone/inbox/list?limit=3 (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/inbox/list?limit=3 (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:84)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/resumen/page.tsx:84` calls `GET /api/clone/inbox/list?limit=3` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e713c4ae3091c6f6", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:58)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:58` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b693f13be7aaec37", "name": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:122)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:122` calls `POST /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64a490a54ba310d4", "name": "Dangling fetch: GET /api/clone/memories?type=${activeTab} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/memories?type=${activeTab} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:69)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:69` calls `GET /api/clone/memories?type=${activeTab}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/memories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8cc361007520c84b", "name": "Dangling fetch: DELETE /api/clone/memories/${id} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:125)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clone/memories/${id} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:125)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:125` calls `DELETE /api/clone/memories/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/memories/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13a89b23f782069e", "name": "Dangling fetch: GET /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:53)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:53` calls `GET /api/clone/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fcea5b47efb04a0", "name": "Dangling fetch: POST /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/nuevo/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/nuevo/page.tsx:88)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/biblioteca/nuevo/page.tsx:88` calls `POST /api/clone/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfbcd444053fb3d2", "name": "Dangling fetch: GET /api/clone/inbox/list?${params} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/inbox/list?${params} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:88)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:88` calls `GET /api/clone/inbox/list?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d031f30404dab666", "name": "Dangling fetch: GET /api/clone/inbox/${id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/inbox/${id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:109)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:109` calls `GET /api/clone/inbox/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6e578f7e1fd9c9c", "name": "Dangling fetch: POST /api/clone/inbox/${selected.id}/generate-draft (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/inbox/${selected.id}/generate-draft (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:126)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:126` calls `POST /api/clone/inbox/${selected.id}/generate-draft` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/<p>/generate-draft`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-932572c07f80f516", "name": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:145)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:145` calls `PUT /api/clone/inbox/${selected.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f398d35817c95e9f", "name": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:167)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:167` calls `PUT /api/clone/inbox/${selected.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52a584f40d149bf5", "name": "Dangling fetch: DELETE /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:187)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:187)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/inbox/page.tsx:187` calls `DELETE /api/clone/inbox/${selected.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/inbox/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fe56948c4b4dfff", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/productos/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/productos/page.tsx:48)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/productos/page.tsx:48` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-810f14142b456822", "name": "Dangling fetch: GET /api/clone/clones/${cid}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:55)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/productos/page.tsx:55` calls `GET /api/clone/clones/${cid}/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-812de80ea3d99afe", "name": "Dangling fetch: POST /api/clone/clones/${cloneId}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:78)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/productos/page.tsx:78` calls `POST /api/clone/clones/${cloneId}/products` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/products`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d6507850843557e", "name": "Dangling fetch: PUT /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/page.t", "shortDescription": {"text": "Dangling fetch: PUT /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/page.tsx:113)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/productos/page.tsx:113` calls `PUT /api/clone/clones/${cloneId}/products/${product.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/products/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82a110069aaa5c9a", "name": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/pag", "shortDescription": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/page.tsx:141)"}, "fullDescription": {"text": "`MyOwnClone/src/app/(dashboard)/productos/page.tsx:141` calls `DELETE /api/clone/clones/${cloneId}/products/${product.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones/<p>/products/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a086554599b7c168", "name": "Dangling fetch: POST /api/auth/verify-email (MyOwnClone/src/app/es/verificar/page.tsx:28)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/verify-email (MyOwnClone/src/app/es/verificar/page.tsx:28)"}, "fullDescription": {"text": "`MyOwnClone/src/app/es/verificar/page.tsx:28` calls `POST /api/auth/verify-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/verify-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4afd3330ed2ba53c", "name": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/es/onboarding/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/es/onboarding/page.tsx:64)"}, "fullDescription": {"text": "`MyOwnClone/src/app/es/onboarding/page.tsx:64` calls `POST /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-364b68f7738ad304", "name": "Dangling fetch: POST /api/auth/forgot-password (MyOwnClone/src/app/forgot-password/page.tsx:18)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/forgot-password (MyOwnClone/src/app/forgot-password/page.tsx:18)"}, "fullDescription": {"text": "`MyOwnClone/src/app/forgot-password/page.tsx:18` calls `POST /api/auth/forgot-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/forgot-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd94e4d9ff81214b", "name": "Dangling fetch: POST /api/admin/tenants (MyOwnClone/src/app/admin/tenants/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/tenants (MyOwnClone/src/app/admin/tenants/page.tsx:124)"}, "fullDescription": {"text": "`MyOwnClone/src/app/admin/tenants/page.tsx:124` calls `POST /api/admin/tenants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/tenants`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa40077067923191", "name": "Dangling fetch: GET /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:85)"}, "fullDescription": {"text": "`MyOwnClone/src/app/admin/tenants/[id]/page.tsx:85` calls `GET /api/admin/tenants/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/tenants/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ac4156c26911044", "name": "Dangling fetch: PATCH /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:125)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:125)"}, "fullDescription": {"text": "`MyOwnClone/src/app/admin/tenants/[id]/page.tsx:125` calls `PATCH /api/admin/tenants/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/tenants/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab8573eb57d9a240", "name": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/lib/clone-resolver.ts:21)", "shortDescription": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/lib/clone-resolver.ts:21)"}, "fullDescription": {"text": "`MyOwnClone/src/lib/clone-resolver.ts:21` calls `GET /api/clone/clones` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clone/clones`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42a63a5518b2d1e3", "name": "Unused endpoint: ANY /deploy", "shortDescription": {"text": "Unused endpoint: ANY /deploy"}, "fullDescription": {"text": "`api/controllers/deploy.py` declares `ANY /deploy` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa31e1efb2635503", "name": "Unused endpoint: ANY /inbound-email", "shortDescription": {"text": "Unused endpoint: ANY /inbound-email"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /inbound-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2baa55152f7df222", "name": "Unused endpoint: ANY /clones/<string:slug>", "shortDescription": {"text": "Unused endpoint: ANY /clones/<string:slug>"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /clones/<string:slug>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dac9cb6507922d34", "name": "Unused endpoint: ANY /clones/<string:slug>/chat", "shortDescription": {"text": "Unused endpoint: ANY /clones/<string:slug>/chat"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /clones/<string:slug>/chat` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02612857da04f3be", "name": "Unused endpoint: ANY /clones/<string:slug>/chat-simple", "shortDescription": {"text": "Unused endpoint: ANY /clones/<string:slug>/chat-simple"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /clones/<string:slug>/chat-simple` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db0f2dfcce492327", "name": "Unused endpoint: ANY /clones/<string:slug>/meeting-types", "shortDescription": {"text": "Unused endpoint: ANY /clones/<string:slug>/meeting-types"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /clones/<string:slug>/meeting-types` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-346c06b25cb11c56", "name": "Unused endpoint: ANY /clones/<string:slug>/bookings", "shortDescription": {"text": "Unused endpoint: ANY /clones/<string:slug>/bookings"}, "fullDescription": {"text": "`api/controllers/myownclone_public.py` declares `ANY /clones/<string:slug>/bookings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c7ad61ba1b23915", "name": "Unused endpoint: ANY /login", "shortDescription": {"text": "Unused endpoint: ANY /login"}, "fullDescription": {"text": "`api/controllers/console/auth.py` declares `ANY /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a2a3c58bacd32fa", "name": "Unused endpoint: ANY /verify", "shortDescription": {"text": "Unused endpoint: ANY /verify"}, "fullDescription": {"text": "`api/controllers/console/auth.py` declares `ANY /verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af3083e404386aad", "name": "Unused endpoint: ANY /myownclone/plans", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/plans"}, "fullDescription": {"text": "`api/controllers/console/myownclone/stripe_ctrl.py` declares `ANY /myownclone/plans` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27107681bc6e6659", "name": "Unused endpoint: ANY /myownclone/stripe/checkout", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/stripe/checkout"}, "fullDescription": {"text": "`api/controllers/console/myownclone/stripe_ctrl.py` declares `ANY /myownclone/stripe/checkout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09b6ffb07926e3fd", "name": "Unused endpoint: ANY /myownclone/stripe/billing", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/stripe/billing"}, "fullDescription": {"text": "`api/controllers/console/myownclone/stripe_ctrl.py` declares `ANY /myownclone/stripe/billing` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d9fc4c034e325ca4", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/meeting-types` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33b91d58bfd2a72d", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types/<string:meeting_type_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types/<string:meeting_type_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/meeting-types/<string:meeting_type_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-762d05fbcea158c1", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/availability` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c729693cb35a5110", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability/<string:availability_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability/<string:availability_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/availability/<string:availability_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f366b8b0f1bb25a", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/products` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0e50e44d3f5f02b", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products/<string:product_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products/<string:product_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/products/<string:product_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7d479969cef3c3a", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/bookings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b4bbd06e934675b", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings/<string:booking_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings/<string:booking_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/booking.py` declares `ANY /myownclone/clones/<string:clone_id>/bookings/<string:booking_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81c9d523de32c161", "name": "Unused endpoint: ANY /myownclone/feedback", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/feedback"}, "fullDescription": {"text": "`api/controllers/console/myownclone/feedback.py` declares `ANY /myownclone/feedback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3574ba2b3112fc5", "name": "Unused endpoint: ANY /myownclone/feedback/stats", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/feedback/stats"}, "fullDescription": {"text": "`api/controllers/console/myownclone/feedback.py` declares `ANY /myownclone/feedback/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f0d851f07069f4ea", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/overview", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/overview"}, "fullDescription": {"text": "`api/controllers/console/myownclone/analytics.py` declares `ANY /myownclone/clones/<string:clone_id>/analytics/overview` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b9135f7ae68c874", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/top-questions", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/top-questions"}, "fullDescription": {"text": "`api/controllers/console/myownclone/analytics.py` declares `ANY /myownclone/clones/<string:clone_id>/analytics/top-questions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42f9ee42f12bca5b", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/gaps", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/gaps"}, "fullDescription": {"text": "`api/controllers/console/myownclone/analytics.py` declares `ANY /myownclone/clones/<string:clone_id>/analytics/gaps` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68e8b5d926bd367f", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/costs", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/costs"}, "fullDescription": {"text": "`api/controllers/console/myownclone/analytics.py` declares `ANY /myownclone/clones/<string:clone_id>/analytics/costs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b375ab15c529ee51", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/memories", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/memories"}, "fullDescription": {"text": "`api/controllers/console/myownclone/creator_memory.py` declares `ANY /myownclone/clones/<string:clone_id>/memories` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a3bd1bd93867443", "name": "Unused endpoint: ANY /myownclone/memories/<string:memory_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/memories/<string:memory_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/creator_memory.py` declares `ANY /myownclone/memories/<string:memory_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6d285cd4dd37c75", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/inbox", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/inbox"}, "fullDescription": {"text": "`api/controllers/console/myownclone/inbox.py` declares `ANY /myownclone/clones/<string:clone_id>/inbox` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b79642058cdc406", "name": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/inbox.py` declares `ANY /myownclone/inbox/<string:email_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51200ab6c741a394", "name": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>/generate-draft", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>/generate-draft"}, "fullDescription": {"text": "`api/controllers/console/myownclone/inbox.py` declares `ANY /myownclone/inbox/<string:email_id>/generate-draft` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d73cb0e39fa39c0", "name": "Unused endpoint: ANY /myownclone/admin/overview", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/overview"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/overview` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc127f0c46c240bb", "name": "Unused endpoint: ANY /myownclone/admin/tenants", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/tenants"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/tenants` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9204ada98cc37a86", "name": "Unused endpoint: ANY /myownclone/admin/impersonation", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/impersonation"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/impersonation` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28b9ea2b287f5465", "name": "Unused endpoint: ANY /myownclone/admin/impersonate", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/impersonate"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/impersonate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce095f93e26cb0e0", "name": "Unused endpoint: ANY /myownclone/admin/impersonate/stop", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/impersonate/stop"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/impersonate/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cff6bc59dc8c8102", "name": "Unused endpoint: ANY /myownclone/admin/courtesy-account", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/courtesy-account"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/courtesy-account` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0749b2bf39ed3e1c", "name": "Unused endpoint: ANY /myownclone/admin/audit-log", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/audit-log"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/audit-log` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87b539e1395e7e79", "name": "Unused endpoint: ANY /myownclone/admin/feedback", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/admin/feedback"}, "fullDescription": {"text": "`api/controllers/console/myownclone/admin_platform.py` declares `ANY /myownclone/admin/feedback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51ef3f83683fd399", "name": "Unused endpoint: ANY /myownclone/clones", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones"}, "fullDescription": {"text": "`api/controllers/console/myownclone/clone.py` declares `ANY /myownclone/clones` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3efce7fdb6aa8cd1", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>"}, "fullDescription": {"text": "`api/controllers/console/myownclone/clone.py` declares `ANY /myownclone/clones/<string:clone_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3965fa2b6c8d8440", "name": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/prompts", "shortDescription": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/prompts"}, "fullDescription": {"text": "`api/controllers/console/myownclone/clone.py` declares `ANY /myownclone/clones/<string:clone_id>/prompts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20979"}, "properties": {"repository": "Teokoaaly/MyOwnClone", "repoUrl": "https://github.com/Teokoaaly/MyOwnClone", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 462982, "scanner": "foundry_dataset", "fingerprint": "21d0759c30dc72c24e28bac3c9163baef2fa50c223f84563a4f9890c0cf24fcb", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_or_ci": 4, "test_ci_gap": 1, "api_or_backend": 2, "docs_or_claims": 2, "ui_or_frontend": 18, "source_or_other": 2, "security_auth_secret": 1, "build_install_failure": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 6, "human_reported_issue_no_linked_fix": 4, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 12}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 114, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 4, "thread_touches_file": 28, "chain_has_link_quality": 6, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 46, "node_types": {"repo": 1, "thread": 1, "comment": 4, "pr_file": 28, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 4}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#3", "issue_number": "3", "quality_tiers": {"unresolved": 6}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-4ebf6335e4569121", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 28, "api_or_backend": 14, "docs_or_claims": 14, "ui_or_frontend": 126, "source_or_other": 14}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 46\nEdges: 114\nNode types: {'pr_file': 28, 'link_quality': 6, 'comment': 4, 'comment_chain': 4, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 48, 'thread_touches_file': 28, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'thread_has_comment': 4, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 18, 'not_resolved_or_not_observed': 6, 'test_or_ci': 4, 'human_reported_issue_no_linked_fix': 4, 'build_install_failure': 2, 'docs_or_claims': 2, 'api_or_backend': 2, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'security_auth_secret': 1}\nOutcomes: {'not_resolved_or_not_observed': 12}\nQuality tiers: {'unresolved': 6}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-b940e1540b8e2cd6", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Teokoaaly/MyOwnClone", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 462981, "scanner": "foundry_dataset", "fingerprint": "2e55ff5b7601f4bbcbf7bf3d685d2f59a359a8754b843234e84d77daf1c60a0c", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_or_backend": 13, "schema_or_data": 3, "human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 51, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 16, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 16, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-dfab79f9b01fb5fe", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 52, "schema_or_data": 12}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#1\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 25\nEdges: 51\nNode types: {'pr_file': 16, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 16, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'api_or_backend': 13, 'schema_or_data': 3, 'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-41b89658995e0b7a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Teokoaaly/MyOwnClone", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 434366, "scanner": "foundry_dataset", "fingerprint": "6d83ff281fe4448f47f65db23eb8de4a23cee65ff0ed0b6b640b0577a7841305", "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": "Teokoaaly/MyOwnClone#2", "human_labels": ["api_or_backend", "data_schema_persistence", "docs_or_claims", "schema_or_data", "security_or_auth", "source_or_other"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-a8ebcf1d4acd9c69", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 6}, "source_chain_kind": "issue_chain", "changed_file_count": 100, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 46, "docs_or_claims": 24, "schema_or_data": 9, "source_or_other": 20, "security_or_auth": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 100\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 20, 'docs_or_claims': 24, 'security_or_auth': 1, 'api_or_backend': 46, 'schema_or_data': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6f35a102be81d174\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Teokoaaly/MyOwnClone/pull/2\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Teokoaaly/MyOwnClone\\nAuthor: Teokoaaly (User)\\nURL: https://github.com/Teokoaaly/MyOwnClone/pull/2\\nTitle: feat: implement MyOwnClone backend \u2014 models, core, bug fixes, Dify so\u2026\\nBody:\\n\u2026urce\\r\\n\\r\\n- Add models/myownclone/ with all SQLAlchemy models (CloneConfig, CloneSilo, CreatorMemory, EmailInbound, MeetingType_, Booking, Product, CostTracking, Analytics, Impersonation, Plan, etc.)\\r\\n- Add core/myownclone/ with silos.py, retrieval.py, ingestion.py, email_ai.py, email_processor.py\\r\\n- Fix Bug #2: _add_memories_to_prompt() now returns modified system_prompt (clonify_public.py:166)\\r\\n- Fix Bug #3: admin_platform.py:166 now does proper tenant.name lookup\\r\\n- Add full Dify source (3,076 Python files) under myownclone/dify/api/ for the backend to run\\r\\n- Rename clonify\u2192myownclone in migrations (clonify_plans \u2192 myownclone_plans)\\r\\n- Update README.md and CLAUDE.md with resolved bugs marked \u2705\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-543976c93fe93543\",\n    \"filename\": \".gitignore\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 1,\n    \"deletions\": 0,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/84e818409d3a21b7c75198ed92bbce82fac24f35/.gitignore\"\n  },\n  {\n    \"id\": \"github-pr-file-file-7e34ab9d5a1cacf6\",\n    \"filename\": \".sisyphus/boulder.json\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 50,\n    \"deletions\": 0,\n    \"changes\": 50,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/84e818409d3a21b7c75198ed92bbce82fac24f35/.sisyphus%2Fboulder.json\"\n  },\n  {\n    \"id\": \"github-pr-file-file-10b860118e107b6e\",\n    \"filename\": \".sisyphus/evidence/final-qa/final-report.md\",\n    \"la\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "comment-chain-pattern-assumption_checks-9c08a4262ec7f362", "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": "Teokoaaly/MyOwnClone", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 434365, "scanner": "foundry_dataset", "fingerprint": "58e8f2899ffa848168ba3e377cf610c616b885c3a287568dfc17754fb25f492d", "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": "Teokoaaly/MyOwnClone#1", "human_labels": ["api_or_backend", "human_feedback_general", "schema_or_data"], "issue_number": "1", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-e12a71eff3be815c", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 6}, "source_chain_kind": "issue_chain", "changed_file_count": 16, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 13, "schema_or_data": 3}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: Teokoaaly/MyOwnClone#1\nRepo: Teokoaaly/MyOwnClone\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 16\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'api_or_backend': 13, 'schema_or_data': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-8f9e8409443dfe09\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/Teokoaaly/MyOwnClone/pull/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: Teokoaaly/MyOwnClone\\nAuthor: Teokoaaly (User)\\nURL: https://github.com/Teokoaaly/MyOwnClone/pull/1\\nTitle: rename: clonify \u2192 myownclone\\nBody:\\nRename completo del proyecto: todas las referencias 'clonify' \u2192 'myownclone'\\n\\n- controladores renombrados\\n- blueprint renombrado\\n- URLs actualizadas\\n- migraciones renombradas\\n- sin refs a 'clonify'\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-c214f1e8e16d540f\",\n    \"filename\": \"dify/api/app_factory.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 7,\n    \"deletions\": 53,\n    \"changes\": 60,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/c831e75f5f464e78c415d1998abc9cd858f6a981/dify%2Fapi%2Fapp_factory.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-d1e79a2aaf85666c\",\n    \"filename\": \"dify/api/controllers/console/__init__.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"modified\",\n    \"additions\": 236,\n    \"deletions\": 236,\n    \"changes\": 472,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/c831e75f5f464e78c415d1998abc9cd858f6a981/dify%2Fapi%2Fcontrollers%2Fconsole%2F__init__.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f8c6710391a01fdf\",\n    \"filename\": \"dify/api/controllers/console/clonify/__init__.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"removed\",\n    \"additions\": 0,\n    \"deletions\": 5,\n    \"changes\": 5,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/f53b8181de94c5619a0b2ac3494f35814bc1f9d0/dify%2Fapi%2Fcontrollers%2Fconsole%2Fclonify%2F__init__.py\"\n  },\n  {\n    \"id\": \"github-pr-file-file-8a534bafce7b912d\",\n    \"filename\": \"dify/api/controllers/console/myownclone/__init__.py\",\n    \"label\": \"api_or_backend\",\n    \"status\": \"added\",\n    \"additions\": 5,\n    \"deletions\": 0,\n    \"changes\": 5,\n    \"blob_url\": \"https://github.com/Teokoaaly/MyOwnClone/blob/c831e75f5f464e78c4\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "comment-chain-pattern-assumption_checks-c67d4a84533d263e", "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": "Teokoaaly/MyOwnClone", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 457884, "scanner": "foundry_dataset", "fingerprint": "a6568f1f5a8b197c631f86af0a60902cd87cec2d31bf8ca878973377e4567c79", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 4, "test_ci_gap": 1, "api_or_backend": 2, "docs_or_claims": 2, "ui_or_frontend": 18, "source_or_other": 2, "security_auth_secret": 1, "build_install_failure": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 6, "human_reported_issue_no_linked_fix": 4, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 12}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 114, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 4, "thread_has_comment": 4, "thread_touches_file": 28, "chain_has_link_quality": 6, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 4, "comment_chain_touches_file": 48, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 4}, "node_count": 46, "node_types": {"repo": 1, "thread": 1, "comment": 4, "pr_file": 28, "fix_outcome": 1, "issue_chain": 1, "link_quality": 6, "comment_chain": 4}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#3", "issue_number": "3", "quality_tiers": {"unresolved": 6}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-e16572a2700e2941", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 28, "api_or_backend": 14, "docs_or_claims": 14, "ui_or_frontend": 126, "source_or_other": 14}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 46\nEdges: 114\nNode types: {'pr_file': 28, 'link_quality': 6, 'comment': 4, 'comment_chain': 4, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 48, 'thread_touches_file': 28, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 6, 'thread_has_comment': 4, 'thread_has_comment_chain': 4, 'comment_has_chain': 4, 'issue_chain_has_comment_chain': 4, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 18, 'not_resolved_or_not_observed': 6, 'test_or_ci': 4, 'human_reported_issue_no_linked_fix': 4, 'build_install_failure': 2, 'docs_or_claims': 2, 'api_or_backend': 2, 'source_or_other': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'security_auth_secret': 1}\nOutcomes: {'not_resolved_or_not_observed': 12}\nQuality tiers: {'unresolved': 6}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-fa57d69defc432f6", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "Teokoaaly/MyOwnClone", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 452777, "scanner": "foundry_dataset", "fingerprint": "051e4d179d0adbeb7d59857c6a29ef8716a21e8a11c707309dbe6a08e965c4a5", "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": 46, "docs_or_claims": 24, "schema_or_data": 9, "source_or_other": 20, "security_or_auth": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 137, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 2, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 111, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 1, "pr_file": 100, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#2", "issue_number": "2", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-61ffb8fc7c1f014c", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 184, "docs_or_claims": 96, "schema_or_data": 36, "source_or_other": 80, "security_or_auth": 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: weak_supervision_needs_review\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'comment_chain_links_commit': 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: {'api_or_backend': 46, 'docs_or_claims': 24, 'source_or_other': 20, 'schema_or_data': 9, 'ambiguous_needs_more_evidence': 3, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'security_or_auth': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 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/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-a69d78ff4f98725d", "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": "Teokoaaly/MyOwnClone", "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: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 452776, "scanner": "foundry_dataset", "fingerprint": "e3e00e6664b5ea9b4b53c1bf288bf6a92c7c45c0109930cd78e0a0a4c621efc0", "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": 13, "schema_or_data": 3, "human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 51, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 16, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 25, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 16, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-d6e713e4254ed318", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 52, "schema_or_data": 12}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#1\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 25\nEdges: 51\nNode types: {'pr_file': 16, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 16, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'api_or_backend': 13, 'schema_or_data': 3, 'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- 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/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-54e8324a73a7adb9", "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": "Teokoaaly/MyOwnClone", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 441692, "scanner": "foundry_dataset", "fingerprint": "e9b7b0323201ffd525f831d6af6ee785a6a584ddcf62f1d2f8ea2055a046293e", "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": "Teokoaaly/MyOwnClone#3", "human_labels": ["api_or_backend", "build_install_failure", "docs_or_claims", "security_auth_secret", "source_or_other", "test_ci_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "3", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-c514304ced4f67c0", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 2, "docs": 6}, "source_chain_kind": "issue_chain", "changed_file_count": 28, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 4, "api_or_backend": 2, "docs_or_claims": 2, "ui_or_frontend": 18, "source_or_other": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#3\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Teokoaaly/MyOwnClone#3\nRepo: Teokoaaly/MyOwnClone\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 4\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 28\nLabels: {'test_ci_gap': 1, 'security_auth_secret': 1, 'build_install_failure': 2}\nPolarities: {'bad': 4}\nChanged file labels: {'docs_or_claims': 2, 'test_or_ci': 4, 'ui_or_frontend': 18, 'api_or_backend': 2, 'source_or_other': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c2bcfa5ca8220036\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Teokoaaly/MyOwnClone/pull/3\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Teokoaaly/MyOwnClone\\nAuthor: Teokoaaly (User)\\nURL: https://github.com/Teokoaaly/MyOwnClone/pull/3\\nTitle: fix(ops): document and harden VPS deployment\\nBody:\\n## Resumen\\n\\nAuditoria y hardening del despliegue VPS activo en `/opt/myownclone/current`, comparado contra `origin/master` (`365b858`). El informe completo queda en `docs/VPS_AUDIT_2026-06-14.md`.\\n\\n## Cambios incluidos\\n\\n- Documenta el estado real del VPS, servicios activos, rutas sanas y fallos encontrados.\\n- Corrige el deploy frontend para instalar `MyOwnClone/.env.production` como `myownclone:myownclone` con permisos `0600`, evitando el error `EACCES` de `next start`.\\n- Hace configurable el runtime LLM para OpenAI-compatible providers:\\n  - `OPENAI_BASE_URL`\\n  - `OPENAI_API_BASE` como alias legacy\\n  - `OPENAI_MODEL`\\n- Actualiza `backend.env.production.example` y `DEPLOYMENT.md` con configuracion DeepSeek/OpenAI-compatible.\\n- Amplia el smoke test de produccion con `/healthz` y `/readyz`.\\n- Anade tests para la configuracion del `ModelManager`.\\n\\n## Hallazgos del VPS\\n\\n- El backend esta sano: `/healthz` y `/readyz` devuelven OK con DB y Redis.\\n- El endpoint pub\"\n  },\n  {\n    \"id\": \"github-feedback-comment-cb71f89e7eb42089\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Teokoaaly/MyOwnClone/pull/3#issuecomment-4701393170\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: issue_comment\\nRepo: Teokoaaly/MyOwnClone\\nAuthor: Teokoaaly (User)\\nURL: https://github.com/Teokoaaly/MyOwnClone/pull/3#issuecomment-4701393170\\nTitle: \\nBody:\\nVPS audit note:\\n\\nApplied directly on the VPS during the audit:\\n\\n```bash\\nchown myowncl\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Teokoaaly/MyOwnClone", "source_id": "comment-chain-pattern-bad_chains-f5cd5c722a93bb20", "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": "Teokoaaly/MyOwnClone", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: Teokoaaly/MyOwnClone"}, "properties": {"repobilityId": 454964, "scanner": "foundry_dataset", "fingerprint": "de2d1192454b75fb578bc2a891139165082aea9f7efb3aa50e31f25c0c33c08f", "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": 46, "docs_or_claims": 24, "schema_or_data": 9, "source_or_other": 20, "security_or_auth": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 137, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 100, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 2, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 111, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 1, "pr_file": 100, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "Teokoaaly/MyOwnClone#2", "issue_number": "2", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "Teokoaaly/MyOwnClone", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-8ccc028e82088a78", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 184, "docs_or_claims": 96, "schema_or_data": 36, "source_or_other": 80, "security_or_auth": 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: weak_supervision_needs_review\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: Teokoaaly/MyOwnClone\nThread: Teokoaaly/MyOwnClone#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Teokoaaly/MyOwnClone#2\nRepo: Teokoaaly/MyOwnClone\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 111\nEdges: 137\nNode types: {'pr_file': 100, 'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 100, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'comment_chain_links_commit': 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: {'api_or_backend': 46, 'docs_or_claims': 24, 'source_or_other': 20, 'schema_or_data': 9, 'ambiguous_needs_more_evidence': 3, 'verification_or_tests': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'security_or_auth': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 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/Teokoaaly/MyOwnClone", "source_id": "graph-query-motif_query-ba4913b07bd22dd2", "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": "Teokoaaly/MyOwnClone", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-b79520221d671af4", "level": "note", "message": {"text": "Possibly dead Python function: naive_utc_now"}, "properties": {"repobilityId": "9ef2c654a441ae05", "scanner": "scanner-primary", "fingerprint": "b79520221d671af4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/base.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a2d35f3bdd28d7f", "level": "note", "message": {"text": "Possibly dead Python function: generate_id"}, "properties": {"repobilityId": "c6f5090eecc8603e", "scanner": "scanner-primary", "fingerprint": "4a2d35f3bdd28d7f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/base.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5aa2d23535464b55", "level": "note", "message": {"text": "Possibly dead Python function: llm_call"}, "properties": {"repobilityId": "57d1e4e19a4057ff", "scanner": "scanner-primary", "fingerprint": "5aa2d23535464b55", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/controllers/myownclone_public.py:429"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-608bab61ade105ce", "level": "note", "message": {"text": "Possibly dead Python function: llm_call"}, "properties": {"repobilityId": "57d1e4e19a4057ff", "scanner": "scanner-primary", "fingerprint": "608bab61ade105ce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/controllers/console/myownclone/inbox.py:185"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16206dee03742cbc", "level": "note", "message": {"text": "Possibly dead Python function: naive_utc_now"}, "properties": {"repobilityId": "9ef2c654a441ae05", "scanner": "scanner-primary", "fingerprint": "16206dee03742cbc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/libs/datetime_utils.py:6"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cad9f6fe2e3a03b9", "level": "note", "message": {"text": "Possibly dead Python function: to_doc_metadata"}, "properties": {"repobilityId": "ced06e7b4e0783d4", "scanner": "scanner-primary", "fingerprint": "cad9f6fe2e3a03b9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/core/ingestion.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b5ac7805abcf86a3", "level": "note", "message": {"text": "Possibly dead Python function: to_dataset_name"}, "properties": {"repobilityId": "ddbcbeb124a48510", "scanner": "scanner-primary", "fingerprint": "b5ac7805abcf86a3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/core/ingestion.py:42"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6c49c0bc2b8de554", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/MobileNav.tsx:150"}, "properties": {"repobilityId": "0a7c0edfbd0ff9e1", "scanner": "scanner-primary", "fingerprint": "6c49c0bc2b8de554", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2bcc035b8116116", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:437"}, "properties": {"repobilityId": "2917540991e7806b", "scanner": "scanner-primary", "fingerprint": "d2bcc035b8116116", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb3108122c0ad8dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/Sidebar.tsx:97"}, "properties": {"repobilityId": "789f3cbf9e928021", "scanner": "scanner-primary", "fingerprint": "fb3108122c0ad8dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a954650c3086e44c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/components/dashboard/EndpointCard.tsx:63"}, "properties": {"repobilityId": "2cf12d5e7724b69f", "scanner": "scanner-primary", "fingerprint": "a954650c3086e44c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3368ece22315b003", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 MyOwnClone/src/components/chat/MessageBubble.tsx:88"}, "properties": {"repobilityId": "a31f6978a3440db1", "scanner": "scanner-primary", "fingerprint": "3368ece22315b003", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6993fb4fc5bc1808", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/app/api/stripe/webhook/route.ts:72"}, "properties": {"repobilityId": "f41d38ef74d11119", "scanner": "scanner-primary", "fingerprint": "6993fb4fc5bc1808", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bc0a3871694d317", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:130"}, "properties": {"repobilityId": "919d3158b694223f", "scanner": "scanner-primary", "fingerprint": "7bc0a3871694d317", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed5524627c9496b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:403"}, "properties": {"repobilityId": "e1663eb30182c2be", "scanner": "scanner-primary", "fingerprint": "ed5524627c9496b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f4d100b89a3196b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:174"}, "properties": {"repobilityId": "1f2b4f13d89a2a1e", "scanner": "scanner-primary", "fingerprint": "9f4d100b89a3196b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0871479ccc6b96dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:144"}, "properties": {"repobilityId": "33c1b244bdcc7287", "scanner": "scanner-primary", "fingerprint": "0871479ccc6b96dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4236338f33479d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/inbox/page.tsx:263"}, "properties": {"repobilityId": "ab9132502877f13a", "scanner": "scanner-primary", "fingerprint": "b4236338f33479d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e12c70b199a79144", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/(dashboard)/productos/page.tsx:282"}, "properties": {"repobilityId": "9df4c70d6c51571b", "scanner": "scanner-primary", "fingerprint": "e12c70b199a79144", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37996eae3474ff0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 MyOwnClone/src/app/admin/audit/page.tsx:211"}, "properties": {"repobilityId": "313edb5651aa556e", "scanner": "scanner-primary", "fingerprint": "37996eae3474ff0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e16c3f871dc75420", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 MyOwnClone/src/lib/db/seed.ts:23"}, "properties": {"repobilityId": "3e55fc8fc389d703", "scanner": "scanner-primary", "fingerprint": "e16c3f871dc75420", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e066691601852931", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "f391052c9bfd7e8b", "scanner": "scanner-primary", "fingerprint": "e066691601852931", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-184ad36ee93ad3c1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "71f9b911ef105a7d", "scanner": "scanner-primary", "fingerprint": "184ad36ee93ad3c1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-184ad36ee93ad3c1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "cf54dc80126840d5", "scanner": "scanner-primary", "fingerprint": "184ad36ee93ad3c1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/Dockerfile"}, "region": {"startLine": 19}}}]}, {"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-44cdc9b7a8b93197", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/components/Modal.test.tsx:40"}, "properties": {"repobilityId": "1324a9f9f794e422", "scanner": "scanner-primary", "fingerprint": "44cdc9b7a8b93197", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "MyOwnClone/src/__tests__/components/Modal.test.tsx"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-359cac90e76eb0ee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/__tests__/app/register-form.test.tsx:16"}, "properties": {"repobilityId": "88b34ea5645f0699", "scanner": "scanner-primary", "fingerprint": "359cac90e76eb0ee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "MyOwnClone/src/__tests__/app/register-form.test.tsx"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-d2e3c2749c3adbcf", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in MyOwnClone/src/components/chat/MessageBubble.tsx:88"}, "properties": {"repobilityId": "716503cdc1e937ad", "scanner": "scanner-primary", "fingerprint": "d2e3c2749c3adbcf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "MyOwnClone/src/components/chat/MessageBubble.tsx"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-1d22263773f410d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in MyOwnClone/src/app/widget.js/route.ts:67"}, "properties": {"repobilityId": "760dfee54367ddc5", "scanner": "scanner-primary", "fingerprint": "1d22263773f410d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "MyOwnClone/src/app/widget.js/route.ts"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-d92c4aa72e739fa8", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in api/run_dev.py:15"}, "properties": {"repobilityId": "f2bc3a8912d9b6cb", "scanner": "scanner-primary", "fingerprint": "d92c4aa72e739fa8", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/run_dev.py"}, "region": {"startLine": 15}}}]}, {"ruleId": "scanner-54f74e34a9b587ec", "level": "warning", "message": {"text": "Insecure pattern 'subprocess_shell_true' in api/controllers/deploy.py:35"}, "properties": {"repobilityId": "e514a006f0e23862", "scanner": "scanner-primary", "fingerprint": "54f74e34a9b587ec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "subprocess_shell_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/controllers/deploy.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "74156dfec6bbacfd", "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": "47456b6adb49f57b", "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": "716575853b2c937b", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "fafc4a11c70ce10c", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "17304bb1eae7c631", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "20f79c79f0b98924", "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": "4335d0c9f3ce2008", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-89525d52ff61bdbe", "level": "none", "message": {"text": "Commented-code block (5 lines) in MyOwnClone/src/proxy.ts:210"}, "properties": {"repobilityId": "0508ca241247b68c", "scanner": "scanner-primary", "fingerprint": "89525d52ff61bdbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-364ca214cc068dde", "level": "none", "message": {"text": "Commented-code block (5 lines) in MyOwnClone/src/__tests__/components/Modal.test.tsx:96"}, "properties": {"repobilityId": "118d16885cee2673", "scanner": "scanner-primary", "fingerprint": "364ca214cc068dde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b28a065122984a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/ui/SearchCommandBar.tsx:226"}, "properties": {"repobilityId": "43315185caa59933", "scanner": "scanner-primary", "fingerprint": "4b28a065122984a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7381692f3e4282b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/components/admin/useAdminFetch.ts:48"}, "properties": {"repobilityId": "a88a85193306459b", "scanner": "scanner-primary", "fingerprint": "e7381692f3e4282b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ac5550cff8dac14", "level": "note", "message": {"text": "Legacy-named symbol `local_lexical_v1` in MyOwnClone/src/app/api/clone/sources/route.ts:208"}, "properties": {"repobilityId": "8479408ec27b5adb", "scanner": "scanner-primary", "fingerprint": "2ac5550cff8dac14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c101169fa3957443", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/api/stt/route.ts:51"}, "properties": {"repobilityId": "2337a48be994b555", "scanner": "scanner-primary", "fingerprint": "c101169fa3957443", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed5537f597439d4b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61"}, "properties": {"repobilityId": "53c065566545168a", "scanner": "scanner-primary", "fingerprint": "ed5537f597439d4b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c19a83cb82f1e74", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71"}, "properties": {"repobilityId": "fa2abe9693aef19b", "scanner": "scanner-primary", "fingerprint": "9c19a83cb82f1e74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c4a0a3025e8ba75", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83"}, "properties": {"repobilityId": "ac8cd5a0c46a92e5", "scanner": "scanner-primary", "fingerprint": "6c4a0a3025e8ba75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4836eadc4a81df2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/app/(dashboard)/productos/page.tsx:55"}, "properties": {"repobilityId": "717669da2ba89ddf", "scanner": "scanner-primary", "fingerprint": "4836eadc4a81df2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f30ffec0ac8e7a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 MyOwnClone/src/lib/video.ts:9"}, "properties": {"repobilityId": "c57495507b7cd507", "scanner": "scanner-primary", "fingerprint": "6f30ffec0ac8e7a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08b90411e5942ee0", "level": "note", "message": {"text": "Legacy-named symbol `local_hybrid_v1` in tests/test_local_knowledge_retrieval.py:61"}, "properties": {"repobilityId": "ba90a775897ac4ec", "scanner": "scanner-primary", "fingerprint": "08b90411e5942ee0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-249bf3daeb8b07e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_local_knowledge_retrieval.py:128"}, "properties": {"repobilityId": "a2add6d69ee841de", "scanner": "scanner-primary", "fingerprint": "249bf3daeb8b07e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17e96bf5b91cc0bd", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/test_smoke.py:230"}, "properties": {"repobilityId": "6c43584706cf9dd0", "scanner": "scanner-primary", "fingerprint": "17e96bf5b91cc0bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67c6403697af9690", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/controllers/console/auth.py:18"}, "properties": {"repobilityId": "f3649e674f9e148b", "scanner": "scanner-primary", "fingerprint": "67c6403697af9690", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4898ab615da04b7d", "level": "note", "message": {"text": "Legacy-named symbol `local_hybrid_v1` in api/core/retrieval.py:180"}, "properties": {"repobilityId": "71ae8b31bc3efc70", "scanner": "scanner-primary", "fingerprint": "4898ab615da04b7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b7c391a0371c842d", "level": "note", "message": {"text": "Legacy-named symbol `local_hybrid_v1` in api/core/myownclone/silos.py:16"}, "properties": {"repobilityId": "9d8ac2f1c15036da", "scanner": "scanner-primary", "fingerprint": "b7c391a0371c842d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3438cca052e22ece", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 api/migrations/versions/2026_05_26_1648-b2c3d4e5f6a7_add_myownclone_columns_to_existing_tables.py:18"}, "properties": {"repobilityId": "200805ef9f2cabec", "scanner": "scanner-primary", "fingerprint": "3438cca052e22ece", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6bfa8547dd74642d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5d09af91cfdef75f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-76a2f6818267a9a8", "level": "note", "message": {"text": "Near-duplicate function bodies in 8 places"}, "properties": {"repobilityId": "4b89aed20bdb5c5d", "scanner": "scanner-primary", "fingerprint": "76a2f6818267a9a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "3d79b51020936509", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "16b6af17a146b7b9", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "ed2b7d938c48bc12", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "ffb39a10946867d4", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "22b4a501b22054e1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8df90fd946986d46", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "75ea0de0163640ad", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-33a6b62e30ce7ab4", "level": "note", "message": {"text": "Near-duplicate function bodies in 6 places"}, "properties": {"repobilityId": "00bd78c27b2c855a", "scanner": "scanner-primary", "fingerprint": "33a6b62e30ce7ab4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "29c86a1d63daf3cd", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c0cbace0324b5005", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d72c877e1617db51", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-80af63866efbd475", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:224)"}, "properties": {"repobilityId": "eb0dbac47f75ea3a", "scanner": "scanner-primary", "fingerprint": "80af63866efbd475", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c334f9c464dae2bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/memories?type=memory (MyOwnClone/src/components/ui/SearchCommandBar.tsx:225)"}, "properties": {"repobilityId": "d4d4147d57bc6be5", "scanner": "scanner-primary", "fingerprint": "c334f9c464dae2bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-694c2f503e47e556", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:226)"}, "properties": {"repobilityId": "1afd8c27964510bb", "scanner": "scanner-primary", "fingerprint": "694c2f503e47e556", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55821435550c21e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/products (MyOwnClone/src/components/ui/SearchCommandBar.tsx:230)"}, "properties": {"repobilityId": "ef01c766bed74506", "scanner": "scanner-primary", "fingerprint": "55821435550c21e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b8dcf99c8c9a0b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/components/ui/SearchCommandBar.tsx:234)"}, "properties": {"repobilityId": "cdce7c861b7dbc8a", "scanner": "scanner-primary", "fingerprint": "9b8dcf99c8c9a0b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c64b59444cea485c", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones/${arr[0].id}/meeting-types (MyOwnClone/src/components/ui/SearchCommandBar.tsx:238)"}, "properties": {"repobilityId": "93374dda7bb4f1d1", "scanner": "scanner-primary", "fingerprint": "c64b59444cea485c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d141e327c05da703", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/feedback (MyOwnClone/src/components/chat/MessageBubble.tsx:28)"}, "properties": {"repobilityId": "3c0fcf842ba75509", "scanner": "scanner-primary", "fingerprint": "d141e327c05da703", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-277d75413506e7a2", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/${slug}/chat (MyOwnClone/src/components/chat/ChatPanel.tsx:96)"}, "properties": {"repobilityId": "6d19ba18294d7dd9", "scanner": "scanner-primary", "fingerprint": "277d75413506e7a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ca7caf5261d39d9", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/impersonate (MyOwnClone/src/components/admin/ImpersonateButton.tsx:50)"}, "properties": {"repobilityId": "bf4b65b074ed60e4", "scanner": "scanner-primary", "fingerprint": "9ca7caf5261d39d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d683ad77722f3c2a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/courtesy (MyOwnClone/src/components/admin/CourtesyButton.tsx:52)"}, "properties": {"repobilityId": "d63880d839e74271", "scanner": "scanner-primary", "fingerprint": "d683ad77722f3c2a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bffc2a829d662047", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/reset-password (MyOwnClone/src/app/reset-password/page.tsx:54)"}, "properties": {"repobilityId": "1fb6f820a583f9db", "scanner": "scanner-primary", "fingerprint": "bffc2a829d662047", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3316e047904b70a4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/audio/transcriptions (MyOwnClone/src/app/api/stt/route.ts:51)"}, "properties": {"repobilityId": "dfccd6795e81c4da", "scanner": "scanner-primary", "fingerprint": "3316e047904b70a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd261f476e4305e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:77)"}, "properties": {"repobilityId": "264e8f628355e0c6", "scanner": "scanner-primary", "fingerprint": "dd261f476e4305e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8073f4e2aa25064", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/clones/${clone.id} (MyOwnClone/src/app/(dashboard)/settings/page.tsx:111)"}, "properties": {"repobilityId": "a0282e48920126c0", "scanner": "scanner-primary", "fingerprint": "c8073f4e2aa25064", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22a002ecd9d62c0c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/settings/page.tsx:134)"}, "properties": {"repobilityId": "7672b5d2bd8e51a5", "scanner": "scanner-primary", "fingerprint": "22a002ecd9d62c0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c110584cb859f3d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/clones/${clone.id}/prompts (MyOwnClone/src/app/(dashboard)/settings/page.tsx:167)"}, "properties": {"repobilityId": "9f7e62c1a9762024", "scanner": "scanner-primary", "fingerprint": "9c110584cb859f3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c8b78cd7a1fec11", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/billing (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:71)"}, "properties": {"repobilityId": "070d401bfb9afcb8", "scanner": "scanner-primary", "fingerprint": "4c8b78cd7a1fec11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d51fe86f74db121", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/plans (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:72)"}, "properties": {"repobilityId": "3edc7af919fde767", "scanner": "scanner-primary", "fingerprint": "3d51fe86f74db121", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-baad05c60f3cd83c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/stripe/checkout (MyOwnClone/src/app/(dashboard)/facturacion/page.tsx:110)"}, "properties": {"repobilityId": "d2bf44bd6b0ce758", "scanner": "scanner-primary", "fingerprint": "baad05c60f3cd83c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-480b07e9bb5b4eae", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:59)"}, "properties": {"repobilityId": "658d41804746a83e", "scanner": "scanner-primary", "fingerprint": "480b07e9bb5b4eae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3df9fd3643b72b88", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/analytics/top-questions (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:60)"}, "properties": {"repobilityId": "40a454bf0f055b92", "scanner": "scanner-primary", "fingerprint": "3df9fd3643b72b88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74d39bc4434fef40", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/analytics/gaps (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:61)"}, "properties": {"repobilityId": "96f1cfccdafd93d3", "scanner": "scanner-primary", "fingerprint": "74d39bc4434fef40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfad05b03ee77699", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/analytics/costs (MyOwnClone/src/app/(dashboard)/analiticas/page.tsx:62)"}, "properties": {"repobilityId": "c9a4f8f0f0c06e37", "scanner": "scanner-primary", "fingerprint": "cfad05b03ee77699", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9eb5f7f8369d11c", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:63)"}, "properties": {"repobilityId": "7540227ceb1a91e7", "scanner": "scanner-primary", "fingerprint": "d9eb5f7f8369d11c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4aa6f78572bcc290", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:71)"}, "properties": {"repobilityId": "1d1e64afa1eadcdd", "scanner": "scanner-primary", "fingerprint": "4aa6f78572bcc290", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d09d84fca9ae5413", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:72)"}, "properties": {"repobilityId": "00414c73d0dee3b8", "scanner": "scanner-primary", "fingerprint": "d09d84fca9ae5413", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42e1be458da73a71", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/meeting-types (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:100)"}, "properties": {"repobilityId": "bdf60f52e89a0140", "scanner": "scanner-primary", "fingerprint": "42e1be458da73a71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cae2594a7a7a6129", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:134)"}, "properties": {"repobilityId": "6ee4484d1d2676c5", "scanner": "scanner-primary", "fingerprint": "cae2594a7a7a6129", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd61444badd79a0d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/meeting-types/${meetingType.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:154)"}, "properties": {"repobilityId": "ed5e19b3a5eb3a2c", "scanner": "scanner-primary", "fingerprint": "dd61444badd79a0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9e56a918ee1d427", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/availability/${slot.id} (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:176)"}, "properties": {"repobilityId": "09ba155ea6fd14be", "scanner": "scanner-primary", "fingerprint": "d9e56a918ee1d427", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e75a5e0e0f31ac4", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/availability (MyOwnClone/src/app/(dashboard)/reuniones/page.tsx:193)"}, "properties": {"repobilityId": "f07167b606aba0f2", "scanner": "scanner-primary", "fingerprint": "2e75a5e0e0f31ac4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8fb1a4b47c318ba", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:73)"}, "properties": {"repobilityId": "33ffc9e7c9b4549d", "scanner": "scanner-primary", "fingerprint": "a8fb1a4b47c318ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edbc4e06e310e1ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/analytics/overview (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:83)"}, "properties": {"repobilityId": "b102a433d2ba482f", "scanner": "scanner-primary", "fingerprint": "edbc4e06e310e1ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-944036e92a533c48", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/inbox/list?limit=3 (MyOwnClone/src/app/(dashboard)/resumen/page.tsx:84)"}, "properties": {"repobilityId": "b29492e8f1727eaf", "scanner": "scanner-primary", "fingerprint": "944036e92a533c48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e713c4ae3091c6f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:58)"}, "properties": {"repobilityId": "51e2dc8123ee363a", "scanner": "scanner-primary", "fingerprint": "e713c4ae3091c6f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b693f13be7aaec37", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/(dashboard)/onboarding/page.tsx:122)"}, "properties": {"repobilityId": "342df43770e59d64", "scanner": "scanner-primary", "fingerprint": "b693f13be7aaec37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64a490a54ba310d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/memories?type=${activeTab} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:69)"}, "properties": {"repobilityId": "2df8f3635b6fa57e", "scanner": "scanner-primary", "fingerprint": "64a490a54ba310d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8cc361007520c84b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clone/memories/${id} (MyOwnClone/src/app/(dashboard)/cerebro/page.tsx:125)"}, "properties": {"repobilityId": "99bddf7a326a85ef", "scanner": "scanner-primary", "fingerprint": "8cc361007520c84b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13a89b23f782069e", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/page.tsx:53)"}, "properties": {"repobilityId": "4952e5eac8092272", "scanner": "scanner-primary", "fingerprint": "13a89b23f782069e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fcea5b47efb04a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/sources (MyOwnClone/src/app/(dashboard)/biblioteca/nuevo/page.tsx:88)"}, "properties": {"repobilityId": "24937dffc1aae86c", "scanner": "scanner-primary", "fingerprint": "2fcea5b47efb04a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfbcd444053fb3d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/inbox/list?${params} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:88)"}, "properties": {"repobilityId": "0c5fa563007015bb", "scanner": "scanner-primary", "fingerprint": "cfbcd444053fb3d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d031f30404dab666", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/inbox/${id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:109)"}, "properties": {"repobilityId": "2426c79fd99d8249", "scanner": "scanner-primary", "fingerprint": "d031f30404dab666", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6e578f7e1fd9c9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/inbox/${selected.id}/generate-draft (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:126)"}, "properties": {"repobilityId": "45dda4101a22c32a", "scanner": "scanner-primary", "fingerprint": "b6e578f7e1fd9c9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-932572c07f80f516", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:145)"}, "properties": {"repobilityId": "b8c73e418a65db2e", "scanner": "scanner-primary", "fingerprint": "932572c07f80f516", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f398d35817c95e9f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:167)"}, "properties": {"repobilityId": "6ceea3bc113107bd", "scanner": "scanner-primary", "fingerprint": "f398d35817c95e9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52a584f40d149bf5", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clone/inbox/${selected.id} (MyOwnClone/src/app/(dashboard)/inbox/page.tsx:187)"}, "properties": {"repobilityId": "9690dd51c22678fa", "scanner": "scanner-primary", "fingerprint": "52a584f40d149bf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fe56948c4b4dfff", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/app/(dashboard)/productos/page.tsx:48)"}, "properties": {"repobilityId": "8eb2ec510883232e", "scanner": "scanner-primary", "fingerprint": "4fe56948c4b4dfff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-810f14142b456822", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones/${cid}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:55)"}, "properties": {"repobilityId": "362528a3608f53fe", "scanner": "scanner-primary", "fingerprint": "810f14142b456822", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-812de80ea3d99afe", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones/${cloneId}/products (MyOwnClone/src/app/(dashboard)/productos/page.tsx:78)"}, "properties": {"repobilityId": "87cfdba038458f5e", "scanner": "scanner-primary", "fingerprint": "812de80ea3d99afe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d6507850843557e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/page.tsx:113)"}, "properties": {"repobilityId": "eb61f7a449e17bd4", "scanner": "scanner-primary", "fingerprint": "8d6507850843557e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82a110069aaa5c9a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clone/clones/${cloneId}/products/${product.id} (MyOwnClone/src/app/(dashboard)/productos/page.tsx:141)"}, "properties": {"repobilityId": "2993bd635d3fc96c", "scanner": "scanner-primary", "fingerprint": "82a110069aaa5c9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a086554599b7c168", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/verify-email (MyOwnClone/src/app/es/verificar/page.tsx:28)"}, "properties": {"repobilityId": "2e9472edb5362f68", "scanner": "scanner-primary", "fingerprint": "a086554599b7c168", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4afd3330ed2ba53c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clone/clones (MyOwnClone/src/app/es/onboarding/page.tsx:64)"}, "properties": {"repobilityId": "aecee1bf0796c520", "scanner": "scanner-primary", "fingerprint": "4afd3330ed2ba53c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-364b68f7738ad304", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/forgot-password (MyOwnClone/src/app/forgot-password/page.tsx:18)"}, "properties": {"repobilityId": "4c28193cac59b565", "scanner": "scanner-primary", "fingerprint": "364b68f7738ad304", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd94e4d9ff81214b", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/tenants (MyOwnClone/src/app/admin/tenants/page.tsx:124)"}, "properties": {"repobilityId": "118cf8a7e27ce9e6", "scanner": "scanner-primary", "fingerprint": "dd94e4d9ff81214b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa40077067923191", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:85)"}, "properties": {"repobilityId": "be52acca3cd34b6f", "scanner": "scanner-primary", "fingerprint": "fa40077067923191", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ac4156c26911044", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/tenants/${id} (MyOwnClone/src/app/admin/tenants/[id]/page.tsx:125)"}, "properties": {"repobilityId": "b67312cda83af450", "scanner": "scanner-primary", "fingerprint": "6ac4156c26911044", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab8573eb57d9a240", "level": "error", "message": {"text": "Dangling fetch: GET /api/clone/clones (MyOwnClone/src/lib/clone-resolver.ts:21)"}, "properties": {"repobilityId": "600ed6956cad08b1", "scanner": "scanner-primary", "fingerprint": "ab8573eb57d9a240", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42a63a5518b2d1e3", "level": "note", "message": {"text": "Unused endpoint: ANY /deploy"}, "properties": {"repobilityId": "9a8680c3cc7bae91", "scanner": "scanner-primary", "fingerprint": "42a63a5518b2d1e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa31e1efb2635503", "level": "note", "message": {"text": "Unused endpoint: ANY /inbound-email"}, "properties": {"repobilityId": "799c3a976a6e855a", "scanner": "scanner-primary", "fingerprint": "fa31e1efb2635503", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2baa55152f7df222", "level": "note", "message": {"text": "Unused endpoint: ANY /clones/<string:slug>"}, "properties": {"repobilityId": "be33263e8d41eaed", "scanner": "scanner-primary", "fingerprint": "2baa55152f7df222", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dac9cb6507922d34", "level": "note", "message": {"text": "Unused endpoint: ANY /clones/<string:slug>/chat"}, "properties": {"repobilityId": "cafa6cac599478e6", "scanner": "scanner-primary", "fingerprint": "dac9cb6507922d34", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-02612857da04f3be", "level": "note", "message": {"text": "Unused endpoint: ANY /clones/<string:slug>/chat-simple"}, "properties": {"repobilityId": "3cad2c95be1bf56c", "scanner": "scanner-primary", "fingerprint": "02612857da04f3be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db0f2dfcce492327", "level": "note", "message": {"text": "Unused endpoint: ANY /clones/<string:slug>/meeting-types"}, "properties": {"repobilityId": "f2b1e590ea4f88c3", "scanner": "scanner-primary", "fingerprint": "db0f2dfcce492327", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-346c06b25cb11c56", "level": "note", "message": {"text": "Unused endpoint: ANY /clones/<string:slug>/bookings"}, "properties": {"repobilityId": "7979422ec1a7c814", "scanner": "scanner-primary", "fingerprint": "346c06b25cb11c56", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c7ad61ba1b23915", "level": "note", "message": {"text": "Unused endpoint: ANY /login"}, "properties": {"repobilityId": "e03e74ab8f31d846", "scanner": "scanner-primary", "fingerprint": "4c7ad61ba1b23915", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a2a3c58bacd32fa", "level": "note", "message": {"text": "Unused endpoint: ANY /verify"}, "properties": {"repobilityId": "9d98b5013d683957", "scanner": "scanner-primary", "fingerprint": "4a2a3c58bacd32fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af3083e404386aad", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/plans"}, "properties": {"repobilityId": "070835a1792896c3", "scanner": "scanner-primary", "fingerprint": "af3083e404386aad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-27107681bc6e6659", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/stripe/checkout"}, "properties": {"repobilityId": "f567d2312a9c7e02", "scanner": "scanner-primary", "fingerprint": "27107681bc6e6659", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09b6ffb07926e3fd", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/stripe/billing"}, "properties": {"repobilityId": "91928b5722b0694b", "scanner": "scanner-primary", "fingerprint": "09b6ffb07926e3fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d9fc4c034e325ca4", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types"}, "properties": {"repobilityId": "2be6f1edd1457552", "scanner": "scanner-primary", "fingerprint": "d9fc4c034e325ca4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33b91d58bfd2a72d", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/meeting-types/<string:meeting_type_id>"}, "properties": {"repobilityId": "9855bebea63746c3", "scanner": "scanner-primary", "fingerprint": "33b91d58bfd2a72d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-762d05fbcea158c1", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability"}, "properties": {"repobilityId": "1666b14bafa02b3c", "scanner": "scanner-primary", "fingerprint": "762d05fbcea158c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c729693cb35a5110", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/availability/<string:availability_id>"}, "properties": {"repobilityId": "54492bb9839a71d1", "scanner": "scanner-primary", "fingerprint": "c729693cb35a5110", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f366b8b0f1bb25a", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products"}, "properties": {"repobilityId": "ad2981a4dec4f867", "scanner": "scanner-primary", "fingerprint": "0f366b8b0f1bb25a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0e50e44d3f5f02b", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/products/<string:product_id>"}, "properties": {"repobilityId": "b6536b2e46aded34", "scanner": "scanner-primary", "fingerprint": "c0e50e44d3f5f02b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7d479969cef3c3a", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings"}, "properties": {"repobilityId": "7b1095fa6895c369", "scanner": "scanner-primary", "fingerprint": "d7d479969cef3c3a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9b4bbd06e934675b", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/bookings/<string:booking_id>"}, "properties": {"repobilityId": "c582c8d959ad2e9b", "scanner": "scanner-primary", "fingerprint": "9b4bbd06e934675b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81c9d523de32c161", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/feedback"}, "properties": {"repobilityId": "a382b282cae5031a", "scanner": "scanner-primary", "fingerprint": "81c9d523de32c161", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3574ba2b3112fc5", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/feedback/stats"}, "properties": {"repobilityId": "5fdeede85196b6ec", "scanner": "scanner-primary", "fingerprint": "f3574ba2b3112fc5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0d851f07069f4ea", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/overview"}, "properties": {"repobilityId": "693e93860e9f20a2", "scanner": "scanner-primary", "fingerprint": "f0d851f07069f4ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b9135f7ae68c874", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/top-questions"}, "properties": {"repobilityId": "42d446f53954f367", "scanner": "scanner-primary", "fingerprint": "7b9135f7ae68c874", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42f9ee42f12bca5b", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/gaps"}, "properties": {"repobilityId": "02802d1be0dbc77f", "scanner": "scanner-primary", "fingerprint": "42f9ee42f12bca5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68e8b5d926bd367f", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/analytics/costs"}, "properties": {"repobilityId": "929555d475893d72", "scanner": "scanner-primary", "fingerprint": "68e8b5d926bd367f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b375ab15c529ee51", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/memories"}, "properties": {"repobilityId": "53aec6f6b02abd57", "scanner": "scanner-primary", "fingerprint": "b375ab15c529ee51", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a3bd1bd93867443", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/memories/<string:memory_id>"}, "properties": {"repobilityId": "ceb232c5de9e3d5e", "scanner": "scanner-primary", "fingerprint": "9a3bd1bd93867443", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b6d285cd4dd37c75", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/inbox"}, "properties": {"repobilityId": "71ae39efc17d70dd", "scanner": "scanner-primary", "fingerprint": "b6d285cd4dd37c75", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b79642058cdc406", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>"}, "properties": {"repobilityId": "b66a17e374c48276", "scanner": "scanner-primary", "fingerprint": "1b79642058cdc406", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51200ab6c741a394", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/inbox/<string:email_id>/generate-draft"}, "properties": {"repobilityId": "45caa277c6528126", "scanner": "scanner-primary", "fingerprint": "51200ab6c741a394", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d73cb0e39fa39c0", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/overview"}, "properties": {"repobilityId": "735f508eda0066b2", "scanner": "scanner-primary", "fingerprint": "5d73cb0e39fa39c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc127f0c46c240bb", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/tenants"}, "properties": {"repobilityId": "92131305fd959a67", "scanner": "scanner-primary", "fingerprint": "dc127f0c46c240bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9204ada98cc37a86", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/impersonation"}, "properties": {"repobilityId": "6ec9bc9827fe83ac", "scanner": "scanner-primary", "fingerprint": "9204ada98cc37a86", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28b9ea2b287f5465", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/impersonate"}, "properties": {"repobilityId": "0990c0c84511edec", "scanner": "scanner-primary", "fingerprint": "28b9ea2b287f5465", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce095f93e26cb0e0", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/impersonate/stop"}, "properties": {"repobilityId": "4b8148f90ca38bd9", "scanner": "scanner-primary", "fingerprint": "ce095f93e26cb0e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cff6bc59dc8c8102", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/courtesy-account"}, "properties": {"repobilityId": "2309778a6372d7b5", "scanner": "scanner-primary", "fingerprint": "cff6bc59dc8c8102", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0749b2bf39ed3e1c", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/audit-log"}, "properties": {"repobilityId": "f826eb1bd6c090ea", "scanner": "scanner-primary", "fingerprint": "0749b2bf39ed3e1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87b539e1395e7e79", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/admin/feedback"}, "properties": {"repobilityId": "3fc1ebfa4f0164d2", "scanner": "scanner-primary", "fingerprint": "87b539e1395e7e79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51ef3f83683fd399", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones"}, "properties": {"repobilityId": "8eb148a3784b09bc", "scanner": "scanner-primary", "fingerprint": "51ef3f83683fd399", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3efce7fdb6aa8cd1", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>"}, "properties": {"repobilityId": "b58770b81d304dfe", "scanner": "scanner-primary", "fingerprint": "3efce7fdb6aa8cd1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3965fa2b6c8d8440", "level": "note", "message": {"text": "Unused endpoint: ANY /myownclone/clones/<string:clone_id>/prompts"}, "properties": {"repobilityId": "93e530e6fa2e16a3", "scanner": "scanner-primary", "fingerprint": "3965fa2b6c8d8440", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}