{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: YayasanAt-Tauhid/jibas-attauhid", "shortDescription": {"text": "Foundry mined assumption checks: YayasanAt-Tauhid/jibas-attauhid"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#4\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f4b5a2ea7740a65b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_p"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: YayasanAt-Tauhid/jibas-attauhid", "shortDescription": {"text": "Foundry mined test ci gap after feedback: YayasanAt-Tauhid/jibas-attauhid"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 27\nNode types: {'pr_file': 5, 'link_quality': 3, 'thread': 1, 'repo'"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: YayasanAt-Tauhid/jibas-attauhid", "shortDescription": {"text": "Foundry mined schema ui api mismatch: YayasanAt-Tauhid/jibas-attauhid"}, "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: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 4\nGraph consistency label: supported_by_high_confidence_link\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: YayasanAt-Tauhid/jibas-attauhid", "shortDescription": {"text": "Foundry mined bad chains: YayasanAt-Tauhid/jibas-attauhid"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 5\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 4, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2f9c89597c2c2edf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: YayasanAt-Tauhid/jibas-attauhid", "shortDescription": {"text": "Foundry mined mock as real or placeholder: YayasanAt-Tauhid/jibas-attauhid"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 27\nNode types: {'pr_f"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-f2452581f5197d47", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/midtrans-notification/index.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/midtrans-notification/index.ts:25"}, "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-e8b8206a7ea11c95", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/PortalLayout.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/PortalLayout.tsx:187"}, "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-8426633bdaa48dc2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopNavbar.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopNavbar.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04005863c1dbf388", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/AkunCombobox.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/AkunCombobox.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b209c77e83b119fd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53ace29bce6122ea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Anjungan.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Anjungan.tsx:202"}, "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-ef59d804e4ae0bdf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InfoGuru.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InfoGuru.tsx:89"}, "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-4d83703716bc296d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KomentarRapor.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KomentarRapor.tsx:94"}, "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-be4febb80ca94191", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KalenderAkademik.tsx:170", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KalenderAkademik.tsx:170"}, "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-d12e1b94917c2501", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/KasKecil.tsx:459", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/KasKecil.tsx:459"}, "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-32c65b303f0ef4d5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/InputPembayaran.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/InputPembayaran.tsx:369"}, "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-377533e92e838e8c", "name": "Runtime dotenv file present in repo: scripts/.env", "shortDescription": {"text": "Runtime dotenv file present in repo: scripts/.env"}, "fullDescription": {"text": "`scripts/.env` looks like a runtime dotenv file. It contains secret-looking assignments for SUPABASE_SERVICE_ROLE_KEY, DB_PASS. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-78524f5eb4aece79", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/get-midtrans-config/index.ts:2", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-midtrans-config/index.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33dfc64deec47bf5", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tagihan/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tagihan/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4ec03f47a36e3c49", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/hitung-nilai-akhir/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/hitung-nilai-akhir/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2aa14832dab9de79", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-nis/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-nis/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-add467643794b1c9", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-telegram/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-telegram/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5765a75055f233b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-user/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-user/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fb2fd46da9d64b6f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c579196a8491486", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/psb-daftar/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/psb-daftar/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-277c670c25286a38", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/batalkan-pembayaran/index.ts:17", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/batalkan-pembayaran/index.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d080614f836379f4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/proses-pembayaran/index.ts:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/proses-pembayaran/index.ts:21"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c3b3295eee2475d7", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/rekap-tunggakan/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/rekap-tunggakan/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5171b0857ff2823d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/send-whatsapp/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-whatsapp/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93d0283845aa2c2d", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11ce1d8f3bb5c2fe", "name": "Insecure pattern 'document_write' in src/pages/akademik/RPP.tsx:86", "shortDescription": {"text": "Insecure pattern 'document_write' in src/pages/akademik/RPP.tsx:86"}, "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-0543861e48e27c60", "name": "Insecure pattern 'document_write' in src/pages/akademik/CetakRapor.tsx:119", "shortDescription": {"text": "Insecure pattern 'document_write' in src/pages/akademik/CetakRapor.tsx:119"}, "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-71be6e6b63f84291", "name": "Insecure pattern 'document_write' in src/pages/keuangan/JurnalUmum.tsx:237", "shortDescription": {"text": "Insecure pattern 'document_write' in src/pages/keuangan/JurnalUmum.tsx:237"}, "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-2ea931c50c4f832e", "name": "Insecure pattern 'document_write' in src/pages/portal/PortalRiwayat.tsx:74", "shortDescription": {"text": "Insecure pattern 'document_write' in src/pages/portal/PortalRiwayat.tsx:74"}, "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-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-2951c993473f21bf", "name": "Very large file: src/integrations/supabase/types.ts (4750 lines)", "shortDescription": {"text": "Very large file: src/integrations/supabase/types.ts (4750 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": "7 test file(s) for 207 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 57 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 298 placeholder/mock markers across 63 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba1663f14adda589", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jbsfina.py:61", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jbsfina.py:61"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7594013894352fb8", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jurnal.py:51", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jurnal.py:51"}, "fullDescription": {"text": "`requests.get(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e2cd8ee113dd170", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-payment/index.ts:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-payment/index.ts:230"}, "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-6264743ef214f9f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-whatsapp/index.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-whatsapp/index.ts:87"}, "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-49913fcf226e6967", "name": "Legacy-named symbol `neraca_penerimaan_v2` in src/pages/keuangan/LaporanKeuangan.tsx:427", "shortDescription": {"text": "Legacy-named symbol `neraca_penerimaan_v2` in src/pages/keuangan/LaporanKeuangan.tsx:427"}, "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-81526d087846d3cb", "name": "Legacy-named symbol `showOld` in src/pages/portal/PortalProfil.tsx:41", "shortDescription": {"text": "Legacy-named symbol `showOld` in src/pages/portal/PortalProfil.tsx:41"}, "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-de5503beea1b4e0d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/portal/PortalCheckout.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/portal/PortalCheckout.tsx:111"}, "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-686d0b0e86022642", "name": "Commented-code block (5 lines) in src/hooks/useISAK35.ts:131", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useISAK35.ts:131"}, "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-2eafc3188c36bb02", "name": "3 env vars used in code but missing from .env.example", "shortDescription": {"text": "3 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DB_PORT`, `DB_SOCKET`, `VITE_SUPABASE_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nscripts/migrasi_jbsfina.py:supa_get, scripts/migrasi_jurnal.py:supa_get\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-63d26da7a2a63b7c", "name": "Frontend route `/infoguru` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/infoguru` 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-9ea2a76862b38929", "name": "Frontend route `/anjungan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/anjungan` 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-e135c1c2f324fdd2", "name": "Frontend route `/support` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/support` 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-075ea751f86b0c9f", "name": "Frontend route `/akademik` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik` 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-da346fd9c72df294", "name": "Frontend route `/akademik/siswa/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/siswa/: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-2a93eacaff3efd43", "name": "Frontend route `/akademik/siswa/:id/edit` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/siswa/:id/edit` 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-c53e2252fcb03e37", "name": "Frontend route `/akademik/mutasi` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/mutasi` 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-2fabd40951d6c96c", "name": "Frontend route `/akademik/psb` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/psb` 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-cb0bd341ede77b47", "name": "Frontend route `/akademik/jadwal` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/jadwal` 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-3f6f9fb5ee8d4c47", "name": "Frontend route `/akademik/presensi` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/presensi` 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-5671cd130d287c27", "name": "Frontend route `/akademik/penilaian` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/penilaian` 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-8c9a7fc2dddc2587", "name": "Frontend route `/akademik/referensi` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/referensi` 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-740127857fe1e62d", "name": "Frontend route `/akademik/rapor` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/rapor` 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-724b731cc41bbc7c", "name": "Frontend route `/akademik/legger` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/legger` 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-31c0a2bac074e127", "name": "Frontend route `/akademik/kalender` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/kalender` 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-b751b1561a3a2efe", "name": "Frontend route `/akademik/presensi-kbm` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/presensi-kbm` 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-ec80a3f22918df4c", "name": "Frontend route `/akademik/komentar-rapor` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/komentar-rapor` 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-825723778ded54d3", "name": "Frontend route `/akademik/rpp` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/rpp` 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-d0b985d66f58b67b", "name": "Frontend route `/akademik/statistik` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/statistik` 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-964b689a3d131ced", "name": "Frontend route `/akademik/alumni` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/akademik/alumni` 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-e17ba24baffc76ad", "name": "Frontend route `/keuangan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan` 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-4995f870ecab721f", "name": "Frontend route `/keuangan/pembayaran` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/pembayaran` 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-b2d4162fa3d3b866", "name": "Frontend route `/keuangan/tunggakan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/tunggakan` 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-2c4a940ffdb2eb39", "name": "Frontend route `/keuangan/pengeluaran` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/pengeluaran` 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-367d7fd1c9369939", "name": "Frontend route `/keuangan/tabungan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/tabungan` 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-454ea97377277c28", "name": "Frontend route `/keuangan/tabungan-pegawai` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/tabungan-pegawai` 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-7496109c24ef36ef", "name": "Frontend route `/keuangan/laporan-siswa` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/laporan-siswa` 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-93e45503132bb17f", "name": "Frontend route `/keuangan/laporan-kelas` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/laporan-kelas` 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-1774f337f9b838ac", "name": "Frontend route `/keuangan/rekap-harian` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/rekap-harian` 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-790cd6b16a17797e", "name": "Frontend route `/keuangan/pembayaran-psb` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/pembayaran-psb` 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-a0afda02ad9de905", "name": "Frontend route `/keuangan/tutup-buku` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/tutup-buku` 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-a9a5a652164d5d73", "name": "Frontend route `/keuangan/referensi` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/referensi` 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-826442a284758ba7", "name": "Frontend route `/keuangan/buku-besar` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/buku-besar` 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-4552548f93fda701", "name": "Frontend route `/keuangan/laporan-pengeluaran` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/laporan-pengeluaran` 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-a930e343d99d89b9", "name": "Frontend route `/keuangan/laporan-unit-usaha` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/laporan-unit-usaha` 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-a2154aa693c8b637", "name": "Frontend route `/keuangan/penerimaan-lain` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/penerimaan-lain` 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-d3a192e8540676f8", "name": "Frontend route `/keuangan/online-payment` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/online-payment` 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-72ee59d7b468bf22", "name": "Frontend route `/keuangan/audit-trail` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/audit-trail` 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-5ca6718c3100d207", "name": "Frontend route `/keuangan/audit-perubahan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/audit-perubahan` 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-50f4a5ece3141196", "name": "Frontend route `/keuangan/pengakuan-pendapatan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/pengakuan-pendapatan` 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-84354de9dff76e9d", "name": "Frontend route `/keuangan/aset-tetap` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/aset-tetap` 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-74382383f470aaec", "name": "Frontend route `/keuangan/piutang` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/piutang` 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-e5c8117089b9f65b", "name": "Frontend route `/keuangan/isak35/komprehensif` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/isak35/komprehensif` 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-f5ae0920f4dbcc38", "name": "Frontend route `/keuangan/isak35/posisi-keuangan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/isak35/posisi-keuangan` 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-6482be132c8d753f", "name": "Frontend route `/keuangan/isak35/arus-kas` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/isak35/arus-kas` 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-b0fe1660bfd28219", "name": "Frontend route `/keuangan/isak35/perubahan-aset-neto` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/isak35/perubahan-aset-neto` 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-fbde0dcc4f952ffc", "name": "Frontend route `/keuangan/isak35/calk` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/isak35/calk` 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-7d1b9b9c5689d68b", "name": "Frontend route `/keuangan/cek-kejanggalan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/cek-kejanggalan` 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-5725eb165d341fa5", "name": "Frontend route `/keuangan/kas-kecil` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/keuangan/kas-kecil` 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-18f7ef9eecd55922", "name": "Frontend route `/kepegawaian` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian` 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-50015ec3ca4fd770", "name": "Frontend route `/kepegawaian/pegawai/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian/pegawai/: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-f3d00256ca51569a", "name": "Frontend route `/kepegawaian/pegawai/:id/biodata` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian/pegawai/:id/biodata` 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-e7c52ca267886423", "name": "Frontend route `/kepegawaian/jadwal` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian/jadwal` 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-2370252315ab4bef", "name": "Frontend route `/kepegawaian/statistik` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian/statistik` 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-16e751d15047d7d3", "name": "Frontend route `/kepegawaian/struktur` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/kepegawaian/struktur` 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-8f1171a388a7b6ae", "name": "Frontend route `/cbe` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/cbe` 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-dc6b5e6ed11a2c0f", "name": "Frontend route `/cbe/:tab` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/cbe/:tab` 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-8e7f2cb4a28195d0", "name": "Frontend route `/simtaka` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/simtaka` 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-a2fc6c37adda631e", "name": "Frontend route `/simtaka/:tab` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/simtaka/:tab` 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-d3ecb903eda7ea33", "name": "Frontend route `/buletin` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/buletin` 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-9d88c8c94a35c3ec", "name": "Frontend route `/pengaturan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan` 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-c930b60bb404f2cf", "name": "Frontend route `/pengaturan/sekolah` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/sekolah` 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-8393d7388f6c44ed", "name": "Frontend route `/pengaturan/pengguna` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/pengguna` 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-3de2e0cffb8a1d87", "name": "Frontend route `/pengaturan/ortu` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/ortu` 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-a892814b65fa599d", "name": "Frontend route `/pengaturan/notifikasi` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/notifikasi` 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-a12f95a81343d557", "name": "Frontend route `/pengaturan/backup` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/backup` 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-befe9bdf65e10118", "name": "Frontend route `/pengaturan/migrasi-data` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/migrasi-data` 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-585105dd0d57e9b6", "name": "Frontend route `/pengaturan/cek-kesehatan` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/cek-kesehatan` 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-235c5bbd1f0d50cd", "name": "Frontend route `/pengaturan/:tab` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/pengaturan/:tab` 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}}]}}, "automationDetails": {"id": "repobility/23174"}, "properties": {"repository": "YayasanAt-Tauhid/jibas-attauhid", "repoUrl": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "branch": "main"}, "results": [{"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 434561, "scanner": "foundry_dataset", "fingerprint": "b5fc0e1ded2e5bee7867b5797e44a5cd88fd1048fa3e58b1762599edc96eddc0", "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": "YayasanAt-Tauhid/jibas-attauhid#4", "human_labels": ["data_schema_persistence", "source_or_other"], "issue_number": "4", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-7b351ffabd591173", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "designs": 1, "schemas": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"source_or_other": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: assumption_checks\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#4\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f4b5a2ea7740a65b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/4\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: YayasanAt-Tauhid/jibas-attauhid\\nAuthor: YayasanAt-Tauhid (User)\\nURL: https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/4\\nTitle: Tambah script migrasi delta jurnal VPS \u2192 Supabase\\nBody:\\nScript Python otomatis: cek max replid di Supabase, ambil delta dari MariaDB jbsfina, insert batch ke Supabase REST API tanpa perlu Claude sebagai perantara data.\\r\\n\\r\\nhttps://claude.ai/code/session_01CXjS6itx4yTv8Ja7SqD3vo\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-192bf5262ddabc13\",\n    \"filename\": \"scripts/migrasi_jurnal.py\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 197,\n    \"deletions\": 0,\n    \"changes\": 197,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/e85a5011f63062efd0af46e0269132ba9b2fdd53/scripts%2Fmigrasi_jurnal.py\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-954afe211dbc5289\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: YayasanAt-Tauhid/jibas-attauhid\nGraph label: source_backed_multi_signal_graph\nNodes: 16\nEdges: 24\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 8, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 4, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 3, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 8, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"designs\": 1, \"docs\": 4, \"schemas\": 3}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_fake_real_verification_bundle\": 1}\nCo-occur\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "comment-chain-pattern-assumption_checks-2786cdf3f5221ec0", "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": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 457935, "scanner": "foundry_dataset", "fingerprint": "d9acf9c61e5488913e73ba64488f2b128fef361a2a462cdfcdb2eb2aa2ab383e", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "schema_or_data": 1, "ui_or_frontend": 4, "generated_provenance": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 27, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 5, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 5, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 5, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-2221da8cf93d071b", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 4, "ui_or_frontend": 16}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 27\nNode types: {'pr_file': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 5, 'comment_chain_touches_file': 5, 'issue_chain_touches_file': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'schema_or_data': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-3e1e6548e8ed428c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 452864, "scanner": "foundry_dataset", "fingerprint": "ba5b125480b3b460fb9c9fe70880186c9e57a9746ddc33be23e97335acad2811", "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": 1, "source_or_other": 1, "data_schema_persistence": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_links_commit": 2, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 12, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#4", "issue_number": "4", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-b2aafc9bf5bccf0e", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"source_or_other": 4}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#4\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 4\nGraph consistency label: supported_by_high_confidence_link\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'source_or_other': 1, 'human_reported_issue_then_fix_attempt': 1, 'data_schema': 1, 'bug_fix': 1}\nOutcomes: {'claimed_resolved_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-a6def9f8d40f55ed", "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": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 452863, "scanner": "foundry_dataset", "fingerprint": "25b4366243a80d8eac52f5d35e273085550297046d8cd79b8539a8315c9059c6", "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": {"test_ci_gap": 1, "schema_or_data": 1, "ui_or_frontend": 4, "generated_provenance": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 27, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 5, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 5, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 5, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-d8d1ea23e904c882", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 4, "ui_or_frontend": 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: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 27\nNode types: {'pr_file': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 5, 'comment_chain_touches_file': 5, 'issue_chain_touches_file': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'schema_or_data': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-85ccbd01a4aed43f", "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": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 442018, "scanner": "foundry_dataset", "fingerprint": "28c8d5e8367b580c95c8ca3b0680e52d0607bf36f1792d7fcfb78cbf548db5a8", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "YayasanAt-Tauhid/jibas-attauhid#3", "human_labels": ["schema_or_data", "test_ci_gap", "ui_or_frontend"], "issue_number": "3", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-28db205b3858bfa1", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "designs": 1, "schemas": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 5, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"schema_or_data": 1, "ui_or_frontend": 4}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 5\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 4, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-2f9c89597c2c2edf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/3\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: YayasanAt-Tauhid/jibas-attauhid\\nAuthor: YayasanAt-Tauhid (User)\\nURL: https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/3\\nTitle: Add petty cash (kas kecil) management module with imprest system\\nBody:\\n## Summary\\nImplements a complete petty cash management system using the imprest method, allowing organizations to track small cash expenditures, manage replenishment cycles, and automatically generate accounting journals.\\n\\n## Key Changes\\n\\n### New Page: Kas Kecil (`src/pages/keuangan/KasKecil.tsx`)\\n- Full-featured petty cash management interface with transaction tracking and replenishment workflow\\n- **Transaction Management**: Record cash expenditures with date, description, category, amount, recipient, and receipt number\\n- **Replenishment System**: Batch process pending transactions and restore cash to imprest amount with automatic journal generation\\n- **Settings Panel**: Configure imprest amount and link accounting accounts (petty cash asset account and funding source account)\\n- **Dashboard Stats**: Display current balance, imprest amount, and pending replenishment total\\n- **Dual Tabs**: Separate views for t\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-9439703755c1fa76\",\n    \"filename\": \"src/App.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 0,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/6539557ba260d78e04d56485a0fae853624ebb37/src%2FApp.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-41abc13d6d0ec42b\",\n    \"filename\": \"src/components/layout/AppSidebar.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 0,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-at\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "comment-chain-pattern-bad_chains-5e12067eefee294f", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 442017, "scanner": "foundry_dataset", "fingerprint": "609fbe3556d90ad5a0c39e289f1fad2519aeb1beac9f14234a652ea14423e309", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "YayasanAt-Tauhid/jibas-attauhid#2", "human_labels": ["agent_instruction_gap", "docs_or_claims", "source_or_other"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.842, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-bedae1a034d1afb9", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "designs": 1, "schemas": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 24, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 2, "source_or_other": 22}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#2\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#2\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 24\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'source_or_other': 22, 'docs_or_claims': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-04bfc8b77395bc0d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/2\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: YayasanAt-Tauhid/jibas-attauhid\\nAuthor: YayasanAt-Tauhid (User)\\nURL: https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/2\\nTitle: Add graphify knowledge graph for jibas-attauhid codebase\\nBody:\\nRuns graphifyy 0.8.19 on the full project (273 files, ~178k words)\\nand produces an interactive knowledge graph with 1277 nodes, 4265\\nedges, and 71 labelled communities \u2014 covering academic, financial,\\nstudent-management, and UI layers.\\n\\nOutputs in graphify-out/:\\n- graph.html   \u2014 interactive graph (open in browser)\\n- graph.json   \u2014 raw graph data for querying\\n- GRAPH_REPORT.md \u2014 audit report with god nodes & surprising connections\\n\\nhttps://claude.ai/code/session_01LyKRbtsAiGxVfAvfMSJG5H\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-de3f5ef3547ea4aa\",\n    \"filename\": \".claude/settings.json\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 15,\n    \"deletions\": 0,\n    \"changes\": 15,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/cec5f900358adf333175b3793691742fd29d8357/.claude%2Fsettings.json\"\n  },\n  {\n    \"id\": \"github-pr-file-file-d3aa140af5ce4f47\",\n    \"filename\": \"CLAUDE.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 9,\n    \"deletions\": 0,\n    \"changes\": 9,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/cec5f900358adf333175b3793691742fd29d8357/CLAUDE.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-6fa7b710ec5d266c\",\n    \"filename\": \"graphify-out/.graphify_labels.json\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 1,\n    \"deletions\": 0,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/cec5f900358adf333175b3793691742fd29d8357/graphify-out%2F.graphify_labels.json\"\n  },\n  {\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "comment-chain-pattern-bad_chains-9fe53a5e0c873871", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 442016, "scanner": "foundry_dataset", "fingerprint": "9034a2ad785c7e21f26a60bb5f2fb95213a97bef427d424fb7701e73fdb36ef8", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "YayasanAt-Tauhid/jibas-attauhid#1", "human_labels": ["agent_instruction_gap", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-6f2550578fa7e250", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"docs": 4, "designs": 1, "schemas": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 3}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 3, "design_schema_api_artifact_count": 4}, "text": "Comment chain pattern product: bad_chains\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#1\nOutcome: self_attested_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_high_confidence\nChain evidence:\nIssue/PR evidence chain: YayasanAt-Tauhid/jibas-attauhid#1\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-bcf672ef608e4b75\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/1\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: YayasanAt-Tauhid/jibas-attauhid\\nAuthor: YayasanAt-Tauhid (User)\\nURL: https://github.com/YayasanAt-Tauhid/jibas-attauhid/pull/1\\nTitle: feat: tambah halaman Cek Kejanggalan Kasir\\nBody:\\nHalaman baru /keuangan/cek-kejanggalan untuk mendeteksi 7 jenis anomali\\ndata keuangan kasir secara otomatis:\\n- Pembayaran tanpa jurnal\\n- Tagihan lunas tanpa referensi pembayaran\\n- Status tagihan tidak sinkron dengan data pembayaran\\n- Pembayaran dengan jumlah nol atau negatif\\n- Pengeluaran tanpa jurnal\\n- Saldo tabungan tidak konsisten dengan transaksi terakhir\\n- Pembayaran bulanan duplikat\\n\\nDilengkapi export laporan Excel dan navigasi langsung ke halaman terkait.\\n\\nhttps://claude.ai/code/session_015kPW9DBKmCvZiAWxAbKfj8\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-ebd575ed4ceec872\",\n    \"filename\": \"src/App.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 0,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/2f273068123f3e8731312206bf64b69025e1431f/src%2FApp.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-6b9af4ae29f73037\",\n    \"filename\": \"src/pages/Keuangan.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 0,\n    \"changes\": 1,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/2f273068123f3e8731312206bf64b69025e1431f/src%2Fpages%2FKeuangan.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-614bc7df1510a916\",\n    \"filename\": \"src/pages/keuangan/CekKejanggalan.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"added\",\n    \"additions\": 353,\n    \"deletions\": 0,\n    \"changes\": 353,\n    \"blob_url\": \"https://github.com/YayasanAt-Tauhid/jibas-attauhid/blob/2f273068123f3e8731312206bf64b69025e1431f/src%2Fpages%2Fkeuangan%2FCekKe\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "comment-chain-pattern-bad_chains-d3f17203eb451357", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 451130, "scanner": "foundry_dataset", "fingerprint": "642f4bde6c9fd29a73e7865de98671d46c54d912021030c4b7f6374e8823d71e", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"test_ci_gap": 1, "schema_or_data": 1, "ui_or_frontend": 4, "generated_provenance": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 27, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 5, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 5, "thread_has_comment_chain": 1, "comment_chain_links_commit": 1, "comment_chain_touches_file": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 1, "pr_file": 5, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#3", "issue_number": "3", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-206e7aed9f02caf5", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 4, "ui_or_frontend": 16}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#3\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 3\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 27\nNode types: {'pr_file': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 5, 'comment_chain_touches_file': 5, 'issue_chain_touches_file': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'schema_or_data': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-03a715268edfa75a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 451129, "scanner": "foundry_dataset", "fingerprint": "e0008cad79acba3030e16dfd01fad2f1b91a8b8317651a447538166caaf61309", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"docs_or_claims": 2, "source_or_other": 22, "generated_provenance": 2, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 61, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 24, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 2, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 35, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 1, "pr_file": 24, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#2", "issue_number": "2", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-1867827c313a71c2", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"docs_or_claims": 8, "source_or_other": 88}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#2\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#2\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#2\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 2\nGraph consistency label: supported_by_high_confidence_link\nNodes: 35\nEdges: 61\nNode types: {'pr_file': 24, 'link_quality': 3, 'commit': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 24, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'comment_chain_links_commit': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 22, 'self_attested_unverified': 3, 'docs_or_claims': 2, 'generated_provenance': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'self_attested_or_generated_fix_unverified': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-0406f25b8702adef", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: YayasanAt-Tauhid/jibas-attauhid"}, "properties": {"repobilityId": 451128, "scanner": "foundry_dataset", "fingerprint": "51044e2bf0b4fbc62dd7bdf5bcf33245b17c99cec4ed7157f1d4be9805eb663e", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"ui_or_frontend": 3, "generated_provenance": 5, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 25, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 3, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "YayasanAt-Tauhid/jibas-attauhid#1", "issue_number": "1", "quality_tiers": {"high_confidence": 3}, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-56e559194f2a18df", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"ui_or_frontend": 12}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#1\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: YayasanAt-Tauhid/jibas-attauhid\nThread: YayasanAt-Tauhid/jibas-attauhid#1\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YayasanAt-Tauhid/jibas-attauhid#1\nRepo: YayasanAt-Tauhid/jibas-attauhid\nIssue/PR number: 1\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 25\nNode types: {'commit': 5, 'pr_file': 3, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 3, 'comment_chain_touches_file': 3, 'chain_has_link_quality': 3, 'issue_chain_touches_file': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'generated_provenance': 5, 'ui_or_frontend': 3, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'self_attested_or_generated_fix_unverified': 1}\nOutcomes: {'self_attested_unverified': 6}\nQuality tiers: {'high_confidence': 3}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YayasanAt-Tauhid/jibas-attauhid", "source_id": "graph-query-motif_query-b8aeed9f6b91e09a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YayasanAt-Tauhid/jibas-attauhid", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-f2452581f5197d47", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/midtrans-notification/index.ts:25"}, "properties": {"repobilityId": "4d791747f32a0aee", "scanner": "scanner-primary", "fingerprint": "f2452581f5197d47", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8b8206a7ea11c95", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/PortalLayout.tsx:187"}, "properties": {"repobilityId": "c917c2be9761cd3a", "scanner": "scanner-primary", "fingerprint": "e8b8206a7ea11c95", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8426633bdaa48dc2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/TopNavbar.tsx:120"}, "properties": {"repobilityId": "8537652b5ea5f9a9", "scanner": "scanner-primary", "fingerprint": "8426633bdaa48dc2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04005863c1dbf388", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/AkunCombobox.tsx:63"}, "properties": {"repobilityId": "23760cce1f20a09d", "scanner": "scanner-primary", "fingerprint": "04005863c1dbf388", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b209c77e83b119fd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "b8c68f17a4018107", "scanner": "scanner-primary", "fingerprint": "b209c77e83b119fd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-53ace29bce6122ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Anjungan.tsx:202"}, "properties": {"repobilityId": "323eeee112e521b3", "scanner": "scanner-primary", "fingerprint": "53ace29bce6122ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef59d804e4ae0bdf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/InfoGuru.tsx:89"}, "properties": {"repobilityId": "4a2ca1c3adba2ac6", "scanner": "scanner-primary", "fingerprint": "ef59d804e4ae0bdf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d83703716bc296d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KomentarRapor.tsx:94"}, "properties": {"repobilityId": "fed8d7022f1ca652", "scanner": "scanner-primary", "fingerprint": "4d83703716bc296d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be4febb80ca94191", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/akademik/KalenderAkademik.tsx:170"}, "properties": {"repobilityId": "2538c2d2ae2b9c11", "scanner": "scanner-primary", "fingerprint": "be4febb80ca94191", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d12e1b94917c2501", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/KasKecil.tsx:459"}, "properties": {"repobilityId": "92813c213e6e00ef", "scanner": "scanner-primary", "fingerprint": "d12e1b94917c2501", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32c65b303f0ef4d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/keuangan/InputPembayaran.tsx:369"}, "properties": {"repobilityId": "a03c3d056ef648f3", "scanner": "scanner-primary", "fingerprint": "32c65b303f0ef4d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-377533e92e838e8c", "level": "error", "message": {"text": "Runtime dotenv file present in repo: scripts/.env"}, "properties": {"repobilityId": "1d4760e00ae26074", "scanner": "scanner-primary", "fingerprint": "377533e92e838e8c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/.env"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-78524f5eb4aece79", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/get-midtrans-config/index.ts:2"}, "properties": {"repobilityId": "bd27b8c7e51defd6", "scanner": "scanner-primary", "fingerprint": "78524f5eb4aece79", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/get-midtrans-config/index.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-33dfc64deec47bf5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-tagihan/index.ts:4"}, "properties": {"repobilityId": "639e6a1d3acd5f2c", "scanner": "scanner-primary", "fingerprint": "33dfc64deec47bf5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-tagihan/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-4ec03f47a36e3c49", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/hitung-nilai-akhir/index.ts:4"}, "properties": {"repobilityId": "e141f380e3da6d96", "scanner": "scanner-primary", "fingerprint": "4ec03f47a36e3c49", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/hitung-nilai-akhir/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-2aa14832dab9de79", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/generate-nis/index.ts:4"}, "properties": {"repobilityId": "a33c51fc3e7730b7", "scanner": "scanner-primary", "fingerprint": "2aa14832dab9de79", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/generate-nis/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-add467643794b1c9", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-telegram/index.ts:4"}, "properties": {"repobilityId": "d52dacea8eff2c2e", "scanner": "scanner-primary", "fingerprint": "add467643794b1c9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-telegram/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-d5765a75055f233b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin-create-user/index.ts:14"}, "properties": {"repobilityId": "489b6b013d67a248", "scanner": "scanner-primary", "fingerprint": "d5765a75055f233b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin-create-user/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-fb2fd46da9d64b6f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/create-payment/index.ts:4"}, "properties": {"repobilityId": "68918927164bc93e", "scanner": "scanner-primary", "fingerprint": "fb2fd46da9d64b6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/create-payment/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0c579196a8491486", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/psb-daftar/index.ts:4"}, "properties": {"repobilityId": "49cd6740827f3933", "scanner": "scanner-primary", "fingerprint": "0c579196a8491486", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/psb-daftar/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-277c670c25286a38", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/batalkan-pembayaran/index.ts:17"}, "properties": {"repobilityId": "591ad088b2227413", "scanner": "scanner-primary", "fingerprint": "277c670c25286a38", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/batalkan-pembayaran/index.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-d080614f836379f4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/proses-pembayaran/index.ts:21"}, "properties": {"repobilityId": "75998bbb9e1a48e2", "scanner": "scanner-primary", "fingerprint": "d080614f836379f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/proses-pembayaran/index.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-c3b3295eee2475d7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/rekap-tunggakan/index.ts:4"}, "properties": {"repobilityId": "07b7db2e3eff4590", "scanner": "scanner-primary", "fingerprint": "c3b3295eee2475d7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/rekap-tunggakan/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-5171b0857ff2823d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/send-whatsapp/index.ts:4"}, "properties": {"repobilityId": "8b02709359bd467e", "scanner": "scanner-primary", "fingerprint": "5171b0857ff2823d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/send-whatsapp/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-93d0283845aa2c2d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "33f10636e53b4298", "scanner": "scanner-primary", "fingerprint": "93d0283845aa2c2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.tsx"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-11ce1d8f3bb5c2fe", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/pages/akademik/RPP.tsx:86"}, "properties": {"repobilityId": "970afd8c064418ff", "scanner": "scanner-primary", "fingerprint": "11ce1d8f3bb5c2fe", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/akademik/RPP.tsx"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-0543861e48e27c60", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/pages/akademik/CetakRapor.tsx:119"}, "properties": {"repobilityId": "e2d6921923c64608", "scanner": "scanner-primary", "fingerprint": "0543861e48e27c60", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/akademik/CetakRapor.tsx"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-71be6e6b63f84291", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/pages/keuangan/JurnalUmum.tsx:237"}, "properties": {"repobilityId": "3f0e684b93a07e1d", "scanner": "scanner-primary", "fingerprint": "71be6e6b63f84291", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/keuangan/JurnalUmum.tsx"}, "region": {"startLine": 237}}}]}, {"ruleId": "scanner-2ea931c50c4f832e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/pages/portal/PortalRiwayat.tsx:74"}, "properties": {"repobilityId": "42c25b6cc210bc41", "scanner": "scanner-primary", "fingerprint": "2ea931c50c4f832e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/pages/portal/PortalRiwayat.tsx"}, "region": {"startLine": 74}}}]}, {"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-2951c993473f21bf", "level": "note", "message": {"text": "Very large file: src/integrations/supabase/types.ts (4750 lines)"}, "properties": {"repobilityId": "ede8ac5264027534", "scanner": "scanner-primary", "fingerprint": "2951c993473f21bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "080c9b7c3a08294c", "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": "bacc50b06c83c246", "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": "39f32f9b22be5ac9", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "1cec3e55edf4e184", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "b2734459d60a6082", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "68524cdbc2c402da", "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": "1d8de535742f26d2", "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": "597a500e8a40fa17", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-ba1663f14adda589", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jbsfina.py:61"}, "properties": {"repobilityId": "e699e33ab88e5666", "scanner": "scanner-primary", "fingerprint": "ba1663f14adda589", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7594013894352fb8", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/migrasi_jurnal.py:51"}, "properties": {"repobilityId": "ef7498d83bef50bb", "scanner": "scanner-primary", "fingerprint": "7594013894352fb8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2e2cd8ee113dd170", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/create-payment/index.ts:230"}, "properties": {"repobilityId": "a5e9af6fffa0cbec", "scanner": "scanner-primary", "fingerprint": "2e2cd8ee113dd170", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6264743ef214f9f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/send-whatsapp/index.ts:87"}, "properties": {"repobilityId": "27a12df25e84c84b", "scanner": "scanner-primary", "fingerprint": "6264743ef214f9f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49913fcf226e6967", "level": "note", "message": {"text": "Legacy-named symbol `neraca_penerimaan_v2` in src/pages/keuangan/LaporanKeuangan.tsx:427"}, "properties": {"repobilityId": "e2f57a6438e6f85e", "scanner": "scanner-primary", "fingerprint": "49913fcf226e6967", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-81526d087846d3cb", "level": "note", "message": {"text": "Legacy-named symbol `showOld` in src/pages/portal/PortalProfil.tsx:41"}, "properties": {"repobilityId": "b6def6bd49742c52", "scanner": "scanner-primary", "fingerprint": "81526d087846d3cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-de5503beea1b4e0d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/pages/portal/PortalCheckout.tsx:111"}, "properties": {"repobilityId": "aa658c65ae2aab87", "scanner": "scanner-primary", "fingerprint": "de5503beea1b4e0d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-686d0b0e86022642", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useISAK35.ts:131"}, "properties": {"repobilityId": "07bd8c8b4192c33e", "scanner": "scanner-primary", "fingerprint": "686d0b0e86022642", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2eafc3188c36bb02", "level": "none", "message": {"text": "3 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "bd934ba112b02ffa", "scanner": "scanner-primary", "fingerprint": "2eafc3188c36bb02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "33d0655598b26215", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-63d26da7a2a63b7c", "level": "warning", "message": {"text": "Frontend route `/infoguru` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "18fca254c02e58b4", "scanner": "scanner-primary", "fingerprint": "63d26da7a2a63b7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9ea2a76862b38929", "level": "warning", "message": {"text": "Frontend route `/anjungan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5fc2a3cf465a137f", "scanner": "scanner-primary", "fingerprint": "9ea2a76862b38929", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e135c1c2f324fdd2", "level": "warning", "message": {"text": "Frontend route `/support` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "62b878acff19343d", "scanner": "scanner-primary", "fingerprint": "e135c1c2f324fdd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-075ea751f86b0c9f", "level": "warning", "message": {"text": "Frontend route `/akademik` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "19ea8a0b6c6a8888", "scanner": "scanner-primary", "fingerprint": "075ea751f86b0c9f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-da346fd9c72df294", "level": "warning", "message": {"text": "Frontend route `/akademik/siswa/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "7e9d9850c3216ba0", "scanner": "scanner-primary", "fingerprint": "da346fd9c72df294", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2a93eacaff3efd43", "level": "warning", "message": {"text": "Frontend route `/akademik/siswa/:id/edit` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f14d71eacbfb0ed6", "scanner": "scanner-primary", "fingerprint": "2a93eacaff3efd43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c53e2252fcb03e37", "level": "warning", "message": {"text": "Frontend route `/akademik/mutasi` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "581361aba248d3ff", "scanner": "scanner-primary", "fingerprint": "c53e2252fcb03e37", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2fabd40951d6c96c", "level": "warning", "message": {"text": "Frontend route `/akademik/psb` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e9234118c4d9757c", "scanner": "scanner-primary", "fingerprint": "2fabd40951d6c96c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cb0bd341ede77b47", "level": "warning", "message": {"text": "Frontend route `/akademik/jadwal` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0c9f91c3f8b38556", "scanner": "scanner-primary", "fingerprint": "cb0bd341ede77b47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3f6f9fb5ee8d4c47", "level": "warning", "message": {"text": "Frontend route `/akademik/presensi` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "bb96d75c3015e69f", "scanner": "scanner-primary", "fingerprint": "3f6f9fb5ee8d4c47", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5671cd130d287c27", "level": "warning", "message": {"text": "Frontend route `/akademik/penilaian` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "89c6cac59eb499c4", "scanner": "scanner-primary", "fingerprint": "5671cd130d287c27", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8c9a7fc2dddc2587", "level": "warning", "message": {"text": "Frontend route `/akademik/referensi` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f5e8dc145edc9bba", "scanner": "scanner-primary", "fingerprint": "8c9a7fc2dddc2587", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-740127857fe1e62d", "level": "warning", "message": {"text": "Frontend route `/akademik/rapor` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5df4ca7d2718a6a3", "scanner": "scanner-primary", "fingerprint": "740127857fe1e62d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-724b731cc41bbc7c", "level": "warning", "message": {"text": "Frontend route `/akademik/legger` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9bd14b3211792df7", "scanner": "scanner-primary", "fingerprint": "724b731cc41bbc7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-31c0a2bac074e127", "level": "warning", "message": {"text": "Frontend route `/akademik/kalender` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2420a0cd5faf723f", "scanner": "scanner-primary", "fingerprint": "31c0a2bac074e127", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b751b1561a3a2efe", "level": "warning", "message": {"text": "Frontend route `/akademik/presensi-kbm` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "89ba03ecd25f0006", "scanner": "scanner-primary", "fingerprint": "b751b1561a3a2efe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ec80a3f22918df4c", "level": "warning", "message": {"text": "Frontend route `/akademik/komentar-rapor` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "502a3324c83af14b", "scanner": "scanner-primary", "fingerprint": "ec80a3f22918df4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-825723778ded54d3", "level": "warning", "message": {"text": "Frontend route `/akademik/rpp` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "cf87cec3a24a3094", "scanner": "scanner-primary", "fingerprint": "825723778ded54d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d0b985d66f58b67b", "level": "warning", "message": {"text": "Frontend route `/akademik/statistik` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "adc548f5eeecfe5b", "scanner": "scanner-primary", "fingerprint": "d0b985d66f58b67b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-964b689a3d131ced", "level": "warning", "message": {"text": "Frontend route `/akademik/alumni` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "777a18c22d753fa8", "scanner": "scanner-primary", "fingerprint": "964b689a3d131ced", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e17ba24baffc76ad", "level": "warning", "message": {"text": "Frontend route `/keuangan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "6aba81ea3baac1e4", "scanner": "scanner-primary", "fingerprint": "e17ba24baffc76ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4995f870ecab721f", "level": "warning", "message": {"text": "Frontend route `/keuangan/pembayaran` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "90f5b11a9311833d", "scanner": "scanner-primary", "fingerprint": "4995f870ecab721f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b2d4162fa3d3b866", "level": "warning", "message": {"text": "Frontend route `/keuangan/tunggakan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "86aa69b65452562f", "scanner": "scanner-primary", "fingerprint": "b2d4162fa3d3b866", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2c4a940ffdb2eb39", "level": "warning", "message": {"text": "Frontend route `/keuangan/pengeluaran` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3f53b5a1f4a1603b", "scanner": "scanner-primary", "fingerprint": "2c4a940ffdb2eb39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-367d7fd1c9369939", "level": "warning", "message": {"text": "Frontend route `/keuangan/tabungan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "6105e41dc8ea617a", "scanner": "scanner-primary", "fingerprint": "367d7fd1c9369939", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-454ea97377277c28", "level": "warning", "message": {"text": "Frontend route `/keuangan/tabungan-pegawai` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a066de8697edb4bd", "scanner": "scanner-primary", "fingerprint": "454ea97377277c28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7496109c24ef36ef", "level": "warning", "message": {"text": "Frontend route `/keuangan/laporan-siswa` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "86e63bec6db601cd", "scanner": "scanner-primary", "fingerprint": "7496109c24ef36ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-93e45503132bb17f", "level": "warning", "message": {"text": "Frontend route `/keuangan/laporan-kelas` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f21662457db8bc5d", "scanner": "scanner-primary", "fingerprint": "93e45503132bb17f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1774f337f9b838ac", "level": "warning", "message": {"text": "Frontend route `/keuangan/rekap-harian` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "d39864dac741d15c", "scanner": "scanner-primary", "fingerprint": "1774f337f9b838ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-790cd6b16a17797e", "level": "warning", "message": {"text": "Frontend route `/keuangan/pembayaran-psb` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "de08800603d35564", "scanner": "scanner-primary", "fingerprint": "790cd6b16a17797e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a0afda02ad9de905", "level": "warning", "message": {"text": "Frontend route `/keuangan/tutup-buku` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ecb136a926699434", "scanner": "scanner-primary", "fingerprint": "a0afda02ad9de905", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a9a5a652164d5d73", "level": "warning", "message": {"text": "Frontend route `/keuangan/referensi` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "cc2380729d94d45c", "scanner": "scanner-primary", "fingerprint": "a9a5a652164d5d73", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-826442a284758ba7", "level": "warning", "message": {"text": "Frontend route `/keuangan/buku-besar` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "deaa9fd1ccc89616", "scanner": "scanner-primary", "fingerprint": "826442a284758ba7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4552548f93fda701", "level": "warning", "message": {"text": "Frontend route `/keuangan/laporan-pengeluaran` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "dbf6f252d9bebe42", "scanner": "scanner-primary", "fingerprint": "4552548f93fda701", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a930e343d99d89b9", "level": "warning", "message": {"text": "Frontend route `/keuangan/laporan-unit-usaha` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "3bfb983cc0462bda", "scanner": "scanner-primary", "fingerprint": "a930e343d99d89b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a2154aa693c8b637", "level": "warning", "message": {"text": "Frontend route `/keuangan/penerimaan-lain` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a9afff24bbce2006", "scanner": "scanner-primary", "fingerprint": "a2154aa693c8b637", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d3a192e8540676f8", "level": "warning", "message": {"text": "Frontend route `/keuangan/online-payment` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "85aa7b8bdc119daf", "scanner": "scanner-primary", "fingerprint": "d3a192e8540676f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-72ee59d7b468bf22", "level": "warning", "message": {"text": "Frontend route `/keuangan/audit-trail` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "886aa39faecae296", "scanner": "scanner-primary", "fingerprint": "72ee59d7b468bf22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5ca6718c3100d207", "level": "warning", "message": {"text": "Frontend route `/keuangan/audit-perubahan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "62fb28f73ebdd105", "scanner": "scanner-primary", "fingerprint": "5ca6718c3100d207", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-50f4a5ece3141196", "level": "warning", "message": {"text": "Frontend route `/keuangan/pengakuan-pendapatan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "97503480a2be71f1", "scanner": "scanner-primary", "fingerprint": "50f4a5ece3141196", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-84354de9dff76e9d", "level": "warning", "message": {"text": "Frontend route `/keuangan/aset-tetap` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ee32c4e2d23e4c1a", "scanner": "scanner-primary", "fingerprint": "84354de9dff76e9d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-74382383f470aaec", "level": "warning", "message": {"text": "Frontend route `/keuangan/piutang` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "60ba10034a4a9741", "scanner": "scanner-primary", "fingerprint": "74382383f470aaec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e5c8117089b9f65b", "level": "warning", "message": {"text": "Frontend route `/keuangan/isak35/komprehensif` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "02c087eb4cb6c210", "scanner": "scanner-primary", "fingerprint": "e5c8117089b9f65b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f5ae0920f4dbcc38", "level": "warning", "message": {"text": "Frontend route `/keuangan/isak35/posisi-keuangan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "4f7c91046201acfa", "scanner": "scanner-primary", "fingerprint": "f5ae0920f4dbcc38", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6482be132c8d753f", "level": "warning", "message": {"text": "Frontend route `/keuangan/isak35/arus-kas` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0ea0dcd71add63b7", "scanner": "scanner-primary", "fingerprint": "6482be132c8d753f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b0fe1660bfd28219", "level": "warning", "message": {"text": "Frontend route `/keuangan/isak35/perubahan-aset-neto` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0a318ee9ddf920d3", "scanner": "scanner-primary", "fingerprint": "b0fe1660bfd28219", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fbde0dcc4f952ffc", "level": "warning", "message": {"text": "Frontend route `/keuangan/isak35/calk` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0335f8e0d7e05712", "scanner": "scanner-primary", "fingerprint": "fbde0dcc4f952ffc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7d1b9b9c5689d68b", "level": "warning", "message": {"text": "Frontend route `/keuangan/cek-kejanggalan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "8796f43ba6be0d68", "scanner": "scanner-primary", "fingerprint": "7d1b9b9c5689d68b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5725eb165d341fa5", "level": "warning", "message": {"text": "Frontend route `/keuangan/kas-kecil` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a9668f8760c2bdf5", "scanner": "scanner-primary", "fingerprint": "5725eb165d341fa5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-18f7ef9eecd55922", "level": "warning", "message": {"text": "Frontend route `/kepegawaian` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "30401e9fdddce70a", "scanner": "scanner-primary", "fingerprint": "18f7ef9eecd55922", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-50015ec3ca4fd770", "level": "warning", "message": {"text": "Frontend route `/kepegawaian/pegawai/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "8d119fb59f484933", "scanner": "scanner-primary", "fingerprint": "50015ec3ca4fd770", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f3d00256ca51569a", "level": "warning", "message": {"text": "Frontend route `/kepegawaian/pegawai/:id/biodata` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "e340cb808033b19d", "scanner": "scanner-primary", "fingerprint": "f3d00256ca51569a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e7c52ca267886423", "level": "warning", "message": {"text": "Frontend route `/kepegawaian/jadwal` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "9da7cb39ea2b7af2", "scanner": "scanner-primary", "fingerprint": "e7c52ca267886423", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2370252315ab4bef", "level": "warning", "message": {"text": "Frontend route `/kepegawaian/statistik` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "338ee546cb396ae5", "scanner": "scanner-primary", "fingerprint": "2370252315ab4bef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-16e751d15047d7d3", "level": "warning", "message": {"text": "Frontend route `/kepegawaian/struktur` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "29322fd1d1e9e67f", "scanner": "scanner-primary", "fingerprint": "16e751d15047d7d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8f1171a388a7b6ae", "level": "warning", "message": {"text": "Frontend route `/cbe` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "488291f9afc4293f", "scanner": "scanner-primary", "fingerprint": "8f1171a388a7b6ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dc6b5e6ed11a2c0f", "level": "warning", "message": {"text": "Frontend route `/cbe/:tab` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ef91d137a21a7a5b", "scanner": "scanner-primary", "fingerprint": "dc6b5e6ed11a2c0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8e7f2cb4a28195d0", "level": "warning", "message": {"text": "Frontend route `/simtaka` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ab21f91081613a2b", "scanner": "scanner-primary", "fingerprint": "8e7f2cb4a28195d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a2fc6c37adda631e", "level": "warning", "message": {"text": "Frontend route `/simtaka/:tab` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "5785895ed32b6479", "scanner": "scanner-primary", "fingerprint": "a2fc6c37adda631e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d3ecb903eda7ea33", "level": "warning", "message": {"text": "Frontend route `/buletin` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "c1582353ebda8d5d", "scanner": "scanner-primary", "fingerprint": "d3ecb903eda7ea33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9d88c8c94a35c3ec", "level": "warning", "message": {"text": "Frontend route `/pengaturan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "f1c582cc0f9fc0ad", "scanner": "scanner-primary", "fingerprint": "9d88c8c94a35c3ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c930b60bb404f2cf", "level": "warning", "message": {"text": "Frontend route `/pengaturan/sekolah` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "4434fdd41790c0df", "scanner": "scanner-primary", "fingerprint": "c930b60bb404f2cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8393d7388f6c44ed", "level": "warning", "message": {"text": "Frontend route `/pengaturan/pengguna` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2adf84bda1e31a6f", "scanner": "scanner-primary", "fingerprint": "8393d7388f6c44ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3de2e0cffb8a1d87", "level": "warning", "message": {"text": "Frontend route `/pengaturan/ortu` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "a03d05211c1d8cad", "scanner": "scanner-primary", "fingerprint": "3de2e0cffb8a1d87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a892814b65fa599d", "level": "warning", "message": {"text": "Frontend route `/pengaturan/notifikasi` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0ae70abb188c214a", "scanner": "scanner-primary", "fingerprint": "a892814b65fa599d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a12f95a81343d557", "level": "warning", "message": {"text": "Frontend route `/pengaturan/backup` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "ff1a927ac6856d7a", "scanner": "scanner-primary", "fingerprint": "a12f95a81343d557", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-befe9bdf65e10118", "level": "warning", "message": {"text": "Frontend route `/pengaturan/migrasi-data` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "2c19efc46a17c2b9", "scanner": "scanner-primary", "fingerprint": "befe9bdf65e10118", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-585105dd0d57e9b6", "level": "warning", "message": {"text": "Frontend route `/pengaturan/cek-kesehatan` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "8864837ef0a04447", "scanner": "scanner-primary", "fingerprint": "585105dd0d57e9b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-235c5bbd1f0d50cd", "level": "warning", "message": {"text": "Frontend route `/pengaturan/:tab` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "0a1d2a0b737b4610", "scanner": "scanner-primary", "fingerprint": "235c5bbd1f0d50cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}