# NanoFIX pre-warmup capture — HP qualification

The canonical public NanoFIX transport consumer now runs ten functional
cycles before requested warmup, closes each directional file at that limit
and verifies the independent shared owner vector before warmup. Markers and
owner sink reset at both phase boundaries. Full live application counts,
prepared/completed send identity, measured owner folds and primary/delay
samples remain required without measured application-message I/O.

It reuses the reviewed Rust preflight constants, keeps the public transport
receive timestamp before parser/extraction, and accepts both the fixed-entry
argument shape and historical unused dictionary placeholder. The functional
checker exercises both forms. The SDK and existing reviewed Aeron
compatibility overlay receive no new source change.

The dedicated cold checker replays the full functional matrix and refuses
altered copies. Immutable generation and compact-output identities distinguish
`nanofix+kernel+receive-clock`; runtime facts must name the public NanoFIX
transport observer and no store. These additions retain full physical,
fixture, original owner/admin, rate/delay/stability and cold admission.

All 587 focused admission/result controls pass without skips. The complete
stripped 890-file source subsequently builds and passes twelve actual
functional pairs plus 73 cold refusals on HP, under a high-priority `isol`
lease with shared conformance work concurrent. Warmup 5/0/5 and repeated
runs retain exactly 240 primary samples, 240 delay samples and 1,000
application frames per peer. Only 300 preflight frames per peer enter the
closed directional captures. The independent cold reader reproduces every
original fixture receipt and leaves input bytes/modes unchanged.

| Bound input/product | Identity |
|---|---|
| Full stripped harness inventory SHA-256 | `556a8800010f7dbf9cc4333c047ac468fb74e0b5b62309dc3b756f08dcc4a237` |
| NanoFIX SDK commit | `0f79bae0ad141653c80cf01c60c807649a6adf7b` |
| Aeron SDK commit | `920c266acc79f0bab642b83aeddd720875faa0b5` |
| Executable SHA-256 | `2c423dcb4adb0662c4ddae6ba63fde010364fbff4cc846c71c96b152f7d860ae` |
| `libaeron.so` SHA-256 | `7b7e4a5ef858e35739d78ff0dbe847e473362884a425f2e236b1d0983f0e7882` |
| `libaeron_driver.so` SHA-256 | `2d6a144e7b0825a260aac2101d03c556ee792f4b7b8fa1aadb793c393d6c45a4` |

Both upstream tracked source inventories, the exact reviewed overlay,
native-library inputs and harness inventory remain unchanged. No extra SDK
patch is introduced. The new executable's two native dependencies resolve
to its own output directory with `LD_LIBRARY_PATH` and `LD_PRELOAD` cleared;
their loaded paths and hashes match the copied products. Public preparation
still accepts separately supplied, source-bound native inputs. Runtime
packaging does not distribute those SDKs through the harness source export.

Working output is `~/build/codex-fullbench/libhft/nanofix-preflight-20261017-v4`
on HP. No raw sample, capture, log, executable or shared library enters Git.
Fresh immutable physical preparation/reports, the new matched comparison
and full release admission remain open. No timing grade is inferred from
functional success.


The first three HP attempts remain separate: missing `patch` stopped setup;
Git then reproduced the reviewed patched hash but the offline build lacked
one exact dependency; fetching only its locked dependency set preserved the
lock SHA-256 `fb30137fad33e855802e7827dea15b5f7c2f4521b5e12ac275a5a2ee6be35a72`.
The subsequent 34-second build succeeded, but runtime inspection refused two
unresolved Aeron shared libraries before socket tests. The builder now copies
and hash-binds those supplied libraries beside the executable, with an
`$ORIGIN` runtime search path. The fourth complete qualification passes as
recorded above. Failed attempts keep their separate working roots/logs and
confer no fixture or timing admission.
