# Rust merged validation acceptance qualification — 2026-10-14

## Scope and source

This rechecks the landed Rust implementation of the 2026-10-13 validation ruling
and the subsequent session-field, Logon-admission and CompID answers. The acceptance
source is `e14b236e68e533ade7e8b88eaf7721d2ac9212ca`. The probe configuration,
corpus selection, expected messages and reviewed-divergence classification are
those already shipped at that pin.

The QuickFIX/J reference is `f72feb612c7fd5d519c916874dbd00121eb71298`;
QuickFIX C++ is `386ce46e917ae494ab6e90b1be90fd421cdbe3f9`. Both reference
checkouts have clean tracked files. The dictionaries are the respective
reference server's XML; the harness holds the session clock at the corpus's
fixed time and enables the reference validation settings.

## Complete external acceptance captures

| Corpus | Definitions run | Expected messages | Matches | Raw differing rows | Reviewed rows | Unexpected rows |
|---|---:|---:|---:|---:|---:|---:|
| QuickFIX/J | 405 | 1,734 | 1,734 | 0 | 0 | 0 |
| QuickFIX C++ | 468 | 1,968 | 1,797 | 176 | 176 | 0 |

Both uncapped all-version probe commands return 0, with no unclassified file
or harness error. Their arguments match the corresponding acceptance stage's
probe invocation, with an explicit evidence output directory. The one
QuickFIX/J future definition and the three C++ definitions outside its upstream
suite remain named with `outside_upstream_suite` in `files.csv`.

C++'s raw differences are retained: reject text tag format (52), Logon
SendingTime Logout (5), Logout reason text (48), extra reject-text field (10),
legacy low-sequence resend (8), its follow-up (8), reject RefTagID (36),
empty-group echo (6), and BusinessMessageReject application-version field (3).
The 176 counts all differing result rows; the expected-message subset has
171 differences, so it must not be subtracted from 1,968 to infer matches.
The shipped judge classifies all of them; no new allowance was added.

## Complete Rust qualification

At the acceptance pin, complete Rust stages passed **2,389 default / 2,197
open**, one existing ignored doctest each, with strict all-target Clippy passing
both editions. Each selected stage reported one run, zero failures and zero
skipped stages. The wrapper's exit 2 reports the selected run as PARTIAL
(one of 362 monorepo stages); these are complete Rust suites, not a pass of the
whole monorepo conformance sweep.

A FIXP finalization fence and its eight-case fixture landed during qualification.
The combined source is `2afb6e09a7e806c50043c8d14d21bb70901ca779`.
Its repeated complete stages pass **2,397 default / 2,205 open**, zero failures
and one existing ignored doctest each; strict all-target Clippy with
`-D warnings` passes both. Cargo/Rust 1.92.0 runs the complete suites and the
retained 1.93.1 toolchain runs Clippy. All 382 Rust and 632 shared path/SHA256
inputs match before and after this final run. The 13 inventory tests pass and
the coverage matrix matches its source. First and combined captures have
separate directories and counts.

Acceptance inputs remain applicable: 379 of the original 381 Rust paths and all
632 shared inputs are identical. The two changed Rust files expose an existing
writer guard within the crate and use it on FIXP's cold finalization append;
the one added file is that append's regression fixture. Removing the two
visibility modifiers makes `file_store.rs` byte-identical to the accepted pin.
The acceptance harness uses `MemoryStore` and does not invoke this FIXP journal.
`acceptance-integration-review.json` and its exact diff retain that comparison;
no acceptance command is counted as rerun on the combined pin.


## Resource controls and evidence

The acceptance probes ran on Scan under an exclusive `isol-no-shared` CPU
lease, two Cargo build threads and a 64 GiB start / 32 GiB stop memory guard.
Scan's `/home` had 8.8 GiB available before preparation and 7.3 GiB after the
probe run. HP runs the complete suites and strict Clippy under its exclusive
lease, two build threads, one test thread and an 8 GiB start / 5 GiB stop guard.
All build outputs use the owned session's absolute `LIBHFT_BUILD_ROOT`.

An initial BEELINK2 attempt was stopped when the local guard observed other
Java work. Its partial captures are retained as interrupted observations and
are excluded from the pass counts above. The authoritative acceptance captures
are `scan/`; the authoritative complete-suite and lint captures are `hp/`.

The packet at `~/archive/libhft/rust-acceptance-validation-20261014` retains the
actual commands, raw TSV/CSV transcripts, selection reports, logs, path/SHA256
maps, qualification summaries and a source bundle. Its checksums are verified
on BEELINK2, Scan and HP before the task scratch is removed.

## Status and limits

The tracked scores remain 82/82 applicable APIs, 27/27 protocol rows and
43 complete, two partial and one not applicable subsystem. Live production
feed/order endpoint evidence and venue certification, and FIXP venue
endpoint/session/schema certification, remain external partials. These local
reference-corpus and Rust tests provide no new live venue certification.
