{"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_blueprint_gap", "name": "Foundry mined blueprint gap alignment: takato23/baloskycom", "shortDescription": {"text": "Foundry mined blueprint gap alignment: takato23/baloskycom"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_high_confidence_link\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takato23/baloskycom#1\nRepo: takato23/baloskycom\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 43\nEdges: 114\nNode types: {'link_quality': 12, 'pr_file': 8, 'comment_chain': 5, 'alignment': 5, 'comment': 4, 'commit': 3, 't"}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: takato23/baloskycom", "shortDescription": {"text": "Foundry mined assumption checks: takato23/baloskycom"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takato23/baloskycom#1\nRepo: takato23/baloskycom\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 5\nLinked commit count: 7\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 8\nLabels: {'data_schema_persistence': 4, 'api_integration_gap': 1}\nPolarities: {'bad': 5}\nChanged file labels: {'api_or_backend': 4, 'dependency_or_build': 2, 'ui_or_frontend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fa447f805c31ab4c\",\n    \"kind\": \"p"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: takato23/baloskycom", "shortDescription": {"text": "Foundry mined schema ui api mismatch: takato23/baloskycom"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#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: takato23/baloskycom\nThread: takato23/baloskycom#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takato23/baloskycom#1\nRepo: takato23/baloskycom\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 43\nEdges: 114\nNode types: {'link_quality': 12, 'pr_file': 8, 'comment_chain': 5, 'alignment': 5, 'comment': 4, 'commit': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "scanner-da01c049527d6a4c", "name": "Stray `console.log` in TS/JS \u2014 server.ts:295", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:295"}, "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-39be5d44bb2d991f", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-productos.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-productos.ts:94"}, "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-561be6057dd433b9", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-thumbs.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-thumbs.ts:84"}, "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-5b697c8fea7365c9", "name": "Stray `console.log` in TS/JS \u2014 scripts/bulk-upload.ts:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-upload.ts:182"}, "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-d7295eddfc257f77", "name": "Stray `console.log` in TS/JS \u2014 scripts/classify-media.ts:180", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/classify-media.ts:180"}, "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-150fd8d4585ca70c", "name": "Stray `console.log` in TS/JS \u2014 scripts/set-pinned.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-pinned.ts:37"}, "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-4bfb886abc36ccf9", "name": "Stray `console.log` in TS/JS \u2014 scripts/_smoke-checkout.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_smoke-checkout.ts:30"}, "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-ed2737b9eafc76d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-muro.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-muro.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-68ad5fab0b82bece", "name": "Stray `console.log` in TS/JS \u2014 scripts/build-og.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-og.ts:91"}, "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-799ec033bdb65206", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate-media-to-blob.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-media-to-blob.ts:87"}, "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-15eaecd74d2aed7a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Modal.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Modal.tsx:71"}, "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-4796c3d71bcc3e00", "name": "TODO/FIXME marker in shipping code \u2014 src/components/effects/HeroMeshScene.tsx:303", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/effects/HeroMeshScene.tsx:303"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de619a11cf04f290", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/PublicSongsCatalog.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/PublicSongsCatalog.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-44b3c0b69282e4cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/MusicPlayerDock.tsx:22", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/MusicPlayerDock.tsx:22"}, "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-a2bd53865df75fdf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/HomeMusicSection.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/HomeMusicSection.tsx:359"}, "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-0de87ee574cff083", "name": "TODO/FIXME marker in shipping code \u2014 src/pages/HomePreview.tsx:154", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/HomePreview.tsx:154"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae7ce2fcb888a744", "name": "Stray `console.log` in TS/JS \u2014 src/pages/HeroPreview.tsx:1502", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/HeroPreview.tsx:1502"}, "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-b6768e5bd763dcc7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Laboratorio.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Laboratorio.tsx:242"}, "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-81390fca2a5a9238", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.tsx:746", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.tsx:746"}, "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-0fb08fa59fda7792", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MultimediaPreview.tsx:773", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MultimediaPreview.tsx:773"}, "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-b92d552ecc05b4c9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminMedia.tsx:820", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminMedia.tsx:820"}, "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-0652b6a18ba862ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminDashboard.tsx:903", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminDashboard.tsx:903"}, "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-f8af6f3e9a41a4df", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminLayout.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminLayout.tsx:171"}, "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-26209d39ab0382c3", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useSound.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useSound.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-566c05c23684a90e", "name": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:212"}, "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-55a30cdad7cd7c0b", "name": "Stray `console.log` in TS/JS \u2014 src/server/db.ts:1127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/db.ts:1127"}, "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-664a0866568773b4", "name": "Stray `console.log` in TS/JS \u2014 src/context/AppContext.tsx:336", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/context/AppContext.tsx:336"}, "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-10c88a8eb139cf68", "name": "Insecure pattern 'direct_innerhtml_assignment' in preview-qa.html:234", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in preview-qa.html:234"}, "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-a365d385b15a10e5", "name": "Insecure pattern 'node_child_process' in scripts/build-productora-previews.mjs:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/build-productora-previews.mjs:24"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-918494c993850ece", "name": "Insecure pattern 'node_child_process' in scripts/build-productora-reel.mjs:18", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/build-productora-reel.mjs:18"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1c2f38a57cbc350", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/club.html:160", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/club.html:160"}, "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-c9a3223dba380458", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/pago-exitoso.html:303", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/pago-exitoso.html:303"}, "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-e101cd9ba91000ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio-wire.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio-wire.js:44"}, "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-a36c727c79d7ec53", "name": "Insecure pattern 'document_write' in public/delirio.html:7184", "shortDescription": {"text": "Insecure pattern 'document_write' in public/delirio.html:7184"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78384adf3bb9054b", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio.html:7414", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio.html:7414"}, "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-a1c79ef618b78aba", "name": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminSettings.tsx:532", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminSettings.tsx:532"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a693e424f6e64d7e", "name": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminLogin.tsx:55", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminLogin.tsx:55"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-18d9efa1ebea9fce", "name": "Very large file: public/delirio-wire.js (3218 lines)", "shortDescription": {"text": "Very large file: public/delirio-wire.js (3218 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4939131f6082d666", "name": "Very large file: src/pages/HeroPreview.tsx (1882 lines)", "shortDescription": {"text": "Very large file: src/pages/HeroPreview.tsx (1882 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2d4a647b3238256", "name": "Very large file: src/pages/PreviewFull.tsx (4104 lines)", "shortDescription": {"text": "Very large file: src/pages/PreviewFull.tsx (4104 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9fcea32ea83b12a", "name": "Very large file: src/pages/Laboratorio.tsx (1437 lines)", "shortDescription": {"text": "Very large file: src/pages/Laboratorio.tsx (1437 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b8937082c00c76e3", "name": "Very large file: src/pages/PreviewV2.tsx (1486 lines)", "shortDescription": {"text": "Very large file: src/pages/PreviewV2.tsx (1486 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-145da80a81238b1f", "name": "Very large file: src/pages/Home.tsx (1329 lines)", "shortDescription": {"text": "Very large file: src/pages/Home.tsx (1329 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59adacea06b81cbe", "name": "Very large file: src/pages/admin/AdminSettings.tsx (1519 lines)", "shortDescription": {"text": "Very large file: src/pages/admin/AdminSettings.tsx (1519 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59a06a16340058b7", "name": "Very large file: src/pages/admin/AdminMedia.tsx (2205 lines)", "shortDescription": {"text": "Very large file: src/pages/admin/AdminMedia.tsx (2205 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4db9fdaf53f02991", "name": "Very large file: src/pages/admin/AdminDashboard.tsx (1808 lines)", "shortDescription": {"text": "Very large file: src/pages/admin/AdminDashboard.tsx (1808 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e438e60f891871c3", "name": "Very large file: src/server/db.ts (1132 lines)", "shortDescription": {"text": "Very large file: src/server/db.ts (1132 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70ad6614f516f26e", "name": "Very large file: src/server/routes/api.ts (3858 lines)", "shortDescription": {"text": "Very large file: src/server/routes/api.ts (3858 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 174 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25563efdd6767c04", "name": "78 TODO/FIXME markers", "shortDescription": {"text": "78 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "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 179 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 154 placeholder/mock markers across 33 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f47887f42f15ac0c", "name": "Commented-code block (10 lines) in server.ts:101", "shortDescription": {"text": "Commented-code block (10 lines) in server.ts:101"}, "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-7aac1b760d501a88", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bulk-upload.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bulk-upload.ts:104"}, "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-5ce0a711d5df6a7a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/classify-media.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/classify-media.ts: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-abdb5d833dd9c536", "name": "Legacy-named symbol `pur_old` in scripts/_smoke-checkout.ts:67", "shortDescription": {"text": "Legacy-named symbol `pur_old` in scripts/_smoke-checkout.ts:67"}, "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-4c4a4acd1e05b23a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-previews.mjs:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-previews.mjs:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8984cc000668e50a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-reel.mjs:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-reel.mjs:40"}, "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-794f82f0ae52be81", "name": "Legacy-named symbol `availability__copy` in public/delirio-wire.js:1653", "shortDescription": {"text": "Legacy-named symbol `availability__copy` in public/delirio-wire.js:1653"}, "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-86061449a74c9b40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/delirio-wire.js:2947", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/delirio-wire.js:2947"}, "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-2d09fd0dc2b7a773", "name": "Commented-code block (5 lines) in src/components/Layout.tsx:42", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/Layout.tsx:42"}, "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-a2a35112691a756b", "name": "Commented-code block (20 lines) in src/components/home/Planets3D.tsx:60", "shortDescription": {"text": "Commented-code block (20 lines) in src/components/home/Planets3D.tsx:60"}, "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-ae2bfeb4b73eff24", "name": "Commented-code block (6 lines) in src/components/home/MediaLightbox.tsx:165", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/MediaLightbox.tsx:165"}, "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-01577f0f756446da", "name": "Commented-code block (5 lines) in src/components/home/SunoModal.tsx:244", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/home/SunoModal.tsx:244"}, "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-c80e6631374d7772", "name": "Legacy-named symbol `hero__copy` in src/components/home/HeroRedesign.tsx:33", "shortDescription": {"text": "Legacy-named symbol `hero__copy` in src/components/home/HeroRedesign.tsx:33"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-686616725964f945", "name": "Legacy-named symbol `card__copy` in src/components/home/SupportRail.tsx:73", "shortDescription": {"text": "Legacy-named symbol `card__copy` in src/components/home/SupportRail.tsx:73"}, "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-9bfe59733546bebb", "name": "Commented-code block (5 lines) in src/components/home/WallpaperGate.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/home/WallpaperGate.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fb2aa9e04bd95f2", "name": "Legacy-named symbol `lead__copy` in src/components/home/EditorialSectionLead.tsx:37", "shortDescription": {"text": "Legacy-named symbol `lead__copy` in src/components/home/EditorialSectionLead.tsx:37"}, "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-04d287c46e247fc7", "name": "Commented-code block (6 lines) in src/components/home/HeroSection.tsx:62", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/HeroSection.tsx:62"}, "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-3b33d802711b9a6a", "name": "Commented-code block (6 lines) in src/components/home/PixelSection.tsx:177", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/PixelSection.tsx:177"}, "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-c3e65454065e774f", "name": "Commented-code block (5 lines) in src/components/effects/Hero3DScene.tsx:184", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/effects/Hero3DScene.tsx:184"}, "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-470a36b2978fa890", "name": "Commented-code block (8 lines) in src/components/effects/MascotCompanion.tsx:341", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/effects/MascotCompanion.tsx:341"}, "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-a67c15589f3ad72f", "name": "Commented-code block (5 lines) in src/lib/songEmbed.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/songEmbed.ts:36"}, "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-a8cfc085543a7953", "name": "Commented-code block (6 lines) in src/pages/HomePreview.tsx:151", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/HomePreview.tsx:151"}, "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-2dae0d06ac0b332d", "name": "Commented-code block (5 lines) in src/pages/HeroPreview.tsx:426", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/HeroPreview.tsx:426"}, "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-1445bfe18e92c82d", "name": "Legacy-named symbol `hero__copy` in src/pages/BtvPage.tsx:280", "shortDescription": {"text": "Legacy-named symbol `hero__copy` in src/pages/BtvPage.tsx:280"}, "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-5f7bac6dcb752e5f", "name": "Commented-code block (5 lines) in src/pages/PreviewFull.tsx:52", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/PreviewFull.tsx:52"}, "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-4851db3cfe89ff0f", "name": "Legacy-named symbol `contact__copy` in src/pages/Cameo.tsx:161", "shortDescription": {"text": "Legacy-named symbol `contact__copy` in src/pages/Cameo.tsx:161"}, "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-4691a2344feec1a5", "name": "Commented-code block (5 lines) in src/pages/Laboratorio.tsx:371", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Laboratorio.tsx:371"}, "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-29c7505314f3c4bd", "name": "Legacy-named symbol `contact__copy` in src/pages/Productora.tsx:823", "shortDescription": {"text": "Legacy-named symbol `contact__copy` in src/pages/Productora.tsx:823"}, "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-2cdbc761eac810da", "name": "Commented-code block (8 lines) in src/pages/previewV2/components.tsx:142", "shortDescription": {"text": "Commented-code block (8 lines) in src/pages/previewV2/components.tsx:142"}, "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-bc712fdc6b5b7afe", "name": "Commented-code block (11 lines) in src/pages/previewV2/effects/Head3D.tsx:165", "shortDescription": {"text": "Commented-code block (11 lines) in src/pages/previewV2/effects/Head3D.tsx:165"}, "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-6e3ddcc9672b35cb", "name": "Commented-code block (5 lines) in src/server/db.ts:912", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/db.ts:912"}, "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-c18c14c162382c43", "name": "Commented-code block (5 lines) in src/server/routes/api.ts:410", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/routes/api.ts:410"}, "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-dee852b3c0f41377", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/routes/api.ts:2450", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/routes/api.ts:2450"}, "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-811c3b0b4cca65af", "name": "Commented-code block (9 lines) in src/services/api.ts:394", "shortDescription": {"text": "Commented-code block (9 lines) in src/services/api.ts:394"}, "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-d12f810721bad44b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.ts:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.ts:50"}, "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-bddda3d5a14c7401", "name": "29 env vars used in code but missing from .env.example", "shortDescription": {"text": "29 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ASSET_PATHS`, `BACKUP_DIR`, `BALOSKY_PASS`, `BALOSKY_TOKEN`, `BALOSKY_URL`, `BALOSKY_USER`, `BASE_URL`, `CREATE_MP_PREFERENCE` + 21 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-9c5e0c903a2adfaf", "name": "Frontend route `/delirio` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/delirio` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-780756219908cf74", "name": "Frontend route `/reel` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/reel` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7e872592d4f25e7", "name": "Frontend route `/preview-hero` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/preview-hero` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-499798206eb87bbc", "name": "Frontend route `/preview-full` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/preview-full` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d78bdc60302dbfc", "name": "Frontend route `/preview-v2-tipo` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/preview-v2-tipo` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-16e4768fe18f3be8", "name": "Frontend route `campaigns` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `campaigns` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d6fd6c684e40372", "name": "Frontend route `products` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `products` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4490821ad8288369", "name": "Frontend route `memberships` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `memberships` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a13ae445b87bea7", "name": "Frontend route `encargos` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `encargos` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ddc1f0e866f6323f", "name": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82b808f98499f9b4", "name": "Frontend route `ideas` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `ideas` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-24c66f6edd13a449", "name": "Frontend route `messages` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9d230942722b668", "name": "Frontend route `media` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-21e725f58d1f3269", "name": "Frontend route `media/videos` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/videos` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65404e3d14dc2624", "name": "Frontend route `media/fotos` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/fotos` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2dadc3bd10e87348", "name": "Frontend route `media/wallpapers` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/wallpapers` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa198f58ad5c9307", "name": "Frontend route `media/canciones` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/canciones` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-057a8f6f72bc04fa", "name": "Frontend route `media/panoramas` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/panoramas` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-576aa5c448ce08fc", "name": "Frontend route `media/socials` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/socials` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-313d2fd879e14457", "name": "Frontend route `media/newsletter` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `media/newsletter` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0626b4c2e4efcb82", "name": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bbc542fcda19e45", "name": "Frontend route `wall` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `wall` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a65eeaebd4e55a2b", "name": "Frontend route `vip` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `vip` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e0f53aaf07abebc", "name": "Frontend route `portfolio` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `portfolio` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-919628feec0e01f1", "name": "Frontend route `gallery` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `gallery` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-89944ed3eb590061", "name": "Frontend route `blog` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `blog` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-55d1f3a9e6f2998d", "name": "Frontend route `laboratorio` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `laboratorio` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d0a6a01521d7b26", "name": "Frontend route `btv` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `btv` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0da1ccf874de1ea8", "name": "Frontend route `balosflix` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `balosflix` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-145759d7289f11a4", "name": "Frontend route `productora` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `productora` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3ed9b06d6c0351b9", "name": "Frontend route `cameo` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `cameo` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1079a4fc81633dbf", "name": "Frontend route `home-preview` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `home-preview` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-094dba97b513cefb", "name": "Frontend route `preview-hero` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `preview-hero` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d2797d01e9877411", "name": "Frontend route `preview-multimedia` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `preview-multimedia` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8fa17940a331e35", "name": "Frontend route `preview-full` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `preview-full` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-14750f2bdb1b211a", "name": "Frontend route `preview-v2` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `preview-v2` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-572282bfedca15e1", "name": "Frontend route `club` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `club` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5f9ea06e91483eb", "name": "Frontend route `agenda-publica` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `agenda-publica` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c540d9ec3515f5b", "name": "Frontend route `cafecito` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `cafecito` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2db0440a30ad4eac", "name": "Frontend route `checkout` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `checkout` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6978651ac70e7f99", "name": "Frontend route `checkout/:campaignId` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `checkout/:campaignId` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b2710210f05f3b3", "name": "Frontend route `checkout/success` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `checkout/success` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d13b03dcba4261d3", "name": "Frontend route `checkout/failure` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `checkout/failure` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ec668ff1d9bd370", "name": "Frontend route `checkout/pending` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `checkout/pending` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11feb210c2f50b50", "name": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4833ed1cd046a39b", "name": "Frontend route `campaigns/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `campaigns/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-043f8029df464b08", "name": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Reel.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Reel.tsx:29)"}, "fullDescription": {"text": "`src/pages/Reel.tsx:29` calls `GET /videos/productora/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/videos/productora/manifest.json`\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-db5dcb115d35c9f8", "name": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Productora.tsx:164)", "shortDescription": {"text": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Productora.tsx:164)"}, "fullDescription": {"text": "`src/pages/Productora.tsx:164` calls `GET /videos/productora/manifest.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/videos/productora/manifest.json`\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-72a644a8c6220b7c", "name": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(raw)} (src/server/routes/api.ts:2930)", "shortDescription": {"text": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(raw)} (src/server/routes/api.ts:2930)"}, "fullDescription": {"text": "`src/server/routes/api.ts:2930` calls `GET https://open.spotify.com/oembed?url=${encodeURIComponent(raw)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.spotify.com/oembed`\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-7a31a486469e47f3", "name": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(url)} (src/server/routes/api.ts:3028)", "shortDescription": {"text": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(url)} (src/server/routes/api.ts:3028)"}, "fullDescription": {"text": "`src/server/routes/api.ts:3028` calls `GET https://open.spotify.com/oembed?url=${encodeURIComponent(url)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/open.spotify.com/oembed`\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-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`server.ts` declares `GET /api/health` 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-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`server.ts` declares `USE /api` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`server.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d0cb55407ce9523", "name": "Unused endpoint: GET /delirio", "shortDescription": {"text": "Unused endpoint: GET /delirio"}, "fullDescription": {"text": "`server.ts` declares `GET /delirio` 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-e4670519a8a7d7a6", "name": "Unused endpoint: GET /balosflix", "shortDescription": {"text": "Unused endpoint: GET /balosflix"}, "fullDescription": {"text": "`server.ts` declares `GET /balosflix` 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-e8d960527c7f7520", "name": "Unused endpoint: GET /pago-exitoso", "shortDescription": {"text": "Unused endpoint: GET /pago-exitoso"}, "fullDescription": {"text": "`server.ts` declares `GET /pago-exitoso` 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-ec9a9720b1a3368b", "name": "Unused endpoint: GET /pago-pendiente", "shortDescription": {"text": "Unused endpoint: GET /pago-pendiente"}, "fullDescription": {"text": "`server.ts` declares `GET /pago-pendiente` 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-ddb0e38763ff5b40", "name": "Unused endpoint: GET /pago-fallido", "shortDescription": {"text": "Unused endpoint: GET /pago-fallido"}, "fullDescription": {"text": "`server.ts` declares `GET /pago-fallido` 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-66c662ced32666de", "name": "Unused endpoint: GET /club", "shortDescription": {"text": "Unused endpoint: GET /club"}, "fullDescription": {"text": "`server.ts` declares `GET /club` 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-05a5d64eddb94d5b", "name": "Unused endpoint: GET /privacidad", "shortDescription": {"text": "Unused endpoint: GET /privacidad"}, "fullDescription": {"text": "`server.ts` declares `GET /privacidad` 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-7b7ffff3cec6e402", "name": "Unused endpoint: GET /terminos", "shortDescription": {"text": "Unused endpoint: GET /terminos"}, "fullDescription": {"text": "`server.ts` declares `GET /terminos` 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-755c192f199afe73", "name": "Unused endpoint: GET /productora", "shortDescription": {"text": "Unused endpoint: GET /productora"}, "fullDescription": {"text": "`server.ts` declares `GET /productora` 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-95b27c9e6fdb2daf", "name": "Unused endpoint: GET /reel", "shortDescription": {"text": "Unused endpoint: GET /reel"}, "fullDescription": {"text": "`server.ts` declares `GET /reel` 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-6adff6c616d28336", "name": "Unused endpoint: GET /auth/status", "shortDescription": {"text": "Unused endpoint: GET /auth/status"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /auth/status` 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-6762021161a4eafe", "name": "Unused endpoint: POST /auth/bootstrap", "shortDescription": {"text": "Unused endpoint: POST /auth/bootstrap"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /auth/bootstrap` 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-8fdbacfe9430a6ed", "name": "Unused endpoint: POST /auth/login", "shortDescription": {"text": "Unused endpoint: POST /auth/login"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /auth/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-ac42422b23e45104", "name": "Unused endpoint: GET /auth/me", "shortDescription": {"text": "Unused endpoint: GET /auth/me"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /auth/me` 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-68babb8e2f3782d1", "name": "Unused endpoint: PUT /auth/credentials", "shortDescription": {"text": "Unused endpoint: PUT /auth/credentials"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /auth/credentials` 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-f1084bc3b7a4f4bb", "name": "Unused endpoint: GET /products", "shortDescription": {"text": "Unused endpoint: GET /products"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /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-cca7583916efd86a", "name": "Unused endpoint: POST /products", "shortDescription": {"text": "Unused endpoint: POST /products"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /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-3312ed671532b931", "name": "Unused endpoint: PUT /products/:id", "shortDescription": {"text": "Unused endpoint: PUT /products/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /products/: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-631d58d0d714102a", "name": "Unused endpoint: DELETE /products/:id", "shortDescription": {"text": "Unused endpoint: DELETE /products/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /products/: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-bbd3d646f3d937e7", "name": "Unused endpoint: GET /ideas", "shortDescription": {"text": "Unused endpoint: GET /ideas"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /ideas` 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-09f365b6dee4aa8b", "name": "Unused endpoint: POST /ideas", "shortDescription": {"text": "Unused endpoint: POST /ideas"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /ideas` 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-b2c88f6fd2ae5b4e", "name": "Unused endpoint: PUT /ideas/:id", "shortDescription": {"text": "Unused endpoint: PUT /ideas/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /ideas/: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-9a909951300a387a", "name": "Unused endpoint: DELETE /ideas/:id", "shortDescription": {"text": "Unused endpoint: DELETE /ideas/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /ideas/: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-77b844cc18dfe5cf", "name": "Unused endpoint: GET /memberships", "shortDescription": {"text": "Unused endpoint: GET /memberships"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /memberships` 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-88057d27451de01c", "name": "Unused endpoint: POST /memberships", "shortDescription": {"text": "Unused endpoint: POST /memberships"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /memberships` 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-199f6a7e38a203bb", "name": "Unused endpoint: PUT /memberships/:id", "shortDescription": {"text": "Unused endpoint: PUT /memberships/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /memberships/: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-9f2900fc305ddbea", "name": "Unused endpoint: DELETE /memberships/:id", "shortDescription": {"text": "Unused endpoint: DELETE /memberships/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /memberships/: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-f267cc6244ff132b", "name": "Unused endpoint: GET /campaigns", "shortDescription": {"text": "Unused endpoint: GET /campaigns"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /campaigns` 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-5eab37a4ddf129e3", "name": "Unused endpoint: POST /campaigns", "shortDescription": {"text": "Unused endpoint: POST /campaigns"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /campaigns` 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-28a0ff3fbb03c818", "name": "Unused endpoint: PUT /campaigns/:id", "shortDescription": {"text": "Unused endpoint: PUT /campaigns/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /campaigns/: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-abb00d9ba88342a2", "name": "Unused endpoint: DELETE /campaigns/:id", "shortDescription": {"text": "Unused endpoint: DELETE /campaigns/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /campaigns/: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-8fe173e40d56adee", "name": "Unused endpoint: GET /rewards", "shortDescription": {"text": "Unused endpoint: GET /rewards"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /rewards` 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-e934dba02d2877a1", "name": "Unused endpoint: GET /messages", "shortDescription": {"text": "Unused endpoint: GET /messages"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /messages` 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-6bef1d0c37ffce25", "name": "Unused endpoint: PUT /messages/:id/approve", "shortDescription": {"text": "Unused endpoint: PUT /messages/:id/approve"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /messages/:id/approve` 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-8a2365037bbf03aa", "name": "Unused endpoint: PUT /messages/:id/response", "shortDescription": {"text": "Unused endpoint: PUT /messages/:id/response"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /messages/:id/response` 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-f4826e5f11980c9a", "name": "Unused endpoint: GET /encargos", "shortDescription": {"text": "Unused endpoint: GET /encargos"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /encargos` 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-67e31d3f4c4f0281", "name": "Unused endpoint: PUT /encargos/:id/status", "shortDescription": {"text": "Unused endpoint: PUT /encargos/:id/status"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /encargos/:id/status` 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-493ae0e4e4fde5c1", "name": "Unused endpoint: PUT /encargos/:id/value", "shortDescription": {"text": "Unused endpoint: PUT /encargos/:id/value"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /encargos/:id/value` 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-13261ba585ddc8e7", "name": "Unused endpoint: DELETE /encargos/:id", "shortDescription": {"text": "Unused endpoint: DELETE /encargos/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /encargos/: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-18c0c15dd3ca796c", "name": "Unused endpoint: GET /productora/slots", "shortDescription": {"text": "Unused endpoint: GET /productora/slots"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /productora/slots` 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-60bdd0e2c78e5bd2", "name": "Unused endpoint: POST /encargos", "shortDescription": {"text": "Unused endpoint: POST /encargos"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /encargos` 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-8d1f6c7e25971726", "name": "Unused endpoint: DELETE /messages/:id", "shortDescription": {"text": "Unused endpoint: DELETE /messages/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /messages/: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-46cf590cd7c74d96", "name": "Unused endpoint: GET /discount-codes", "shortDescription": {"text": "Unused endpoint: GET /discount-codes"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /discount-codes` 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-3508ca513d81d4a9", "name": "Unused endpoint: POST /discount-codes", "shortDescription": {"text": "Unused endpoint: POST /discount-codes"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /discount-codes` 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-80c845890e7e0989", "name": "Unused endpoint: PUT /discount-codes/:id", "shortDescription": {"text": "Unused endpoint: PUT /discount-codes/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PUT /discount-codes/: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-4087becd848d4225", "name": "Unused endpoint: DELETE /discount-codes/:id", "shortDescription": {"text": "Unused endpoint: DELETE /discount-codes/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /discount-codes/: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-cecee4c21e264d14", "name": "Unused endpoint: GET /purchases", "shortDescription": {"text": "Unused endpoint: GET /purchases"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /purchases` 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/20767"}, "properties": {"repository": "takato23/baloskycom", "repoUrl": "https://github.com/takato23/baloskycom", "branch": "main"}, "results": [{"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: takato23/baloskycom"}, "properties": {"repobilityId": 404266, "scanner": "foundry_dataset", "fingerprint": "c48d2a052682a73f26909da93f616e4846e50809552157a96c7576d791ff48ad", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 1, "data_schema": 2, "api_or_backend": 4, "ui_or_frontend": 1, "source_or_other": 1, "api_integration_gap": 1, "dependency_or_build": 2, "data_schema_persistence": 4, "mostly follows blueprint": 1, "claimed_resolved_unverified": 7, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 5, "human_reported_issue_then_fix_attempt": 5, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_unverified": 14}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 114, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 5, "thread_has_comment": 4, "thread_touches_file": 8, "thread_has_pr_review": 1, "alignment_uses_comment": 5, "alignment_uses_finding": 5, "chain_has_link_quality": 12, "comment_aligns_finding": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 8, "thread_has_comment_chain": 5, "comment_chain_links_commit": 7, "comment_chain_touches_file": 40, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 5}, "node_count": 43, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 4, "pr_file": 8, "alignment": 5, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 12, "comment_chain": 5, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "takato23/baloskycom#1", "issue_number": "1", "quality_tiers": {"high_confidence": 4, "assumption_check": 5, "weak_supervision": 3}, "repo_full_name": "takato23/baloskycom", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-b9c032501bd26d30", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 32, "ui_or_frontend": 8, "source_or_other": 8, "dependency_or_build": 16}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: supported_by_high_confidence_link\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takato23/baloskycom#1\nRepo: takato23/baloskycom\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 43\nEdges: 114\nNode types: {'link_quality': 12, 'pr_file': 8, 'comment_chain': 5, 'alignment': 5, 'comment': 4, 'commit': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 40, 'chain_has_link_quality': 12, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, 'comment_chain_links_commit': 7, 'thread_has_comment_chain': 5, 'comment_has_chain': 5, 'issue_chain_has_comment_chain': 5, 'alignment_uses_comment': 5, 'alignment_uses_finding': 5, 'comment_aligns_finding': 5, 'thread_has_comment': 4, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 7, 'human_reported_issue_then_fix_attempt': 5, 'blueprint_human_gap_disagreement': 5, 'data_schema_persistence': 4, 'api_or_backend': 4, 'dependency_or_build': 2, 'data_schema': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'ui_or_frontend': 1, 'source_or_other': 1, 'bug_fix': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_unverified': 14}\nQuality tiers: {'assumption_check': 5, 'high_confidence': 4, 'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takato23/baloskycom", "source_id": "graph-query-motif_query-6c64fcddcf654981", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "takato23/baloskycom", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: takato23/baloskycom"}, "properties": {"repobilityId": 382795, "scanner": "foundry_dataset", "fingerprint": "9bf24b809882d4e5fac1b2f7bb344538ef1e420ebade0c8acedd8a89c972dd54", "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": "takato23/baloskycom#1", "human_labels": ["api_integration_gap", "api_or_backend", "data_schema_persistence", "dependency_or_build", "source_or_other", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.876, "repo_full_name": "takato23/baloskycom", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-44e9d1dc0de9843d", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 4, "docs": 3, "schemas": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 8, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 4, "ui_or_frontend": 1, "source_or_other": 1, "dependency_or_build": 2}, "linked_commit_count": 7, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 5, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: takato23/baloskycom#1\nRepo: takato23/baloskycom\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 5\nLinked commit count: 7\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 8\nLabels: {'data_schema_persistence': 4, 'api_integration_gap': 1}\nPolarities: {'bad': 5}\nChanged file labels: {'api_or_backend': 4, 'dependency_or_build': 2, 'ui_or_frontend': 1, 'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fa447f805c31ab4c\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takato23/baloskycom/pull/1\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: takato23/baloskycom\\nAuthor: takato23 (User)\\nURL: https://github.com/takato23/baloskycom/pull/1\\nTitle: Migrate/supabase vercel\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7035367baf58254b\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/takato23/baloskycom/pull/1#issuecomment-4255320721\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: issue_comment\\nRepo: takato23/baloskycom\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/takato23/baloskycom/pull/1#issuecomment-4255320721\\nTitle: \\nBody:\\n[vc]: #hGBTtXEC5tvJs3/IVYft/oXL6N5v5yqOmEbvrQLaVRQ=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJiYWxvc2t5Y29tIiwicHJvamVjdElkIjoicHJqX01jZ3Zyc1NHYndNMUttb2ZYTWdJYVZyNEJNbnEiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiYmFsb3NreWNvbS1naXQtbWlncmF0ZS1zdXBhYmFzZS12ZXJjZWwtYmFsb3NreXMtcHJvamVjdHMudmVyY2VsLmFwcCJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vYmFsb3NreXMtcHJvamVjdHMvYmFsb3NreWNvbS9HZkdSU1BEdHVMUmMyYVVaMUxCY3pocXA0TTdMIiwicHJldmlld1VybCI6ImJhbG9za3ljb20tZ2l0LW1pZ3JhdGUtc3VwYWJhc2UtdmVyY2VsLWJhbG9za3lzLXByb2plY3RzLnZlcmNlbC5hcHAiLCJuZXh0Q29tbWl0U3RhdHVzIjoiREVQTE9ZRUQifV19\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [baloskycom](https://vercel.com/baloskys-projects/baloskycom) | ![Ready](https://vercel.com/static/status/ready.svg) \"\n  },\n  {\n    \"id\": \"github-feedback-comment-1cc11cf92e1803f2\",\n    \"kind\": \"review_comment\",\n    \"label\": \"api_integrat\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/takato23/baloskycom", "source_id": "comment-chain-pattern-assumption_checks-40209343679169a2", "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": "takato23/baloskycom", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: takato23/baloskycom"}, "properties": {"repobilityId": 411244, "scanner": "foundry_dataset", "fingerprint": "09e86f72dfe9f113ff4b0c9a29ebe1e19e8c39bc90b5ca84fb63c0c5b06f4000", "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": {"bug_fix": 1, "data_schema": 2, "api_or_backend": 4, "ui_or_frontend": 1, "source_or_other": 1, "api_integration_gap": 1, "dependency_or_build": 2, "data_schema_persistence": 4, "mostly follows blueprint": 1, "claimed_resolved_unverified": 7, "issue_or_pull_request_thread": 1, "blueprint_human_gap_disagreement": 5, "human_reported_issue_then_fix_attempt": 5, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 14}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 114, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 5, "thread_has_comment": 4, "thread_touches_file": 8, "thread_has_pr_review": 1, "alignment_uses_comment": 5, "alignment_uses_finding": 5, "chain_has_link_quality": 12, "comment_aligns_finding": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 8, "thread_has_comment_chain": 5, "comment_chain_links_commit": 7, "comment_chain_touches_file": 40, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 5}, "node_count": 43, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 4, "pr_file": 8, "alignment": 5, "pr_review": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 12, "comment_chain": 5, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "takato23/baloskycom#1", "issue_number": "1", "quality_tiers": {"high_confidence": 4, "assumption_check": 5, "weak_supervision": 3}, "repo_full_name": "takato23/baloskycom", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-7a1bf24f52532b82", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"api_or_backend": 32, "ui_or_frontend": 8, "source_or_other": 8, "dependency_or_build": 16}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: takato23/baloskycom\nThread: takato23/baloskycom#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: takato23/baloskycom\nThread: takato23/baloskycom#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: takato23/baloskycom#1\nRepo: takato23/baloskycom\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 43\nEdges: 114\nNode types: {'link_quality': 12, 'pr_file': 8, 'comment_chain': 5, 'alignment': 5, 'comment': 4, 'commit': 3, 'thread': 1, 'repo': 1, 'pr_review': 1, 'issue_chain': 1, 'fix_outcome': 1, 'blueprint_finding': 1}\nEdge types: {'comment_chain_touches_file': 40, 'chain_has_link_quality': 12, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, 'comment_chain_links_commit': 7, 'thread_has_comment_chain': 5, 'comment_has_chain': 5, 'issue_chain_has_comment_chain': 5, 'alignment_uses_comment': 5, 'alignment_uses_finding': 5, 'comment_aligns_finding': 5, 'thread_has_comment': 4, 'repo_has_thread': 1, 'thread_has_pr_review': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 7, 'human_reported_issue_then_fix_attempt': 5, 'blueprint_human_gap_disagreement': 5, 'data_schema_persistence': 4, 'api_or_backend': 4, 'dependency_or_build': 2, 'data_schema': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'ui_or_frontend': 1, 'source_or_other': 1, 'bug_fix': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_unverified': 14}\nQuality tiers: {'assumption_check': 5, 'high_confidence': 4, '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/takato23/baloskycom", "source_id": "graph-query-motif_query-531f0005bcbf5646", "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": "takato23/baloskycom", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "scanner-da01c049527d6a4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:295"}, "properties": {"repobilityId": "63422c4893a0b074", "scanner": "scanner-primary", "fingerprint": "da01c049527d6a4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39be5d44bb2d991f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-productos.ts:94"}, "properties": {"repobilityId": "20de6a893be27042", "scanner": "scanner-primary", "fingerprint": "39be5d44bb2d991f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-561be6057dd433b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-thumbs.ts:84"}, "properties": {"repobilityId": "cfe471c245ca6ede", "scanner": "scanner-primary", "fingerprint": "561be6057dd433b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b697c8fea7365c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-upload.ts:182"}, "properties": {"repobilityId": "5d5a81160d583562", "scanner": "scanner-primary", "fingerprint": "5b697c8fea7365c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d7295eddfc257f77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/classify-media.ts:180"}, "properties": {"repobilityId": "05c953fde045d579", "scanner": "scanner-primary", "fingerprint": "d7295eddfc257f77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-150fd8d4585ca70c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/set-pinned.ts:37"}, "properties": {"repobilityId": "fb1b3b83ca0c9a42", "scanner": "scanner-primary", "fingerprint": "150fd8d4585ca70c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4bfb886abc36ccf9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/_smoke-checkout.ts:30"}, "properties": {"repobilityId": "fe7a6b38b2a27f99", "scanner": "scanner-primary", "fingerprint": "4bfb886abc36ccf9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed2737b9eafc76d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-muro.ts:23"}, "properties": {"repobilityId": "d91cf10c5d1f8a89", "scanner": "scanner-primary", "fingerprint": "ed2737b9eafc76d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68ad5fab0b82bece", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/build-og.ts:91"}, "properties": {"repobilityId": "064a8dfcacb6b69f", "scanner": "scanner-primary", "fingerprint": "68ad5fab0b82bece", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-799ec033bdb65206", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate-media-to-blob.ts:87"}, "properties": {"repobilityId": "f5c9b41447594e1a", "scanner": "scanner-primary", "fingerprint": "799ec033bdb65206", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15eaecd74d2aed7a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Modal.tsx:71"}, "properties": {"repobilityId": "e138efb250ce933a", "scanner": "scanner-primary", "fingerprint": "15eaecd74d2aed7a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4796c3d71bcc3e00", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/effects/HeroMeshScene.tsx:303"}, "properties": {"repobilityId": "d4ace36178ad91f1", "scanner": "scanner-primary", "fingerprint": "4796c3d71bcc3e00", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-de619a11cf04f290", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/PublicSongsCatalog.tsx:150"}, "properties": {"repobilityId": "764aed1a5ccd16bf", "scanner": "scanner-primary", "fingerprint": "de619a11cf04f290", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44b3c0b69282e4cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/MusicPlayerDock.tsx:22"}, "properties": {"repobilityId": "adb568803be39f02", "scanner": "scanner-primary", "fingerprint": "44b3c0b69282e4cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2bd53865df75fdf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/music/HomeMusicSection.tsx:359"}, "properties": {"repobilityId": "f0ae504ccc537022", "scanner": "scanner-primary", "fingerprint": "a2bd53865df75fdf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0de87ee574cff083", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/pages/HomePreview.tsx:154"}, "properties": {"repobilityId": "ae139481e51ce6b7", "scanner": "scanner-primary", "fingerprint": "0de87ee574cff083", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ae7ce2fcb888a744", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/pages/HeroPreview.tsx:1502"}, "properties": {"repobilityId": "31e1674aa4fca201", "scanner": "scanner-primary", "fingerprint": "ae7ce2fcb888a744", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6768e5bd763dcc7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Laboratorio.tsx:242"}, "properties": {"repobilityId": "694eb17bca01bcc0", "scanner": "scanner-primary", "fingerprint": "b6768e5bd763dcc7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81390fca2a5a9238", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.tsx:746"}, "properties": {"repobilityId": "a939f1527511e497", "scanner": "scanner-primary", "fingerprint": "81390fca2a5a9238", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fb08fa59fda7792", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/MultimediaPreview.tsx:773"}, "properties": {"repobilityId": "c96d8e5385adb22c", "scanner": "scanner-primary", "fingerprint": "0fb08fa59fda7792", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b92d552ecc05b4c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminMedia.tsx:820"}, "properties": {"repobilityId": "808d7f3c183d98d5", "scanner": "scanner-primary", "fingerprint": "b92d552ecc05b4c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0652b6a18ba862ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminDashboard.tsx:903"}, "properties": {"repobilityId": "e7a88d0263eebbf8", "scanner": "scanner-primary", "fingerprint": "0652b6a18ba862ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8af6f3e9a41a4df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/admin/AdminLayout.tsx:171"}, "properties": {"repobilityId": "6476243b92bbc077", "scanner": "scanner-primary", "fingerprint": "f8af6f3e9a41a4df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26209d39ab0382c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useSound.ts:42"}, "properties": {"repobilityId": "47defae9718a019f", "scanner": "scanner-primary", "fingerprint": "26209d39ab0382c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-566c05c23684a90e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:212"}, "properties": {"repobilityId": "6cef022f775d5271", "scanner": "scanner-primary", "fingerprint": "566c05c23684a90e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55a30cdad7cd7c0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/db.ts:1127"}, "properties": {"repobilityId": "f06be67e8f14bc50", "scanner": "scanner-primary", "fingerprint": "55a30cdad7cd7c0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-664a0866568773b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/context/AppContext.tsx:336"}, "properties": {"repobilityId": "ee186d4b5eee97e7", "scanner": "scanner-primary", "fingerprint": "664a0866568773b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10c88a8eb139cf68", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in preview-qa.html:234"}, "properties": {"repobilityId": "80812677a949eccf", "scanner": "scanner-primary", "fingerprint": "10c88a8eb139cf68", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "preview-qa.html"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-a365d385b15a10e5", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/build-productora-previews.mjs:24"}, "properties": {"repobilityId": "03a8cc058ceb703e", "scanner": "scanner-primary", "fingerprint": "a365d385b15a10e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/build-productora-previews.mjs"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-918494c993850ece", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/build-productora-reel.mjs:18"}, "properties": {"repobilityId": "8bad3038063bdf25", "scanner": "scanner-primary", "fingerprint": "918494c993850ece", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/build-productora-reel.mjs"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-c1c2f38a57cbc350", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/club.html:160"}, "properties": {"repobilityId": "f2b49d79dafa3b05", "scanner": "scanner-primary", "fingerprint": "c1c2f38a57cbc350", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/club.html"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-c9a3223dba380458", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/pago-exitoso.html:303"}, "properties": {"repobilityId": "0658fa9ce89b64c7", "scanner": "scanner-primary", "fingerprint": "c9a3223dba380458", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/pago-exitoso.html"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-e101cd9ba91000ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio-wire.js:44"}, "properties": {"repobilityId": "5202e6cdabc888f3", "scanner": "scanner-primary", "fingerprint": "e101cd9ba91000ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/delirio-wire.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-a36c727c79d7ec53", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/delirio.html:7184"}, "properties": {"repobilityId": "4be4da72295c56d3", "scanner": "scanner-primary", "fingerprint": "a36c727c79d7ec53", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/delirio.html"}, "region": {"startLine": 7184}}}]}, {"ruleId": "scanner-78384adf3bb9054b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/delirio.html:7414"}, "properties": {"repobilityId": "08c0dc382711714d", "scanner": "scanner-primary", "fingerprint": "78384adf3bb9054b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/delirio.html"}, "region": {"startLine": 7414}}}]}, {"ruleId": "scanner-a1c79ef618b78aba", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminSettings.tsx:532"}, "properties": {"repobilityId": "73df4a3b2751f9da", "scanner": "scanner-primary", "fingerprint": "a1c79ef618b78aba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/admin/AdminSettings.tsx"}, "region": {"startLine": 532}}}]}, {"ruleId": "scanner-a693e424f6e64d7e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/pages/admin/AdminLogin.tsx:55"}, "properties": {"repobilityId": "25c6a8fe209662d7", "scanner": "scanner-primary", "fingerprint": "a693e424f6e64d7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/admin/AdminLogin.tsx"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-18d9efa1ebea9fce", "level": "note", "message": {"text": "Very large file: public/delirio-wire.js (3218 lines)"}, "properties": {"repobilityId": "24310e27d8db6e17", "scanner": "scanner-primary", "fingerprint": "18d9efa1ebea9fce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4939131f6082d666", "level": "note", "message": {"text": "Very large file: src/pages/HeroPreview.tsx (1882 lines)"}, "properties": {"repobilityId": "8bc965740fd482a3", "scanner": "scanner-primary", "fingerprint": "4939131f6082d666", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2d4a647b3238256", "level": "note", "message": {"text": "Very large file: src/pages/PreviewFull.tsx (4104 lines)"}, "properties": {"repobilityId": "1dec285a52296cd9", "scanner": "scanner-primary", "fingerprint": "e2d4a647b3238256", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e9fcea32ea83b12a", "level": "note", "message": {"text": "Very large file: src/pages/Laboratorio.tsx (1437 lines)"}, "properties": {"repobilityId": "3f5b5515dc578b12", "scanner": "scanner-primary", "fingerprint": "e9fcea32ea83b12a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b8937082c00c76e3", "level": "note", "message": {"text": "Very large file: src/pages/PreviewV2.tsx (1486 lines)"}, "properties": {"repobilityId": "95e6f408bc6439c5", "scanner": "scanner-primary", "fingerprint": "b8937082c00c76e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-145da80a81238b1f", "level": "note", "message": {"text": "Very large file: src/pages/Home.tsx (1329 lines)"}, "properties": {"repobilityId": "91939324b61238a5", "scanner": "scanner-primary", "fingerprint": "145da80a81238b1f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59adacea06b81cbe", "level": "note", "message": {"text": "Very large file: src/pages/admin/AdminSettings.tsx (1519 lines)"}, "properties": {"repobilityId": "7fbcee9fbeb3f6c2", "scanner": "scanner-primary", "fingerprint": "59adacea06b81cbe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59a06a16340058b7", "level": "note", "message": {"text": "Very large file: src/pages/admin/AdminMedia.tsx (2205 lines)"}, "properties": {"repobilityId": "5f3c15d44d102015", "scanner": "scanner-primary", "fingerprint": "59a06a16340058b7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4db9fdaf53f02991", "level": "note", "message": {"text": "Very large file: src/pages/admin/AdminDashboard.tsx (1808 lines)"}, "properties": {"repobilityId": "55c6beb0cd1244be", "scanner": "scanner-primary", "fingerprint": "4db9fdaf53f02991", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e438e60f891871c3", "level": "note", "message": {"text": "Very large file: src/server/db.ts (1132 lines)"}, "properties": {"repobilityId": "3d9ac6aa02b808d0", "scanner": "scanner-primary", "fingerprint": "e438e60f891871c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-70ad6614f516f26e", "level": "note", "message": {"text": "Very large file: src/server/routes/api.ts (3858 lines)"}, "properties": {"repobilityId": "81a6b315374222b4", "scanner": "scanner-primary", "fingerprint": "70ad6614f516f26e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-25563efdd6767c04", "level": "note", "message": {"text": "78 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "25563efdd6767c04", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "aa79f523325481e2", "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": "fcf7e7381681fc7a", "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": "174fb21d67691691", "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": "240dd921243ac6eb", "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": "34ffa69168c54d92", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4b407ad3376f3720", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "3fba94fe4ba11f15", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "a0dabc8128982e0f", "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": "5255d8a95e35b992", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f47887f42f15ac0c", "level": "none", "message": {"text": "Commented-code block (10 lines) in server.ts:101"}, "properties": {"repobilityId": "69cf2da03f075eca", "scanner": "scanner-primary", "fingerprint": "f47887f42f15ac0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7aac1b760d501a88", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/bulk-upload.ts:104"}, "properties": {"repobilityId": "b543f88e82355cd6", "scanner": "scanner-primary", "fingerprint": "7aac1b760d501a88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5ce0a711d5df6a7a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/classify-media.ts:71"}, "properties": {"repobilityId": "288d6ef467b23c51", "scanner": "scanner-primary", "fingerprint": "5ce0a711d5df6a7a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abdb5d833dd9c536", "level": "note", "message": {"text": "Legacy-named symbol `pur_old` in scripts/_smoke-checkout.ts:67"}, "properties": {"repobilityId": "6514dfc69a0e2c7a", "scanner": "scanner-primary", "fingerprint": "abdb5d833dd9c536", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4c4a4acd1e05b23a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-previews.mjs:41"}, "properties": {"repobilityId": "c6bd0f298e080b5c", "scanner": "scanner-primary", "fingerprint": "4c4a4acd1e05b23a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8984cc000668e50a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/build-productora-reel.mjs:40"}, "properties": {"repobilityId": "f6e54a02f70ff35c", "scanner": "scanner-primary", "fingerprint": "8984cc000668e50a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-794f82f0ae52be81", "level": "note", "message": {"text": "Legacy-named symbol `availability__copy` in public/delirio-wire.js:1653"}, "properties": {"repobilityId": "b0a5eadeb5e2c0e1", "scanner": "scanner-primary", "fingerprint": "794f82f0ae52be81", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-86061449a74c9b40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/delirio-wire.js:2947"}, "properties": {"repobilityId": "439b5aefe64dfc69", "scanner": "scanner-primary", "fingerprint": "86061449a74c9b40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d09fd0dc2b7a773", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/Layout.tsx:42"}, "properties": {"repobilityId": "bc6192dc3d96e1eb", "scanner": "scanner-primary", "fingerprint": "2d09fd0dc2b7a773", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2a35112691a756b", "level": "none", "message": {"text": "Commented-code block (20 lines) in src/components/home/Planets3D.tsx:60"}, "properties": {"repobilityId": "2b213ed245b43de5", "scanner": "scanner-primary", "fingerprint": "a2a35112691a756b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae2bfeb4b73eff24", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/MediaLightbox.tsx:165"}, "properties": {"repobilityId": "162d9ce164e77e99", "scanner": "scanner-primary", "fingerprint": "ae2bfeb4b73eff24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01577f0f756446da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/home/SunoModal.tsx:244"}, "properties": {"repobilityId": "3534b326ba337228", "scanner": "scanner-primary", "fingerprint": "01577f0f756446da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c80e6631374d7772", "level": "note", "message": {"text": "Legacy-named symbol `hero__copy` in src/components/home/HeroRedesign.tsx:33"}, "properties": {"repobilityId": "0fb1888f3522912d", "scanner": "scanner-primary", "fingerprint": "c80e6631374d7772", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-686616725964f945", "level": "note", "message": {"text": "Legacy-named symbol `card__copy` in src/components/home/SupportRail.tsx:73"}, "properties": {"repobilityId": "e0946753a697c6b8", "scanner": "scanner-primary", "fingerprint": "686616725964f945", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9bfe59733546bebb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/home/WallpaperGate.tsx:26"}, "properties": {"repobilityId": "0395cc7173e99443", "scanner": "scanner-primary", "fingerprint": "9bfe59733546bebb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fb2aa9e04bd95f2", "level": "note", "message": {"text": "Legacy-named symbol `lead__copy` in src/components/home/EditorialSectionLead.tsx:37"}, "properties": {"repobilityId": "51e12e2f59fb4228", "scanner": "scanner-primary", "fingerprint": "7fb2aa9e04bd95f2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-04d287c46e247fc7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/HeroSection.tsx:62"}, "properties": {"repobilityId": "25382d546d74ea63", "scanner": "scanner-primary", "fingerprint": "04d287c46e247fc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b33d802711b9a6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/PixelSection.tsx:177"}, "properties": {"repobilityId": "48f6117f38dedd5f", "scanner": "scanner-primary", "fingerprint": "3b33d802711b9a6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3e65454065e774f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/effects/Hero3DScene.tsx:184"}, "properties": {"repobilityId": "7cf605a40fcc0cc5", "scanner": "scanner-primary", "fingerprint": "c3e65454065e774f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-470a36b2978fa890", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/effects/MascotCompanion.tsx:341"}, "properties": {"repobilityId": "c106591a0fd3218a", "scanner": "scanner-primary", "fingerprint": "470a36b2978fa890", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a67c15589f3ad72f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/songEmbed.ts:36"}, "properties": {"repobilityId": "a8af244e15685f7e", "scanner": "scanner-primary", "fingerprint": "a67c15589f3ad72f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8cfc085543a7953", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/HomePreview.tsx:151"}, "properties": {"repobilityId": "b0acefdf481b2d70", "scanner": "scanner-primary", "fingerprint": "a8cfc085543a7953", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2dae0d06ac0b332d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/HeroPreview.tsx:426"}, "properties": {"repobilityId": "f62eea4594ce52d9", "scanner": "scanner-primary", "fingerprint": "2dae0d06ac0b332d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1445bfe18e92c82d", "level": "note", "message": {"text": "Legacy-named symbol `hero__copy` in src/pages/BtvPage.tsx:280"}, "properties": {"repobilityId": "359be299b32e277e", "scanner": "scanner-primary", "fingerprint": "1445bfe18e92c82d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5f7bac6dcb752e5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/PreviewFull.tsx:52"}, "properties": {"repobilityId": "2dae4e9b9c5e3798", "scanner": "scanner-primary", "fingerprint": "5f7bac6dcb752e5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4851db3cfe89ff0f", "level": "note", "message": {"text": "Legacy-named symbol `contact__copy` in src/pages/Cameo.tsx:161"}, "properties": {"repobilityId": "2dd562007ff6c4eb", "scanner": "scanner-primary", "fingerprint": "4851db3cfe89ff0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4691a2344feec1a5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Laboratorio.tsx:371"}, "properties": {"repobilityId": "3479fc2da1e7cb76", "scanner": "scanner-primary", "fingerprint": "4691a2344feec1a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29c7505314f3c4bd", "level": "note", "message": {"text": "Legacy-named symbol `contact__copy` in src/pages/Productora.tsx:823"}, "properties": {"repobilityId": "0c7e8eb744f086e0", "scanner": "scanner-primary", "fingerprint": "29c7505314f3c4bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2cdbc761eac810da", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/pages/previewV2/components.tsx:142"}, "properties": {"repobilityId": "51addb04fcf1bd43", "scanner": "scanner-primary", "fingerprint": "2cdbc761eac810da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc712fdc6b5b7afe", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/pages/previewV2/effects/Head3D.tsx:165"}, "properties": {"repobilityId": "d264ee4d549c8edc", "scanner": "scanner-primary", "fingerprint": "bc712fdc6b5b7afe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e3ddcc9672b35cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/db.ts:912"}, "properties": {"repobilityId": "e0a5009a436aebe9", "scanner": "scanner-primary", "fingerprint": "6e3ddcc9672b35cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c18c14c162382c43", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/routes/api.ts:410"}, "properties": {"repobilityId": "db5b6389430e2009", "scanner": "scanner-primary", "fingerprint": "c18c14c162382c43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dee852b3c0f41377", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/server/routes/api.ts:2450"}, "properties": {"repobilityId": "f79d2a132fe1508d", "scanner": "scanner-primary", "fingerprint": "dee852b3c0f41377", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-811c3b0b4cca65af", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/services/api.ts:394"}, "properties": {"repobilityId": "96c01d9048dcff95", "scanner": "scanner-primary", "fingerprint": "811c3b0b4cca65af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d12f810721bad44b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/api.ts:50"}, "properties": {"repobilityId": "7936d70f4e464595", "scanner": "scanner-primary", "fingerprint": "d12f810721bad44b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bddda3d5a14c7401", "level": "note", "message": {"text": "29 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "3519a6b4ac1d4f19", "scanner": "scanner-primary", "fingerprint": "bddda3d5a14c7401", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-9c5e0c903a2adfaf", "level": "warning", "message": {"text": "Frontend route `/delirio` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "973d0fc1a91098c0", "scanner": "scanner-primary", "fingerprint": "9c5e0c903a2adfaf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-780756219908cf74", "level": "warning", "message": {"text": "Frontend route `/reel` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3c6125738e4c9568", "scanner": "scanner-primary", "fingerprint": "780756219908cf74", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b7e872592d4f25e7", "level": "warning", "message": {"text": "Frontend route `/preview-hero` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "b006bf691888d5ce", "scanner": "scanner-primary", "fingerprint": "b7e872592d4f25e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-499798206eb87bbc", "level": "warning", "message": {"text": "Frontend route `/preview-full` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "25e78c6d5d01af21", "scanner": "scanner-primary", "fingerprint": "499798206eb87bbc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9d78bdc60302dbfc", "level": "warning", "message": {"text": "Frontend route `/preview-v2-tipo` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "559db38e5dcc06f7", "scanner": "scanner-primary", "fingerprint": "9d78bdc60302dbfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16e4768fe18f3be8", "level": "warning", "message": {"text": "Frontend route `campaigns` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f9321b001a318187", "scanner": "scanner-primary", "fingerprint": "16e4768fe18f3be8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2d6fd6c684e40372", "level": "warning", "message": {"text": "Frontend route `products` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "d31504797edae39d", "scanner": "scanner-primary", "fingerprint": "2d6fd6c684e40372", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4490821ad8288369", "level": "warning", "message": {"text": "Frontend route `memberships` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e88e56ecb97e2ed5", "scanner": "scanner-primary", "fingerprint": "4490821ad8288369", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5a13ae445b87bea7", "level": "warning", "message": {"text": "Frontend route `encargos` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "87d90477e82dd387", "scanner": "scanner-primary", "fingerprint": "5a13ae445b87bea7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ddc1f0e866f6323f", "level": "warning", "message": {"text": "Frontend route `analytics` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5dd95ee593452334", "scanner": "scanner-primary", "fingerprint": "ddc1f0e866f6323f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-82b808f98499f9b4", "level": "warning", "message": {"text": "Frontend route `ideas` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "52fa1bb3d2a0f7e9", "scanner": "scanner-primary", "fingerprint": "82b808f98499f9b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-24c66f6edd13a449", "level": "warning", "message": {"text": "Frontend route `messages` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f986c9175ccda8f3", "scanner": "scanner-primary", "fingerprint": "24c66f6edd13a449", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b9d230942722b668", "level": "warning", "message": {"text": "Frontend route `media` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ee6add7a67bd0e0f", "scanner": "scanner-primary", "fingerprint": "b9d230942722b668", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-21e725f58d1f3269", "level": "warning", "message": {"text": "Frontend route `media/videos` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "55ca5e3e9fb5feb2", "scanner": "scanner-primary", "fingerprint": "21e725f58d1f3269", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-65404e3d14dc2624", "level": "warning", "message": {"text": "Frontend route `media/fotos` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "fce2ea909b6bf5b4", "scanner": "scanner-primary", "fingerprint": "65404e3d14dc2624", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2dadc3bd10e87348", "level": "warning", "message": {"text": "Frontend route `media/wallpapers` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "28cffd694d20df22", "scanner": "scanner-primary", "fingerprint": "2dadc3bd10e87348", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-aa198f58ad5c9307", "level": "warning", "message": {"text": "Frontend route `media/canciones` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "690ce1c39cb67296", "scanner": "scanner-primary", "fingerprint": "aa198f58ad5c9307", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-057a8f6f72bc04fa", "level": "warning", "message": {"text": "Frontend route `media/panoramas` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3e393e2c11ce55bf", "scanner": "scanner-primary", "fingerprint": "057a8f6f72bc04fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-576aa5c448ce08fc", "level": "warning", "message": {"text": "Frontend route `media/socials` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "31d069df281cdf37", "scanner": "scanner-primary", "fingerprint": "576aa5c448ce08fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-313d2fd879e14457", "level": "warning", "message": {"text": "Frontend route `media/newsletter` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "1d2c718e958a3bb1", "scanner": "scanner-primary", "fingerprint": "313d2fd879e14457", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0626b4c2e4efcb82", "level": "warning", "message": {"text": "Frontend route `settings` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9badda3b3a471962", "scanner": "scanner-primary", "fingerprint": "0626b4c2e4efcb82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9bbc542fcda19e45", "level": "warning", "message": {"text": "Frontend route `wall` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7aad03c229319bdf", "scanner": "scanner-primary", "fingerprint": "9bbc542fcda19e45", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a65eeaebd4e55a2b", "level": "warning", "message": {"text": "Frontend route `vip` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a7828a34c631f969", "scanner": "scanner-primary", "fingerprint": "a65eeaebd4e55a2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5e0f53aaf07abebc", "level": "warning", "message": {"text": "Frontend route `portfolio` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "b2c4e00362384e84", "scanner": "scanner-primary", "fingerprint": "5e0f53aaf07abebc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-919628feec0e01f1", "level": "warning", "message": {"text": "Frontend route `gallery` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e42bc9d9da3debf2", "scanner": "scanner-primary", "fingerprint": "919628feec0e01f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-89944ed3eb590061", "level": "warning", "message": {"text": "Frontend route `blog` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "d5dc4db43b974a2d", "scanner": "scanner-primary", "fingerprint": "89944ed3eb590061", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-55d1f3a9e6f2998d", "level": "warning", "message": {"text": "Frontend route `laboratorio` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "b5fd5dca76f6022e", "scanner": "scanner-primary", "fingerprint": "55d1f3a9e6f2998d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5d0a6a01521d7b26", "level": "warning", "message": {"text": "Frontend route `btv` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2f98bec7f1eed12f", "scanner": "scanner-primary", "fingerprint": "5d0a6a01521d7b26", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0da1ccf874de1ea8", "level": "warning", "message": {"text": "Frontend route `balosflix` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "1d5462ea92b4a6d0", "scanner": "scanner-primary", "fingerprint": "0da1ccf874de1ea8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-145759d7289f11a4", "level": "warning", "message": {"text": "Frontend route `productora` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a3703807c60164ec", "scanner": "scanner-primary", "fingerprint": "145759d7289f11a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3ed9b06d6c0351b9", "level": "warning", "message": {"text": "Frontend route `cameo` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "830de465a5c9fdfa", "scanner": "scanner-primary", "fingerprint": "3ed9b06d6c0351b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1079a4fc81633dbf", "level": "warning", "message": {"text": "Frontend route `home-preview` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "4f63259fb6ca68ff", "scanner": "scanner-primary", "fingerprint": "1079a4fc81633dbf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-094dba97b513cefb", "level": "warning", "message": {"text": "Frontend route `preview-hero` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "40d554386993a7df", "scanner": "scanner-primary", "fingerprint": "094dba97b513cefb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d2797d01e9877411", "level": "warning", "message": {"text": "Frontend route `preview-multimedia` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "eb74603fd48d85ac", "scanner": "scanner-primary", "fingerprint": "d2797d01e9877411", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d8fa17940a331e35", "level": "warning", "message": {"text": "Frontend route `preview-full` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7eb3aed4a899a320", "scanner": "scanner-primary", "fingerprint": "d8fa17940a331e35", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-14750f2bdb1b211a", "level": "warning", "message": {"text": "Frontend route `preview-v2` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "bae70a86888b0d19", "scanner": "scanner-primary", "fingerprint": "14750f2bdb1b211a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-572282bfedca15e1", "level": "warning", "message": {"text": "Frontend route `club` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7f1180411a932eab", "scanner": "scanner-primary", "fingerprint": "572282bfedca15e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e5f9ea06e91483eb", "level": "warning", "message": {"text": "Frontend route `agenda-publica` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "cc911f44c2bb8d04", "scanner": "scanner-primary", "fingerprint": "e5f9ea06e91483eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3c540d9ec3515f5b", "level": "warning", "message": {"text": "Frontend route `cafecito` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "8245054efd6ae388", "scanner": "scanner-primary", "fingerprint": "3c540d9ec3515f5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2db0440a30ad4eac", "level": "warning", "message": {"text": "Frontend route `checkout` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0d039707c824a17c", "scanner": "scanner-primary", "fingerprint": "2db0440a30ad4eac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6978651ac70e7f99", "level": "warning", "message": {"text": "Frontend route `checkout/:campaignId` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "fd24770443416781", "scanner": "scanner-primary", "fingerprint": "6978651ac70e7f99", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0b2710210f05f3b3", "level": "warning", "message": {"text": "Frontend route `checkout/success` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "21a12a8afc393af8", "scanner": "scanner-primary", "fingerprint": "0b2710210f05f3b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d13b03dcba4261d3", "level": "warning", "message": {"text": "Frontend route `checkout/failure` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0328843efddbc8ea", "scanner": "scanner-primary", "fingerprint": "d13b03dcba4261d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9ec668ff1d9bd370", "level": "warning", "message": {"text": "Frontend route `checkout/pending` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e0090285325b8d4f", "scanner": "scanner-primary", "fingerprint": "9ec668ff1d9bd370", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-11feb210c2f50b50", "level": "warning", "message": {"text": "Frontend route `profile` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "96c44ef5fce161fb", "scanner": "scanner-primary", "fingerprint": "11feb210c2f50b50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4833ed1cd046a39b", "level": "warning", "message": {"text": "Frontend route `campaigns/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "15eac5ee24753e11", "scanner": "scanner-primary", "fingerprint": "4833ed1cd046a39b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-043f8029df464b08", "level": "error", "message": {"text": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Reel.tsx:29)"}, "properties": {"repobilityId": "8aaca433908b888c", "scanner": "scanner-primary", "fingerprint": "043f8029df464b08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db5dcb115d35c9f8", "level": "error", "message": {"text": "Dangling fetch: GET /videos/productora/manifest.json (src/pages/Productora.tsx:164)"}, "properties": {"repobilityId": "5c0f960957a66580", "scanner": "scanner-primary", "fingerprint": "db5dcb115d35c9f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72a644a8c6220b7c", "level": "error", "message": {"text": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(raw)} (src/server/routes/api.ts:2930)"}, "properties": {"repobilityId": "cb67c7c1de647269", "scanner": "scanner-primary", "fingerprint": "72a644a8c6220b7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a31a486469e47f3", "level": "error", "message": {"text": "Dangling fetch: GET https://open.spotify.com/oembed?url=${encodeURIComponent(url)} (src/server/routes/api.ts:3028)"}, "properties": {"repobilityId": "d50129328aa5a849", "scanner": "scanner-primary", "fingerprint": "7a31a486469e47f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "d280fd2cb4f5107b", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "899152060ddf5dd0", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "e1f13d75de289721", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d0cb55407ce9523", "level": "note", "message": {"text": "Unused endpoint: GET /delirio"}, "properties": {"repobilityId": "c3ac7a73b3db17c0", "scanner": "scanner-primary", "fingerprint": "3d0cb55407ce9523", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4670519a8a7d7a6", "level": "note", "message": {"text": "Unused endpoint: GET /balosflix"}, "properties": {"repobilityId": "502a07930e1cd7dd", "scanner": "scanner-primary", "fingerprint": "e4670519a8a7d7a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8d960527c7f7520", "level": "note", "message": {"text": "Unused endpoint: GET /pago-exitoso"}, "properties": {"repobilityId": "02136f2a2692e57f", "scanner": "scanner-primary", "fingerprint": "e8d960527c7f7520", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec9a9720b1a3368b", "level": "note", "message": {"text": "Unused endpoint: GET /pago-pendiente"}, "properties": {"repobilityId": "6fda35a21f3c0d01", "scanner": "scanner-primary", "fingerprint": "ec9a9720b1a3368b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ddb0e38763ff5b40", "level": "note", "message": {"text": "Unused endpoint: GET /pago-fallido"}, "properties": {"repobilityId": "f3bf32e437794205", "scanner": "scanner-primary", "fingerprint": "ddb0e38763ff5b40", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66c662ced32666de", "level": "note", "message": {"text": "Unused endpoint: GET /club"}, "properties": {"repobilityId": "aa78d293daaa8084", "scanner": "scanner-primary", "fingerprint": "66c662ced32666de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05a5d64eddb94d5b", "level": "note", "message": {"text": "Unused endpoint: GET /privacidad"}, "properties": {"repobilityId": "70fa7f183678ea01", "scanner": "scanner-primary", "fingerprint": "05a5d64eddb94d5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b7ffff3cec6e402", "level": "note", "message": {"text": "Unused endpoint: GET /terminos"}, "properties": {"repobilityId": "61a657345c1c4a2f", "scanner": "scanner-primary", "fingerprint": "7b7ffff3cec6e402", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-755c192f199afe73", "level": "note", "message": {"text": "Unused endpoint: GET /productora"}, "properties": {"repobilityId": "0022f1db7b7e495a", "scanner": "scanner-primary", "fingerprint": "755c192f199afe73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95b27c9e6fdb2daf", "level": "note", "message": {"text": "Unused endpoint: GET /reel"}, "properties": {"repobilityId": "5485f996359835b9", "scanner": "scanner-primary", "fingerprint": "95b27c9e6fdb2daf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6adff6c616d28336", "level": "note", "message": {"text": "Unused endpoint: GET /auth/status"}, "properties": {"repobilityId": "4ec2e919824a40f0", "scanner": "scanner-primary", "fingerprint": "6adff6c616d28336", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6762021161a4eafe", "level": "note", "message": {"text": "Unused endpoint: POST /auth/bootstrap"}, "properties": {"repobilityId": "678f755baf6a1e36", "scanner": "scanner-primary", "fingerprint": "6762021161a4eafe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fdbacfe9430a6ed", "level": "note", "message": {"text": "Unused endpoint: POST /auth/login"}, "properties": {"repobilityId": "51dd48f7a3e3952d", "scanner": "scanner-primary", "fingerprint": "8fdbacfe9430a6ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac42422b23e45104", "level": "note", "message": {"text": "Unused endpoint: GET /auth/me"}, "properties": {"repobilityId": "cbc9567d7fe16baf", "scanner": "scanner-primary", "fingerprint": "ac42422b23e45104", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68babb8e2f3782d1", "level": "note", "message": {"text": "Unused endpoint: PUT /auth/credentials"}, "properties": {"repobilityId": "83616f29181bf8ae", "scanner": "scanner-primary", "fingerprint": "68babb8e2f3782d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f1084bc3b7a4f4bb", "level": "note", "message": {"text": "Unused endpoint: GET /products"}, "properties": {"repobilityId": "77f64758d2518bc4", "scanner": "scanner-primary", "fingerprint": "f1084bc3b7a4f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cca7583916efd86a", "level": "note", "message": {"text": "Unused endpoint: POST /products"}, "properties": {"repobilityId": "8d1757e1d77371cc", "scanner": "scanner-primary", "fingerprint": "cca7583916efd86a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3312ed671532b931", "level": "note", "message": {"text": "Unused endpoint: PUT /products/:id"}, "properties": {"repobilityId": "b5f2593ecce0cf7b", "scanner": "scanner-primary", "fingerprint": "3312ed671532b931", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-631d58d0d714102a", "level": "note", "message": {"text": "Unused endpoint: DELETE /products/:id"}, "properties": {"repobilityId": "5051f3f4605bdac0", "scanner": "scanner-primary", "fingerprint": "631d58d0d714102a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bbd3d646f3d937e7", "level": "note", "message": {"text": "Unused endpoint: GET /ideas"}, "properties": {"repobilityId": "312d9dfa877c7455", "scanner": "scanner-primary", "fingerprint": "bbd3d646f3d937e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09f365b6dee4aa8b", "level": "note", "message": {"text": "Unused endpoint: POST /ideas"}, "properties": {"repobilityId": "fa7fd32c19e99d79", "scanner": "scanner-primary", "fingerprint": "09f365b6dee4aa8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2c88f6fd2ae5b4e", "level": "note", "message": {"text": "Unused endpoint: PUT /ideas/:id"}, "properties": {"repobilityId": "2fbf66c97b83c6c4", "scanner": "scanner-primary", "fingerprint": "b2c88f6fd2ae5b4e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a909951300a387a", "level": "note", "message": {"text": "Unused endpoint: DELETE /ideas/:id"}, "properties": {"repobilityId": "e5260a3a3ff43607", "scanner": "scanner-primary", "fingerprint": "9a909951300a387a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77b844cc18dfe5cf", "level": "note", "message": {"text": "Unused endpoint: GET /memberships"}, "properties": {"repobilityId": "d4593edcdd7928b6", "scanner": "scanner-primary", "fingerprint": "77b844cc18dfe5cf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88057d27451de01c", "level": "note", "message": {"text": "Unused endpoint: POST /memberships"}, "properties": {"repobilityId": "064e695bb804c741", "scanner": "scanner-primary", "fingerprint": "88057d27451de01c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-199f6a7e38a203bb", "level": "note", "message": {"text": "Unused endpoint: PUT /memberships/:id"}, "properties": {"repobilityId": "2e2a50c764a47a8d", "scanner": "scanner-primary", "fingerprint": "199f6a7e38a203bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f2900fc305ddbea", "level": "note", "message": {"text": "Unused endpoint: DELETE /memberships/:id"}, "properties": {"repobilityId": "9a7607933aee4d30", "scanner": "scanner-primary", "fingerprint": "9f2900fc305ddbea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f267cc6244ff132b", "level": "note", "message": {"text": "Unused endpoint: GET /campaigns"}, "properties": {"repobilityId": "471aff601d287f66", "scanner": "scanner-primary", "fingerprint": "f267cc6244ff132b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5eab37a4ddf129e3", "level": "note", "message": {"text": "Unused endpoint: POST /campaigns"}, "properties": {"repobilityId": "9b7caa6680108d34", "scanner": "scanner-primary", "fingerprint": "5eab37a4ddf129e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28a0ff3fbb03c818", "level": "note", "message": {"text": "Unused endpoint: PUT /campaigns/:id"}, "properties": {"repobilityId": "a7363780e26f1ddb", "scanner": "scanner-primary", "fingerprint": "28a0ff3fbb03c818", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abb00d9ba88342a2", "level": "note", "message": {"text": "Unused endpoint: DELETE /campaigns/:id"}, "properties": {"repobilityId": "3bf0a4f9cb13008d", "scanner": "scanner-primary", "fingerprint": "abb00d9ba88342a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8fe173e40d56adee", "level": "note", "message": {"text": "Unused endpoint: GET /rewards"}, "properties": {"repobilityId": "5e8073ebf7045971", "scanner": "scanner-primary", "fingerprint": "8fe173e40d56adee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e934dba02d2877a1", "level": "note", "message": {"text": "Unused endpoint: GET /messages"}, "properties": {"repobilityId": "f88e3c12d8f230c2", "scanner": "scanner-primary", "fingerprint": "e934dba02d2877a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bef1d0c37ffce25", "level": "note", "message": {"text": "Unused endpoint: PUT /messages/:id/approve"}, "properties": {"repobilityId": "3bef7d0b5cd7fa07", "scanner": "scanner-primary", "fingerprint": "6bef1d0c37ffce25", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8a2365037bbf03aa", "level": "note", "message": {"text": "Unused endpoint: PUT /messages/:id/response"}, "properties": {"repobilityId": "e8f6203e26af007a", "scanner": "scanner-primary", "fingerprint": "8a2365037bbf03aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f4826e5f11980c9a", "level": "note", "message": {"text": "Unused endpoint: GET /encargos"}, "properties": {"repobilityId": "2e203a4de4cecc3e", "scanner": "scanner-primary", "fingerprint": "f4826e5f11980c9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67e31d3f4c4f0281", "level": "note", "message": {"text": "Unused endpoint: PUT /encargos/:id/status"}, "properties": {"repobilityId": "6f6695a1221a4f8d", "scanner": "scanner-primary", "fingerprint": "67e31d3f4c4f0281", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-493ae0e4e4fde5c1", "level": "note", "message": {"text": "Unused endpoint: PUT /encargos/:id/value"}, "properties": {"repobilityId": "753cd14d7f2b58c0", "scanner": "scanner-primary", "fingerprint": "493ae0e4e4fde5c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-13261ba585ddc8e7", "level": "note", "message": {"text": "Unused endpoint: DELETE /encargos/:id"}, "properties": {"repobilityId": "cef2854828b588be", "scanner": "scanner-primary", "fingerprint": "13261ba585ddc8e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18c0c15dd3ca796c", "level": "note", "message": {"text": "Unused endpoint: GET /productora/slots"}, "properties": {"repobilityId": "7bf2e6c59828d2c6", "scanner": "scanner-primary", "fingerprint": "18c0c15dd3ca796c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-60bdd0e2c78e5bd2", "level": "note", "message": {"text": "Unused endpoint: POST /encargos"}, "properties": {"repobilityId": "42eb62a6822e8b76", "scanner": "scanner-primary", "fingerprint": "60bdd0e2c78e5bd2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d1f6c7e25971726", "level": "note", "message": {"text": "Unused endpoint: DELETE /messages/:id"}, "properties": {"repobilityId": "31098f20a0d5548f", "scanner": "scanner-primary", "fingerprint": "8d1f6c7e25971726", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46cf590cd7c74d96", "level": "note", "message": {"text": "Unused endpoint: GET /discount-codes"}, "properties": {"repobilityId": "a57d9758aef11b6a", "scanner": "scanner-primary", "fingerprint": "46cf590cd7c74d96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3508ca513d81d4a9", "level": "note", "message": {"text": "Unused endpoint: POST /discount-codes"}, "properties": {"repobilityId": "3d06610780bf3ee1", "scanner": "scanner-primary", "fingerprint": "3508ca513d81d4a9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80c845890e7e0989", "level": "note", "message": {"text": "Unused endpoint: PUT /discount-codes/:id"}, "properties": {"repobilityId": "138ff1033e81b8fd", "scanner": "scanner-primary", "fingerprint": "80c845890e7e0989", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4087becd848d4225", "level": "note", "message": {"text": "Unused endpoint: DELETE /discount-codes/:id"}, "properties": {"repobilityId": "52ceb2e3b69b8eaf", "scanner": "scanner-primary", "fingerprint": "4087becd848d4225", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cecee4c21e264d14", "level": "note", "message": {"text": "Unused endpoint: GET /purchases"}, "properties": {"repobilityId": "96127bf817675dc6", "scanner": "scanner-primary", "fingerprint": "cecee4c21e264d14", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}