You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ditemukan saat spot-check lanjutan pasca fix #219 (module-level call extraction) terhadap KDS backend real. getGoogleClient (src/routes/public/customer-auth.ts:38) menunjukkan rc:0 di search --mode symbol, padahal ada 1 call site nyata di file yang sama (line 86, di dalam route handler customerAuthRouter.post('/auth/google', asyncHandler(async (req, res) => { ... getGoogleClient() ... }))).
Investigasi yang sudah dilakukan (parser TERBUKTI benar, bug ada di layer downstream)
Parser diverifikasi benar — memanggil TSBackendParser.extract_references() langsung terhadap isi file asli (src/routes/public/customer-auth.ts) menghasilkan edge yang benar:
Reproduksi minimal dengan pattern yang sama (asyncHandler(async (req, res) => { ... }) — arrow function dibungkus function lain sebagai argument, BUKAN argument langsung ke .post()) juga menghasilkan edge yang benar secara isolated.
Edge TIDAK ADA di SQLite — setelah fresh scan (hapus .codelens/ lalu scan ulang), query langsung:
SELECT source_id, target_id, edge_type FROM graph_edges WHERE target_id LIKE'%getGoogleClient%'-- hasil: KOSONG (0 rows)
Padahal parser (dipanggil langsung, di luar pipeline scan) terbukti menghasilkan edge tersebut. Bug ada di antara parser output dan penulisan ke SQLite — kemungkinan di graph_model.py's populate_graph_tables() (baris ~330-375, tempat proses flat_edges sebelum insert ke graph_edges table).
Pattern yang gagal: router.post(path, asyncHandler(async (req, res) => { ... fn() ... })) — arrow function TIDAK langsung jadi argument ke method routing (.post()), tapi dibungkus SATU LAPIS function call lagi (asyncHandler(...), pattern umum untuk auto-catch async error di Express). Pattern ini dipakai di 18 file di KDS backend (grep -c "asyncHandler(" src/routes/*.ts → 18 file non-zero) — impact luas kalau genuinely bug.
Kontras dengan yang sudah fixed — requirePermission (rc 0→49) dan hasPermission (rc 1→7) di fix fix(callgraph): extract module-top-level calls to fix rc undercount (closes #210) #219 SUDAH benar, tapi pattern mereka adalah call LANGSUNG sebagai argument (router.post(path, requirePermission('admin'), handler)), BUKAN dibungkus function lain. getGoogleClient gagal karena polanya beda: dipanggil di DALAM arrow function yang itu sendiri adalah argument dari asyncHandler(...).
Konteks
Ini kemungkinan bug BERBEDA dari #219 (yang sudah fixed) dan #223 (trace/impact synthetic source_id) — ini soal edge dari parser yang genuinely hilang sebelum sampai SQLite, bukan soal edge yang ada tapi tidak ter-JOIN. Kalau benar generalizable, banyak fungsi yang dipanggil di dalam handler yang dibungkus asyncHandler-style wrapper akan under-report rc — sama seperti masalah asli #210 tapi untuk pattern yang berbeda.
Tujuan
Investigasi kenapa edge yang terbukti dihasilkan parser (src/routes/public/customer-auth.ts:0:<module> → getGoogleClient) tidak masuk ke graph_edges table
Fix root cause, apapun itu (kemungkinan di populate_graph_tables() — baca dulu logic lengkapnya, terutama bagian yang resolve target_id dari to_fn, sebelum simpulkan lokasi bug)
Setelah fix, getGoogleClient harus rc >= 1 di KDS backend
Constraint
Investigasi mandiri — jangan asumsikan bug ada di titik yang sudah disebutkan tanpa verifikasi ulang, karena reproduction saya terbatas (belum trace end-to-end dari parser sampai SQLite write)
Mengapa
Ditemukan saat spot-check lanjutan pasca fix #219 (module-level call extraction) terhadap KDS backend real.
getGoogleClient(src/routes/public/customer-auth.ts:38) menunjukkanrc:0disearch --mode symbol, padahal ada 1 call site nyata di file yang sama (line 86, di dalam route handlercustomerAuthRouter.post('/auth/google', asyncHandler(async (req, res) => { ... getGoogleClient() ... }))).Investigasi yang sudah dilakukan (parser TERBUKTI benar, bug ada di layer downstream)
Parser diverifikasi benar — memanggil
TSBackendParser.extract_references()langsung terhadap isi file asli (src/routes/public/customer-auth.ts) menghasilkan edge yang benar:Reproduksi minimal dengan pattern yang sama (
asyncHandler(async (req, res) => { ... })— arrow function dibungkus function lain sebagai argument, BUKAN argument langsung ke.post()) juga menghasilkan edge yang benar secara isolated.Edge TIDAK ADA di SQLite — setelah fresh scan (hapus
.codelens/lalu scan ulang), query langsung:Padahal parser (dipanggil langsung, di luar pipeline scan) terbukti menghasilkan edge tersebut. Bug ada di antara parser output dan penulisan ke SQLite — kemungkinan di
graph_model.py'spopulate_graph_tables()(baris ~330-375, tempat prosesflat_edgessebelum insert kegraph_edgestable).Pattern yang gagal:
router.post(path, asyncHandler(async (req, res) => { ... fn() ... }))— arrow function TIDAK langsung jadi argument ke method routing (.post()), tapi dibungkus SATU LAPIS function call lagi (asyncHandler(...), pattern umum untuk auto-catch async error di Express). Pattern ini dipakai di 18 file di KDS backend (grep -c "asyncHandler(" src/routes/*.ts→ 18 file non-zero) — impact luas kalau genuinely bug.Kontras dengan yang sudah fixed —
requirePermission(rc 0→49) danhasPermission(rc 1→7) di fix fix(callgraph): extract module-top-level calls to fix rc undercount (closes #210) #219 SUDAH benar, tapi pattern mereka adalah call LANGSUNG sebagai argument (router.post(path, requirePermission('admin'), handler)), BUKAN dibungkus function lain.getGoogleClientgagal karena polanya beda: dipanggil di DALAM arrow function yang itu sendiri adalah argument dariasyncHandler(...).Konteks
Ini kemungkinan bug BERBEDA dari #219 (yang sudah fixed) dan #223 (trace/impact synthetic source_id) — ini soal edge dari parser yang genuinely hilang sebelum sampai SQLite, bukan soal edge yang ada tapi tidak ter-JOIN. Kalau benar generalizable, banyak fungsi yang dipanggil di dalam handler yang dibungkus
asyncHandler-style wrapper akan under-report rc — sama seperti masalah asli #210 tapi untuk pattern yang berbeda.Tujuan
src/routes/public/customer-auth.ts:0:<module>→getGoogleClient) tidak masuk kegraph_edgestablepopulate_graph_tables()— baca dulu logic lengkapnya, terutama bagian yang resolve target_id darito_fn, sebelum simpulkan lokasi bug)getGoogleClientharusrc >= 1di KDS backendConstraint
Definition of Done
search "getGoogleClient" <kds-path> --mode symbolmenunjukkanrc >= 1Checklist Laporan Worker