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

## Scope

Reconnect all seven historical acceptor cases extracted into
`private/rust/libhft-rust-pro-store/qualification/classic-store-gates/acceptor.rs`.
They now run automatically in the companion's
`tests/private_acceptor_store.rs` integration target. Production code and
configured lifecycle methods are unchanged.

## Exercised contracts

- A concrete mapped HA standby refuses a connection while another acceptor
  owns the writer fence, closes the refused socket and accepts after release.
- A learned peer opens its mapped journal at Logon, with one file per identity
  and no open before the peer is known.
- A returning peer recovers the prior session's inbound/outbound sequence state
  in a new acceptor session and agrees with its continuing client.
- A peer restarting at sequence 1 without a reset receives the original
  too-low Logout and no Logon response. An explicit reset starts a fresh epoch
  in the same file.
- A duplicate identity is refused before opening a second writer; the first
  session remains logged on.
- A learned store that fails to open refuses the Logon after accepting the
  connection.
- A learned-peer HA standby refuses even a reset Logon while the primary owns
  the file, then recovers it after orderly primary release and peer failover.

These tests exercise real mapped-store writer ownership through public
`Acceptor`, `SessionFactory`, `Session` and `MessageStore` contracts. Concrete
admission and learned-peer Logon admission remain distinct cases. They do not
depend on configured lifecycle discovery or an OSS private test hook.

The reconstruction redirects imports to the companion, removes the historical
edition gates, and uses the existing owned runtime-directory helper instead of
shared temporary paths. Portable public acceptor helpers retain their behavior
and assertions. Their poll, dial and close waits have deadlines. The archived
source review reconstructs the complete target from these exact inputs,
requires rustfmt-normalized byte equality and verifies all seven extracted
test names in order. The source diff contains only the new target and two
companion READMEs; existing runtime sources and tests are unchanged.

## Qualification

Qualified source: `d860d1f8a380ab69962905277fe1be4a350ca2ae`, based on published
claim `ed9468c59`.

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

All six commands return 0. Each feature configuration executes the complete
seven-case acceptor target. This slice adds exactly seven integration tests to
the previous 364-test checkpoint. Cargo uses `--locked`, the explicit development
config and an out-of-tree session target. Scan runs the commands serially with
one Cargo job and test thread, a shared CPU lease, memory/process guard and
command deadline. BEELINK2 runs no heavy build.

All 355 selected source/configuration/documentation/fixture hashes match before
and after qualification, including the shared FIXP CSV inputs. Their manifest
SHA-256 is `76053efa7538f9d86dc63f115657d801cb72175b6eca47f3e2810625eae0d138`.
Git status after qualification is empty. Targeted rustfmt and whitespace checks
pass; publication compares the qualified input hashes again after rebasing.

## Retained evidence and remaining work

`~/archive/libhft/rust-private-acceptor-20261019/` retains the source snapshot
and bundle, reconstruction and review scripts, exact adaptation patch, command
controller and resource guards, six logs, toolchain, before/after hashes,
test-total analysis, clean-tree observation and publication mapping. Copies and
their checksum manifests are verified on Scan and HP before scratch cleanup.

The extracted acceptor group is now runnable. Configured startup/configuration,
the other historical groups, and the moved conformance stages retain their own
integration and qualification work. The mapped store's legacy on-disk sequence
limits remain. This checkpoint does not declare full Rust parity or add a
physical power-loss/performance claim.
