feat: multilingual precision + zero-phantom regression gate (reframed agent benchmark) #38
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
h-dv/code-index#38
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why (reframed from "multilingual agent benchmark")
Two ultradeep multi-agent studies (2026-07-21, post v0.8.0/I032) reframed this:
unwrap,assert,String,Vec,Option— which the resolver correctly declines; chasing them mints phantoms). Do not chase it.tree-sitter-stack-graphswas archived 2025-09-09 and never covered Rust/Ruby/PHP/C#; SCIP indexers are all build-required (break zero-build/offline); ctags/ast-grep sit below name resolution and would manufacture phantoms. The resolver is permanent and load-bearing.Therefore its zero-phantom guarantee is the crown jewel — and today it is defended only by manual per-mission adversarial dogfood (I026 and I030 each shipped fixes for phantoms the fixture tests missed). One resolver refactor can silently reintroduce phantoms with green CI. This issue automates that guard.
The original "efficiency/round-trip benchmark" framing is rejected as vacuous: the current
crates/mcp-server/tests/agent_workflow_bench.rsis#[ignore]d, has 1 assert vs 4println!, runs one Rust project, and measures self-reported bytes — it cannot prove correctness or catch a regression.What (the deliverable)
An asserting precision +
phantom==0regression gate across all 6 languages, built on machine-readable edge oracles, wired into CI. Extend the existing harness (crates/daemon/tests/correctness.rs,lang_e2e.rs, theground_truth/dir,tests/fixtures/{lang}/project/EXPECTATIONS.md) — do not reinvent.Tier 1 — precision / phantom gate (primary, CI-gating)
EXPECTATIONS.mdinto a machine-readable edge oracle: positive edges (caller→callee, ref→def) plus weighted DECOY / negative cases:.get()/.unwrap()/.new()where a same-named project symbol exists),Util::helperprivate vsGreeter::helperpublic — already in fixtures),phantom_rate == 0— aresolution=resolvededge bound to the wrong internal target. Load-bearing, non-gameable: a "resolve-everything" resolver must score worse.precisionof resolved call/method_call/type/qualified edges (target ~100%).internal_recallover internal-eligible edges only (denominator excludesno_candidateexternals — so it is meaningful, not the misleading 15–20%).name_fallbackfalse-identity rate (currently unmeasured — the real confidently-wrong-answer risk).>=1bounds let an empty graph pass).Tier 2 — efficiency vs baseline (secondary)
CI
.forgejo/workflows/ci.ymlso every resolver change is gated. This replaces the manual dogfood safety net with an automated one.Non-goals
Acceptance
phantom_rate == 0asserted across all 6 languages, in CI.