Mengapa
Fondasi CodeLens (call-graph akurat) berkali-kali retak tanpa tertangkap CI: reference_count/trace/dead-code salah lintas bahasa berbulan-bulan — deretan fix #210, #219, #222, #223, #231 SEMUANYA soal edge/caller hilang. Pola ini falsifiable: git log --oneline | grep -iE "ref.?count|caller|graph_edge|trace" menunjukkan tambalan berulang di area yang sama. Akar prosesnya: TIDAK ADA test yang mengunci output graph pada fixture dikenal, jadi tiap regresi lolos sampai ditemukan manual di workspace nyata.
Konteks
Setiap perbaikan graph sejauh ini diverifikasi ad-hoc di repo eksternal (KDS), lalu hilang — tidak jadi regression guard permanen. Pola yang terbukti di industri (tree-sitter test/corpus, snapshot testing) = fixture kecil deterministik + assert output persis; diff ditinjau saat sengaja berubah.
Tujuan
Harness golden-fixture: satu set fixture polyglot kecil (TS/JS/Python/Rust minimal) dengan pola yang HISTORIS bikin bug — module-level call (#219), object-literal arrow (#222), asyncHandler-wrapped (#231), same-file usage (#220), module-level caller di trace (#223). Scan fixture → assert reference_count, caller/callee set, dan dead-code status PERSIS. Regresi graph gagal CI seketika, bukan berbulan kemudian.
Constraint
Definition of Done
Mengapa
Fondasi CodeLens (call-graph akurat) berkali-kali retak tanpa tertangkap CI: reference_count/trace/dead-code salah lintas bahasa berbulan-bulan — deretan fix #210, #219, #222, #223, #231 SEMUANYA soal edge/caller hilang. Pola ini falsifiable:
git log --oneline | grep -iE "ref.?count|caller|graph_edge|trace"menunjukkan tambalan berulang di area yang sama. Akar prosesnya: TIDAK ADA test yang mengunci output graph pada fixture dikenal, jadi tiap regresi lolos sampai ditemukan manual di workspace nyata.Konteks
Setiap perbaikan graph sejauh ini diverifikasi ad-hoc di repo eksternal (KDS), lalu hilang — tidak jadi regression guard permanen. Pola yang terbukti di industri (tree-sitter
test/corpus, snapshot testing) = fixture kecil deterministik + assert output persis; diff ditinjau saat sengaja berubah.Tujuan
Harness golden-fixture: satu set fixture polyglot kecil (TS/JS/Python/Rust minimal) dengan pola yang HISTORIS bikin bug — module-level call (#219), object-literal arrow (#222), asyncHandler-wrapped (#231), same-file usage (#220), module-level caller di trace (#223). Scan fixture → assert
reference_count, caller/callee set, dandead-codestatus PERSIS. Regresi graph gagal CI seketika, bukan berbulan kemudian.Constraint
\↔/— lihat gotcha feat(format): compact output + pagination + graph-schema — closes #17 #27). Jalan cepat (fixture kecil, bukan repo besar).Definition of Done
tests/test_graph_accuracy_golden.py(atau serupa) dengan fixture untuk minimal pola fix(callgraph): extract module-top-level calls to fix rc undercount (closes #210) #219/fix(dead-code): same-file-usage tracking missing for 14 languages, causes false-positive registry_dead #220/fix(callgraph): arrow functions as object-literal values not tracked, undercounts ref_count #222/fix(trace,impact): module-level callers invisible due to synthetic source_id, inconsistent with rc #223/fix(callgraph): calls inside asyncHandler-wrapped route handlers missing from graph_edges #231