# Rust dictionary inputs after fixture relocation — 2026-10-18

## Status: complete suites and finishing checks passed

The relocated layout now passes both complete default Rust edition stages.
The initial strict Clippy run exposed unrelated style errors in the newly added
FAST exponent test. Its small correction passes focused tests and strict lint.
This record does not claim a complete repository conformance campaign.

## Reproduced baseline

Source pin: `73792e58f5e9dd1d324afd61751f3ce7623d0c08`.
All 405 Rust / 641 shared inputs (1,046 files) are frozen before execution.
The actual `rust-engine-tests` stage runs serial Cargo and one test thread on
Rust 1.92.0. Cargo exits 101; the selected-stage wrapper exits 1. Its library
reports **1,535 passed / 3 failed / 0 ignored**:

- `config::tests::a_session_built_from_config_carries_every_setting`;
- `dict::tests::every_quickfixj_oracle_case_gets_quickfixjs_verdict`;
- `session::tests::a_runtime_loaded_application_dictionary_judges_application_messages`.

Each tries the former fixture family's `cpp/tools` directory. XML dictionaries
now live separately at `oss/shared/dictionaries`. Cargo stops at the failing
library; these are not complete integration-suite totals. Source review also
finds two stale FIX time integration references and a configuration control whose
bad XML path is never opened because its compiled selector wins.

## Shared locator and authorised substitutions

`build_shared_fixtures.rs` owns one dictionary locator, called by `build.rs`, and
emits `LIBHFT_DICTIONARIES`. It selects a complete exported corpus under
`fixtures/cpp/tools` before the development `oss/shared/dictionaries` directory.
A partial export cannot shadow complete development inputs; missing both fails
at build setup. No dictionaries are copied. XML table-equality tests, the oracle,
configuration/session tests and FIX time cases all consume that setting.

The user continued after the explicit three-line `config.rs` / `session.rs` patch
request, authorising those test-path substitutions on 2026-10-18. The lifecycle
owner retains the rest of both files. The exact proposed/applied patch is retained.
Production prefixes of configuration, session, dictionary and XML-loader source
are unchanged; their comparisons are recorded in `runtime-source-review.json`.
No session protocol, configuration policy or dictionary parsing changes.

Five tests compile the actual helper and cover development, nested export
precedence, partial-export fallback, standalone export and missing-input refusal.
An initial bounded probe passes all five with warnings denied, a 4 GiB address-space
cap and 30-second CPU limits. The tests also run in each complete Cargo suite.
Inputs are symlinked and temporary directories are removed at exit.

The export closure initially exposed an upstream missing `rust-env-dir` mapping
for `LIBHFT_CPP_TESTDATA`. Its mapping and the new dictionary-root mapping are
explicit in `publish/libhft-rust.manifest`. Final closure resolves all **331
selected files**. The earlier 330-file check preceded staging the new test;
both outputs and the original missing-mapping diagnostic are retained.

## Complete fixed qualification

Frozen source: `cd10b1574bceffde0a9f9aee5774311fdfe38c46`.

| Actual selected stage | Passed | Failed / ignored | Test programs | Actual Cargo exit |
| --- | ---: | ---: | ---: | ---: |
| `rust-engine-tests` | 2,840 | 0 / 0 | 74 | 0 |
| `rust-open-edition-tests` | 2,626 | 0 / 0 | 74 | 0 |

Both selected stages have zero skips. Each wrapper returns 2/PARTIAL because
only that stage was selected, with actual Cargo success recorded separately.
These complete-stage totals belong to this frozen source, before the later
FAST-test-only lint correction. All 406 Rust / 641 shared files are frozen;
the worktree is confirmed clean at that pin before the finishing transition.
The export manifest has a separate hash. There are no resource retries.

## FAST lint correction and finishing qualification

Initial all-target development Clippy exits 101: nine `collapsible_else_if`
diagnostics in `tests/fixtures/fast_decimal_increment.rs` and two
`manual_is_multiple_of` diagnostics in its handwritten wrapper. The first is
scoped to that generated test module's style with a narrow allow attribute;
the two parity expressions use `is_multiple_of(2)`. The generator and generated
fixture bytes are unchanged. Normalising only those three edits restores the
previous test source exactly.

Finishing source: `f76a399ef86734885a115d9a8c89061965f6c54d`.
Only `tests/fast_decimal_increment.rs` differs in the 1,047 source/input hashes.
Focused FAST regressions pass **10 development / 10 open**, zero failed or
ignored tests. Strict all-target Clippy passes both editions with warnings denied;
warnings-denied Rustdoc passes too. All five finishing commands return 0 and
need no resource retry. Before/after finishing hashes match all 1,047 inputs.
The full-stage totals above remain attached to the earlier complete-suite pin;
no later whole-suite rerun is claimed. The initial lint failure is retained.

Cold inventory, coverage, new-test rustfmt, changed-engine export scans, session
preflight, whitespace, 206 documentation facts and 21 product-link checks pass.
Tracked Rust APIs remain 83/83 applicable. Other owners' lifecycle rulings and
external production venue/FIXP certification remain open.

## Resources and retained evidence

All engine compilation is serial on Scan, under its isolated CPU lease and
64/32 GiB available-memory start/stop guard. A disjoint shared-pool job is allowed
by host policy. BEELINK2 runs cold checks only; HP runs no build for this slice.
The finishing job waits behind an earlier whole-host benchmark reservation.

Interim evidence is retained at
`~/archive/libhft/rust-layout-gates-20261018-preapproval/` on all three hosts.
The final source bundle and results are retained at
`~/archive/libhft/rust-layout-gates-20261018/`, with baseline, prepared, complete
suite, finishing and published pins. Commands, individual exits, outputs, source
hashes, the normalised lint delta and the initial failures are preserved.
Archive verification precedes scratch cleanup.
