Skip to content

Historical development result — 24 July 2026

Historical development evidence, not the current evaluation result. The independently reviewed v0.2.0 evaluation result now supplies the canonical public comparison. This broader 158-case run remains available for regression history and language coverage, but its analyzer-informed cases must not be pooled with the evaluation partition.

All 158 cases have completed a first human review, but the corpus remains analyzer-informed and legacy_unattributed. A second independent review, preregistration, and an immutable freeze are still required for evaluation promotion.

Historical identity limitation. This pre-schema-v2 page requested the upstream clangd 22.1.6 profile while the host resolved Apple clangd 21.0.0. It is preserved as development history, but that row is not valid published candidate evidence. New freezes use the distinct apple-clangd-21 candidate and reject upstream or unverified executables.

This corrected native result replaces the legacy 16 July figures. Bifrost was rerun across the full corpus at the pinned revision. gopls, TypeScript LS, and Intelephense were rerun after adding reviewed compatible-operation evidence and the machine-readable destination scorer. Java had already been rerun with the same pinned JDT LS after correcting its workspace path and ordinary source-navigation operations; Metals had been refreshed at 1.6.8. The other five reference profiles retain their synchronized 24 July reports because their cases and operations did not change. All fresh reports record zero runner errors.

Run factValue
Date24 July 2026
UsageBench parent revisiond01a4aa60b4516529a63009ef312c6f34d21b80a
CorrectionsJava workspace isolation and Definition authoring; Metals 1.6.8 refresh; 13 reviewed compatible-operation annotations and report-derived destination scoring
Bifrost revision782522b245fc86e3d39b1cdc0488553a1d262212 (pinned synchronized revision)
HostmacOS arm64, native and host-specific
ScoringHeadline required-destination recall; secondary strict range and identity conformance

The primary comparison uses the 144 cases scoreable by both Bifrost and the corresponding reference server through the canonical operation or an explicitly reviewed compatible operation. It asks whether every reviewed reference was returned and every navigation or type lookup included its expected destination. Line-only or broader containing ranges and additional results are tolerated in this view because an editor user can still reach the required code. Compatible operations are reported separately; they do not alter the strict canonical results below.

LanguageShared destination-scoreableBifrost destinationsReference destinations
C++1512/15 (80.0%)14/15 (93.3%)
C#1614/16 (87.5%)15/16 (93.8%)
Go119/11 (81.8%)11/11 (100.0%)
Java1111/11 (100.0%)11/11 (100.0%)
JavaScript, TypeScript2119/21 (90.5%)19/21 (90.5%)
PHP1412/14 (85.7%)14/14 (100.0%)
Python1311/13 (84.6%)13/13 (100.0%)
Ruby1615/16 (93.8%)11/16 (68.8%)
Rust1514/15 (93.3%)13/15 (86.7%)
Scala1211/12 (91.7%)10/12 (83.3%)
Pooled144128/144 (88.9%)131/144 (91.0%)

The fresh report fields reproduce the affected rows directly: Go pairs to 9/11 versus 11/11, JavaScript/TypeScript to 19/21 versus 19/21, and PHP to 12/14 versus 14/14. Bifrost’s full report finds 135 of its 152 individually scoreable cases; intersecting scoreable case IDs with each reference profile produces the 128/144 paired total above.

With each profile weighted equally, Bifrost averages 88.9% and the reference servers 91.6%; the median paired profile difference is −3.1 percentage points. Bifrost leads three profiles, ties two, and trails five.

This is a recall-forward measure, not a declaration that all returned results are equally good. A case can surface every required destination while also returning distracting family members or unrelated targets. Those differences remain failures in the strict contract view.

The secondary comparison requires complete reviewed token ranges, no unallowed identity-family extras, and a strict singleton navigation target. This is UsageBench’s machine-consumer contract, not a generic LSP 3.18 compliance test: the protocol defines Location and Range shapes but does not require the range to select exactly one terminal identifier.

OutcomeCases
Exact for both85
Exact only for Bifrost31
Exact only for the language server11
Exact for neither4
Shared scoreable total131

Bifrost is therefore exact on 116/131 shared cases; the reference servers are exact on 96/131. Nine of the 31 Bifrost-only exact cases are LSP position_unverified results: the LSP reached the expected line but returned a line-only or broader containing range instead of the one complete target token required by the contract. The other 22 are hard contract disagreements.

No single aggregate answers every comparison question. The pooled rate weights each authored case equally; the equal-profile mean weights each of the ten reference-server profiles equally; and the median shows the middle profile without letting the two largest gaps determine the result.

ViewBifrostReference serversInterpretation
Pooled, case-weighted exactness116/131 (88.5%)96/131 (73.3%)Outcome across all shared cases
Equal-profile mean exactness88.6%75.0%Each server profile has equal influence
Median profile exactness87.9%80.0%Typical profile, less affected by the largest gaps

The median of the ten paired per-profile differences is +9.2 percentage points for Bifrost. Bifrost leads seven profiles, ties one, and trails two.

The pooled advantage is concentrated: Ruby contributes 10 of the net 20-case gap and Java contributes 7. Without Ruby, the pooled result is 101/115 (87.8%) versus 91/115 (79.1%). Without both Ruby and Java, it is 90/104 (86.5%) versus 87/104 (83.7%). Removing any one profile leaves Bifrost ahead, with a pooled gap between 8.7 and 19.5 percentage points. These leave-out figures measure sensitivity to corpus composition; they are not a reason to discard any language.

Java is additionally sensitive to the strict contract rather than recall. JDT LS returns every expected Java usage site. Five cases are non-exact because its reference ranges contain the expected identifier but span a qualified name or complete invocation. The two hard Java cases group interface and override-family calls beyond the authored static identity. A previous field disagreement was an authored-operation mismatch: the case now uses Definition, which JDT LS and Bifrost both satisfy exactly.

The user-facing destination metric supports a corpus-bounded parity conclusion; the strict view shows higher Bifrost conformance on most current profiles. Neither establishes general superiority. The corpus is small, analyzer-informed, and still underrepresents compiler-generated and external-dependency semantics.

Exactness is conditional on an operation being scoreable. Across all 158 authored cases, Bifrost can score 152 (96.2%). The reference-server profiles can score 131 (82.9%); 23 cases require an operation the corresponding server does not advertise, and 4 runtime-driven cases are not planned for either side. Unsupported is a capability boundary rather than an incorrect answer, so it is reported separately from shared-case exactness.

Bifrost can score 152 of the 158 authored cases.

LanguageExactExpected gapOther non-exactScoreableUnsupportedNot planned
C++12121510
C#14021600
Go9021110
Java11001100
JavaScript, TypeScript20022201
PHP12021400
Python10031302
Ruby19102001
Rust14101500
Scala12031500
Total13331615224

The three expected gaps are the C++ function-like macro expansion, Ruby self-construction through require_relative, and Rust declarative-macro- generated function reference. The 16 other non-exact results remain visible as current analyzer gaps or newly reviewed contract differences.

The ten primary profiles can score 131 cases. Another 23 require an operation the server does not advertise, and 4 runtime-driven cases are not planned.

LanguageServerExactPosition unverifiedHardScoreableUnsupportedNot planned
C++clangd12031510
C#Roslyn13031600
Gogopls600660
JavaEclipse JDT LS4521100
JavaScript, TypeScriptTypeScript LS13221751
PHPIntelephense9011040
PythonPyright13001302
RubyRuby LSP5381641
Rustrust-analyzer12031500
ScalaMetals9031230
Total10 servers961025131234

The previous policy near category is now zero by construction. Import, re-export, and export-metadata locations are classified as optional bindings: they remain recorded in raw results but do not make an otherwise exact case non-exact. The ten position_unverified results are also shown separately: they reached the expected path and line but returned either line-only locations or broader ranges containing the expected token, so they should not be read as equivalent to the 25 hard disagreements.

ServerRequested releaseServer-reported release
clangd22.1.6Apple clangd 21.0.0
gopls0.23.0v0.23.0
rust-analyzer2026-07-130.3.2971-standalone, 2026-07-13
TypeScript language server5.3.0 with TypeScript 5.9.3Not reported
Pyright1.1.411Not reported
Intelephense1.18.5Not reported
Ruby LSP0.26.100.26.10
Eclipse JDT LS1.61.0-2026071421241.61.0-SNAPSHOT
Roslynvscode-csharp 2.140.9Not reported
Metals1.6.81.6.8

The clangd row is explicitly for the resolved Apple clangd build, not upstream clangd 22.1.6. Package-launched servers retain their exact requested versions even when the protocol does not report a version.

The historical case comparison separates Bifrost-only exact, LSP-only exact, neither-exact, unsupported, and not-planned cases. The language pages explain the reviewed semantics behind important deltas.

No current result measures indexing time, warm-query latency, peak memory, external dependencies, or broad real-world accuracy. Compiler-backed language servers are also likely to be stronger on macro expansion, generated declarations, synthetic members, conditional compilation, and SDK symbols. Those areas should grow as reviewed parity cases rather than being inferred from this score.