Skip to content

Retire ta_ref_serve (pre-cutover oracle) once --xlang-hash covers all languages; generalize ta_064_serve → ta_XXX_serve #116

Description

@mario4tier

Summary

We currently maintain three C "oracle" baselines for the test/verification pipeline. Two of them (ta_ref_serve and ta_064_serve) are frequently confused for each other — the ambiguous "ref" / "c-ref" naming surfaced this. They are not redundant with each other, but ta_ref_serve's ongoing role is being superseded by the newer bitwise-parity gate (#113 / #115). This issue tracks retiring ta_ref_serve and generalizing ta_064_serve into a versioned oracle.

The three C oracles today

Oracle Baseline Pinned at Tolerance Languages Question it answers
ta_ref_serve reference-pre-cutover 2026-06-28 (0d6b0e64) 1e-9 C, Rust, Java, .NET Do all 4 codegen backends match a trusted independent reference?
ta_064_serve v0.6.4 2025-01-11 (43f9d504) bit-exact C only Does the shipped C still match the last public release?
--xlang-hash (#113) current in-process C lib (no frozen serve) HEAD bit-exact C, Rust (Java pending #114/#115) Do the language servers match today's C, bit-for-bit?

Findings

  • ta_064_serve and ta_ref_serve are not redundant with each other. ta_064_serve is the release-facing regression contract (C-only, bit-exact vs the last shipped release). ta_ref_serve is a 4-language codegen-correctness oracle at 1e-9. Deleting either naively loses real coverage.
  • The real overlap is ta_ref_serve vs --xlang-hash: both verify cross-language parity. --xlang-hash does it more strictly (bit-exact vs 1e-9) and against a more meaningful golden (current C, not a 13-month-old frozen snapshot).
  • You cannot simply re-point cross-language at ta_064_serve: v0.6.4 (Jan 2025) predates many intentional output changes (period=1 fixes, CCI zero-fix, MFI/STOCHRSI epsilon, IMI NaN guard, FMA). Those are discrete/full-scale diffs, not within 1e-9. The correct long-term golden for cross-language parity is the current C library itself — exactly what --xlang-hash uses.
  • ta_ref_serve's original reason to exist (prove the codegen cutover preserved behavior) is already discharged and permanently captured by the reference-pre-cutover tag + git history. It is now just the incumbent cross-language oracle, coasting until --xlang-hash finishes the takeover.

Plan

1. Generalize ta_064_serveta_XXX_serve (versioned release-regression oracle)

Parameterize the differential-oracle machinery (scripts/build_064_serve.py, REF_TAG, build.py fuzz-064, the fuzz-vs-064 nightly job) on a version string so rolling to a new released baseline is a one-line change. When 0.8.1 ships, add/roll to ta_081_serve. High, permanent value.

2. Retire ta_ref_servegated, not now

Blockers before it can be removed without losing coverage:

Once both are green, remove:

  • REF_TAG = "reference-pre-cutover" and the ../ta-lib-ref worktree machinery (scripts/regtest.py _ta_ref_serve_paths / _compile_ta_ref_serve; scripts/abi_gate.py also pins this tag — check its dependency).
  • The 1e-9 cross-language --codegen-only path (superseded by bitwise).
  • The temporary "xlang: all langs vs pre-cutover C" display label in .github/workflows/dev-nightly-tests.yml (introduced as an explicitly-temporary name — the "pre-cutover" wording exists only until this retirement).

3. Payoff

The "ref / c-ref / pre-cutover / 0.6.4" naming ambiguity dissolves entirely. End state: ta_XXX_serve (versioned release baselines) + the in-process C golden (--xlang-hash). No frozen 2026-06-28 snapshot that everyone mistakes for 0.6.4.

Related

Metadata

Metadata

Assignees

No one assigned

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions