# Rust private configured-store qualification — 2026-10-19

## Scope

Reconnect the nine named cases in the extracted private `config.rs` fragment
under `private/rust/libhft-rust-pro-store/qualification/classic-store-gates`.
They now run automatically in `src/classic_config_tests.rs`, through the
released explicit registry lifecycle APIs. Production sources and public
capability discovery are unchanged.

## Contracts and adapters

| Restored case | Contract retained |
| --- | --- |
| `a_file_store_size_of_zero_is_the_default_size` | Unset and zero mmap sizes agree, while an explicit doubled size changes the actual mapped file. |
| `an_ha_standby_acceptor_waits_at_start_without_listening` | A configured standby does not listen, reports Reconnecting, respects the retry interval, sleeps while waiting, sees cancellation promptly, and listens after primary release. |
| `async_file_high_availability_constructs_without_opening_the_file` | Cold HA construction opens nothing and refuses unowned writes/reset. |
| `async_file_high_availability_acceptor_waits_for_a_validated_peer` | Learned-peer HA construction remains unbound and cold until the peer is admitted. |
| `async_file_high_availability_initiator_promotes_before_dial_and_logon` | A standby dials nothing or spends a reconnect attempt; promotion recovers outbound/inbound state before the first Logon. |
| `ha_quickfix_configuration_is_cold_for_both_profiles_and_learned_acceptors` | Default/C++/J selection remains cold for configured and learned-peer stores. |
| `ha_quickfix_initiator_promotes_before_dial_and_recovers_logon_sequences` | Both QuickFIX profiles recover sequence 43, inbound 17 and the retained order before sending; releasing primary drops the writer role. |
| `ha_quickfix_learned_acceptor_sends_a_refusal_logout_then_promotes_on_retry` | Both profiles send the original durable-store refusal Logout under contention, admit a later retry, and checkpoint the admitted inbound cursor. |
| `store_durability_is_configured_on_the_mmap_store_and_refused_where_it_cannot_hold` | Default/checkpoint and sync aliases select their original policies; unsupported stores and unknown policies retain their refusal diagnostics. |

Historical implicit `store`/`session`/`initiator`/`acceptor` calls become their
explicit registered counterparts. Owned runtime roots retain initially absent
child paths for cold-construction assertions and remove fixtures at exit.
The size probe doubles the measured default rather than reading an engine-private
constant. The standby timing fixture explicitly requests one second: the old
absent-key default was one second, while the current ruled default is 30.
Its one/seven-second retry, idle-CPU and prompt-cancel assertions remain.

The selected store is opaque, so the durability adapter observes its public
factory request while delegating construction to the actual `ProStoreProvider`.
It then saves through the ordinary selected-store contract and checks the
companion's existing native sync instrumentation: zero save-path sync calls for
checkpoint, one for sync-before-send. No public getter, downcast or test hook is
added, and a provider that ignored the requested policy would fail this check.

Strict Clippy found duplicate inclusion of the shared fixture module in the
first candidate. The final source declares the fixture once at the test-library
root, and both unit modules import it. Existing mapped-session case bodies are
unchanged. The production library is byte-identical to its baseline after
removing the two test-only module declarations. The archived reconstruction
requires rustfmt-normalized target equality and all nine historical names in
order; it also checks that no production source changed.

## Qualification

Qualified source: `5108b92eb0c99213d512d898ce3a79427a36ea13`, based on published
claim `29e88c0c9`. The earlier candidate `3ab039cba` passed its default tests
but failed strict Clippy; its source bundle and logs are retained separately.

| Complete companion command | Counters enabled | Counters compiled out |
| --- | ---: | ---: |
| Library unit tests passed | 92 | 92 |
| Integration tests passed | 465 | 465 |
| **Total passed** | **557** | **557** |
| Failed / ignored / filtered | 0 / 0 / 0 | 0 / 0 / 0 |
| Strict all-target Clippy | pass | pass |
| Warnings-denied Rustdoc | pass | pass |

All six final commands return 0. Relative to the prior 371-test checkpoint,
upstream adds 150 configured-acceptor cases and the 27-case configured-startup
target; this slice adds nine unit cases. The 557 total is not solely this slice.
Cargo uses `--locked`, the explicit development config, out-of-tree session
targets, one job and one test thread. Scan holds the shared CPU lease and uses
the memory/process guard and command deadlines; resource interruptions are
retried by that guard. No heavy build runs on BEELINK2.

All 357 selected source/configuration/documentation/fixture hashes match before
and after the final run, including shared FIXP inputs. Manifest SHA-256:
`06a3a10788e4613b99cccbc4a3f62bbfb29496054ddbf1ed834058c00ab2dac6`.
Git status after qualification is empty. Targeted rustfmt and whitespace checks
pass. Publication checks the qualified input hashes again after rebasing.

## Retained evidence and remaining work

`~/archive/libhft/rust-private-config-20261019/` retains final and failed-candidate
source bundles, the final snapshot, reconstruction/review scripts, adaptation
patch, controllers/guards, command logs, toolchain, before/after hashes, totals,
clean-tree observation and publication mapping. Copies and checksum manifests
are verified on Scan and HP before scratch cleanup. The next FileStoreSync
adapter design is explicitly marked planned and unexecuted.

The companion README now names the released configured entry points. Its
existing configured-startup integration covers the three historical failure
and handover contracts across runtime modes; it is not a byte-identical copy
of the extracted fixture. Those cases are not counted as new tests here.
Obsolete concrete enum-selection fragments and the two exact paused-writer
FileStoreSync snapshot cases remain outside Cargo targets. The latter still
need an adapter for dependency-private worker control; ordinary recovery
checks do not establish that contract. Full Rust parity and hardware power-loss
or performance qualification are not declared by this checkpoint.
