Skip to content

fix(trace,impact): module-level callers invisible due to synthetic source_id, inconsistent with rc #223

Description

@Wolfvin

Mengapa

Follow-up dari PR #219 (fix issue #210) — didokumentasikan eksplisit di PR body sebagai "Found, not fixed" item #1, BOS diminta putuskan apakah perlu issue terpisah.

Verifikasi konkret di KDS backend real: search "requirePermission" --mode symbol menunjukkan rc:49 (setelah fix #219 — module-level calls sekarang ter-track), tapi context --check trace --name requirePermission --direction up menunjukkan HANYA 1 entry (dirinya sendiri) — 0 real caller ditemukan. Inkonsistensi ini berbahaya: orang yang pakai trace untuk cek "aman gak kalau symbol ini diubah/dihapus" akan salah simpul "aman, tidak ada caller" padahal rc bilang dipakai 49 kali.

Konteks

Root cause (dari PR #219): module-level call edges pakai synthetic source_id = "<file>:0:<module>" yang TIDAK punya entry di graph_nodes. trace/impact JOIN graph_edges.source_id ke graph_nodes.node_id — synthetic source_id ini selalu gagal JOIN, jadi caller dari module-level calls tidak pernah muncul di hasil trace/impact walau edge-nya ada di database.

Tujuan

trace/impact harus bisa menampilkan module-level caller (misal "called at module level in src/routes/accounting.ts", tanpa perlu nama fungsi spesifik karena memang tidak ada fungsi pembungkus) — supaya konsisten dengan rc yang sudah benar dari fix #219.

Constraint

  • Jangan buat node_graphs entry palsu untuk <module> (PR fix(callgraph): extract module-top-level calls to fix rc undercount (closes #210) #219 sengaja menghindari ini supaya tidak polusi list/search output dengan entry fake) — cari cara lain, misal: fallback query yang follow dangling source_id dan render sebagai "module-level caller" tanpa perlu match ke node asli
  • Baca dulu trace_engine.py dan impact_engine.py untuk paham query JOIN yang dipakai sebelum ubah apapun

Definition of Done

  1. trace --direction up --name requirePermission di KDS backend menunjukkan minimal beberapa module-level caller (bukan cuma 1/dirinya sendiri)
  2. impact --name requirePermission menunjukkan dependent count yang konsisten dengan rc dari search
  3. Tidak ada regresi di list/search --mode symbol (tidak ada entry <module> palsu muncul di situ)
  4. Test suite 0 regresi baru

Checklist Laporan Worker

  • Before/after trace output untuk requirePermission di KDS backend
  • Konfirmasi rc dan trace caller count sekarang konsisten (atau dijelaskan kenapa masih beda by design)
  • Hasil test suite lengkap

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions