# QuickFIX C++ — original production Logon evidence

2026-10-11. Functional qualification only. No fresh Stage 5, report timing,
comparison-fixture or public release admission is granted.

## Change and immutable identity

The admin callback journal already observed bilateral Logons, but did not
retain their original serialized bytes or prove `108=30`. A new optional
`--logon-capture` records original incoming/outgoing SDK `FIX::Log` strings
in a separate file, independently of the application capture budget. It never
prints a parsed message re-encoding. Repeated Logons remain visible. The
existing application capture and prepared tick clock are unchanged.

The audit checks both peers' original envelopes, BodyLength and CheckSum,
exactly one initial sequence-one Logon per sender, reciprocal CLIENT/SERVER
IDs, `98=0` and one `108=30`. Bilateral bytes must match. Both admin journals
must retain exactly one incoming and one outgoing Logon outside measured
windows. Callback-only proof, missing captures and failed remote retrievals
are refused. A failed download cannot borrow a valid stale file.

The controller's `--quickfix-cpp-logon-observations` or declared immutable
`quickfix_cpp_v2` capability selects this proof. Older capabilities report
`not_requested`; their source, runtime pins and records stay unchanged.
QuickFIX C++ physical promotion now also requires a passing original Logon
status. This audit alone does not qualify any other gate.

Frozen source and controller:
`ce4142d37e19d95dd43a95fef728d2ec783781f2`, preserved on private branch
`s/codex-fullbench-logon-qualified-20261011`.
The complete stripped manifest archive contains **778 files**, including
three export templates. The archive uses independent SDK inputs, no parent
engine tree or borrowed Git identity. Its full file hashes and modes are
retained. This is a qualification of these actual products and controller
paths, not a whole-harness build or release.

The SDK is reused from the separately qualified clean source build:

| Input | Identity |
|---|---|
| QuickFIX SDK source | `386ce46e917ae494ab6e90b1be90fd421cdbe3f9` |
| Static library SHA-256 | `93ba126bd531479aa5f503c179235ec15ee0165f85fc0fc3ebf858d742730c1a` |
| SDK preservation receipt SHA-256 | `1e4e0e88fe97465052c5a34a5274a28b549003fbd5ca7982456f36b0d92d3b0a` |
| FIX44 dictionary SHA-256 | `a82655b54363aa9c6d1b2f21f294f1198c0d7125d7b44c26d93d3179f3358425` |
| Fresh production driver SHA-256 | `f725e4ae4c8ba5325d53ae63367e268017504307dcbe1200ea0ef91d97e2c507` |
| Fresh cold fixture SHA-256 | `89a9545e214dfdd02c3f9f5d7b8320a2eadb51dab50778fb5e354de58f856846` |

Both adapter products were compiled serially with GCC 14, C++17, `-O2
-DNDEBUG`, using the recorded SDK inputs. The cold product is byte-identical
to the previous qualified cold fixture. No fresh SDK build is claimed.
Complete source and SDK inventories match before and after execution.

## Executed qualification

Before heavy work on HP, `host-cpu-slot status`, compiler processes and memory
were checked. Other shared C++ work and a Rust compiler were present, with
13 GB available. The outer foreground compilation/check ran under:

```text
host-cpu-slot run --pool isol --priority high
  --reason 'codex-fullbench: QuickFIX original Logon functional qualification'
  --max-time 15m -- python3 -B <frozen capsule runner> <new build> <new results>
```

The launch wrapper uses identical `wait` arguments if `run` returns busy (75).
This execution acquired the lease directly. Shared work was permitted;
endpoint processes inherited the lease's CPU mask. These are localhost
functional checks without a report timing grade or physical NIC proof.

- **48** original cold SDK wire cycles, **12** independent owner vectors and
  **43** malformed-payload rejections pass.
- **23** actual session pairs pass the expected functional outcomes across all
  four flows, warmup 0/3/17 and repeated client-owned runs. Every pair now also
  passes original Logon proof. Four TestRequest pairs verify correlated
  heartbeat callbacks. Four actual ResendRequest pairs invalidate both roles
  as required while retaining complete business samples and captures.
- **Four** actual generic controller pairs pass complete original Logon/admin,
  canonical application-body, owner-sink and raw-series checks, one per flow.
  The tick owner retains its single external-run declaration and prepared-wire
  start/application-entry end boundary.
- **One** actual pair passes Logon capture with application capture disabled.
  Both stdout rows confirm that distinction.
- In total **28 pairs** retain **56 original Logon frames per peer**. The
  application capture checks cover **1,270 frames per peer**. The raw owner
  files retain **360 primary and 360 scheduler-delay samples**, with no drops.
  The Logon-only pair does not request a raw owner file.
- A separate read-only regrade uses the frozen 778-file archive, reproduces
  all 23 pair receipts and four controller Logon receipts, checks every raw
  series, and refuses an older callback-only generation. Original result and
  extracted source bytes remain unchanged.
- **193** focused controller/configuration/body/SDK/admin tests pass with
  **zero skips**. The first focused invocation had 82 passes and one failure:
  the new audit initially assumed role logs were in the run directory. Remote
  controller logs live elsewhere. The audit now takes the actual parsed rows;
  the corrected run and actual local controller paths pass. That development
  failure grants no qualification.

## Staging and required root step

`native-canonical-v2-machine-config.json` binds a new
`fullbench-quickfix-cpp-canonical-v2` generation with its original Logon
capability. It retains the existing NexusFIX canonical-v1 generation exactly.
All launcher, ELF, dictionary and provenance hashes are checked together.
The new fixed launcher runs the SDK as `yann`; no root runtime execution of
this launcher is claimed yet.

Both HP and SCAN contain the same eight staged files under
`~/.cache/libhft/fullbench-native-canonical-v2-20261011`. Their exact hashes
match, shared libraries resolve on both hosts, and the fixed installer passes
`--check` on each host. Neither required root generation is installed.
The unchanged Java QuickFIX/J-v4 and Artio-v9 root directories are also absent.

The fixed installer requires the user's sudo password; the namespace launch
allowlist cannot install it. After publication and the main-checkout ff pulls,
the user can install this native bundle with:

```sh
for host in hp scan; do
  ssh -t "$host" 'sudo /bin/bash /home/yann/code/libhft/private/ops/scripts/install-dac-native-canonical-v2-stage5.sh' || break
done
```

This supersedes the pending v1 native install for fresh Logon-capable work;
older v1 generations remain reproducible. Root installation still grants no
fixture, physical, rate, delay or stability admission. Fresh physical matrices
must verify installed hashes, CPU/process status and quiet high-priority leases
before execution. Runtime fixture flags remain false. Native full report
rate/delay/stability admission and driver/linked-product licence review remain
open. No old report or failed gate is promoted by this record.

## Evidence and preservation

[Original evidence](evidence/quickfix-cpp-logon-20261011/) imports **373 files**
without rewriting their bytes or modes, including the replication receipt.
The complete archive at `~/archive/libhft/quickfix-cpp-logon-20261011` retains
**375 named completed inputs** plus archive/import seals and replication proof.
Five archive-only files are the complete source tarball, two actual ELF
products and two staged payload ELF copies. Both hosts verify all 375 named
input bytes and modes. The archive seal SHA-256 is:

`4a4b04be852ec0f65750b5137b4f545a3884396bb2f1584dbdba0ba1e4a82a31`.

Readiness selects **775 source files** plus three templates, with zero scrub,
private placement, unresolved reference or dead-link findings. It still lists
66 files with 88 textual source-root escapes; this source inspection is not
complete dependency or release admission.
