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_serve → ta_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_serve — gated, 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
Summary
We currently maintain three C "oracle" baselines for the test/verification pipeline. Two of them (
ta_ref_serveandta_064_serve) are frequently confused for each other — the ambiguous "ref" / "c-ref" naming surfaced this. They are not redundant with each other, butta_ref_serve's ongoing role is being superseded by the newer bitwise-parity gate (#113 / #115). This issue tracks retiringta_ref_serveand generalizingta_064_serveinto a versioned oracle.The three C oracles today
ta_ref_servereference-pre-cutover0d6b0e64)ta_064_servev0.6.443f9d504)--xlang-hash(#113)Findings
ta_064_serveandta_ref_serveare not redundant with each other.ta_064_serveis the release-facing regression contract (C-only, bit-exact vs the last shipped release).ta_ref_serveis a 4-language codegen-correctness oracle at 1e-9. Deleting either naively loses real coverage.ta_ref_servevs--xlang-hash: both verify cross-language parity.--xlang-hashdoes it more strictly (bit-exact vs 1e-9) and against a more meaningful golden (current C, not a 13-month-old frozen snapshot).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-hashuses.ta_ref_serve's original reason to exist (prove the codegen cutover preserved behavior) is already discharged and permanently captured by thereference-pre-cutovertag + git history. It is now just the incumbent cross-language oracle, coasting until--xlang-hashfinishes the takeover.Plan
1. Generalize
ta_064_serve→ta_XXX_serve(versioned release-regression oracle)Parameterize the differential-oracle machinery (
scripts/build_064_serve.py,REF_TAG,build.py fuzz-064, thefuzz-vs-064nightly job) on a version string so rolling to a new released baseline is a one-line change. When 0.8.1 ships, add/roll tota_081_serve. High, permanent value.2. Retire
ta_ref_serve— gated, not nowBlockers before it can be removed without losing coverage:
--xlang-hashcovers Java (needs Java server: add the ta_abstract introspection RPC interface (abstract_call, TA_Get*Info, …) #114 → Unify server_verify with --xlang-hash: bitwise C⇄server on hard-coded inputs (shared core + lossless transport) #115) and .NET. Today it is Rust-only, and thecross-language-rust-debugjob is also Rust-only — sota_ref_serveis currently the only numeric gate for Java and .NET output.cross-languagejob againstta_ref_serve) is migrated onto the current-C golden (folded into the--xlang-hashpath).Once both are green, remove:
REF_TAG = "reference-pre-cutover"and the../ta-lib-refworktree machinery (scripts/regtest.py_ta_ref_serve_paths/_compile_ta_ref_serve;scripts/abi_gate.pyalso pins this tag — check its dependency).--codegen-onlypath (superseded by bitwise)..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
ta_ref_serve)--xlang-hash)server_verifywith--xlang-hash(shared bitwise core)