# QuickFIX C++ required values and measured extraction

Recorded 2026-10-03; the HP run started at `2026-10-02T22:59:38Z`.
This advances step 2 of [PLAN_FULL_BENCH.md](PLAN_FULL_BENCH.md).
The retained QuickFIX C++ campaign grade remains diagnostic.

## Changes

The production QuickFIX C++ session adapter now uses the generated
`CanonicalWire.h` constants for symbol, bare sequence IDs, ACK identifiers,
varying order price/quantity and bid/ask price/size tables. MD and mixed flow
emit twenty entries; tick-to-trade emits two. Reactive orders select side
from the received marker and take price/quantity from that side's touch,
with the common lot/max clamp.

Required values come from checked QuickFIX field and repeating-group APIs.
Missing fields, invalid numbers, incomplete groups and mismatched ACK values
fail rather than acquire defaults. One full-book traversal folds all entries
and finds both touches. The owner sink uses the canonical ordered fold, with
its marker and accumulator reset after drained warmup on each measured run.
The result explicitly identifies the sink as the **last measured run**;
primary samples may still aggregate multiple runs. A new controller checks
every captured warmup/measured cycle and the independent owner sink/count.

Fresh results retain `comparison_fixture_aligned=false`. The native runner
now honours an explicit false declaration even if an older shape auditor
passes. Original fixed installers, installed binary hashes, capsules, raw
campaign results and coverage grades are unchanged.

## Frozen HP verification

| Input | Value |
|---|---|
| Devel source | `a65aa8ad579494afe04dbfb6e67dc153fbb59697` |
| Source fingerprint | `402b71542c54fa76291bb56fed718551683225dfea8140d26f44d9c704138765` |
| Outer controller SHA-256 | `a27a8d6e1ea1260bf65afd5a2e94e779a62916d499f59e475c394cd6742fcf98` |
| Managed QuickFIX checkout revision | `386ce46e917ae494ab6e90b1be90fd421cdbe3f9` |
| Prebuilt static SDK SHA-256 | `e8cbe41bb831bbe18cc6eb0ef1600f98c8f0dfca9e22f0b5448f2c3b58677309` |
| FIX44 dictionary SHA-256 | `a82655b54363aa9c6d1b2f21f294f1198c0d7125d7b44c26d93d3179f3358425` |
| Compiler | GCC 14.2.1, C++17, `-O2` |
| Host slot | high priority `isol`, CPUs 8–17; concurrent shared work allowed |

The SDK headers/static library were copied from SCAN's existing build next
to its clean managed checkout. The exact 735-file SDK copy and 210 source
files are sealed and unchanged after execution. The old SDK build does not
carry a build-to-source attestation: this check does **not** establish
standalone SDK provenance or public-release admission.

Both the SDK fixture test and the actual session driver compiled. The actual
SDK encode/decode/getter checks passed **48 four-flow wire cycles**, **12
independent sink vectors** at 12/20/100 iterations, **37 malformed-payload
rejections**, and both side-specific quantity-clamp boundaries.

All **15 actual localhost session pairs** passed: all four flows at warmup
0/3/17 and twelve measured cycles, plus two internal runs for the three
client-owned flows. All captured cycles and every owner fold count match the
independent shared model, with zero skips. These functional pairs offered
1,000 cycles/s and used a nonquiet lease; their latency numbers have no
report timing grade.

## Retained evidence and remaining work

Original host output is
`~/archive/libhft/quickfix-cpp-canonical-hp-20261002-a65aa8ad5794`; the build and
source/SDK capsules remain under this session's build root and cache. The
devel import preserves 116 files plus its import seal, including the host
controller, source/SDK manifests, queue wrapper/journal, compiler logs,
fixture vectors, complete bilateral captures, settings, process exits and
structured functional report:

- [Build report](evidence/quickfix-cpp-canonical-20261002/hp-a65aa8ad5794/build-report.json)
- [Functional report](evidence/quickfix-cpp-canonical-20261002/hp-a65aa8ad5794/functional/report.json)
- [SDK fixture vectors](evidence/quickfix-cpp-canonical-20261002/hp-a65aa8ad5794/functional/fixture-vectors.tsv)
- [Imported file seal](evidence/quickfix-cpp-canonical-20261002/hp-a65aa8ad5794/SHA256SUMS)

Full body byte/order alignment remains open, including SDK-required extra
fields. Fresh measured admin observations, full scheduler-delay series,
prepared-wire tick-boundary admission, server-owned tick raw output,
hash-pinned root deployment and physical/rate/stability runs remain required.
The required-value and owner-sink checks cannot substitute for those gates.

## Prepared tick clock and complete raw series

A separate frozen generation at
`5d3f03d491a26ecdd1955cef2d84102cf3dbcbfb` adds the public outgoing Log clock.
At the managed SDK revision, `Session::send(string)` invokes that callback
with the already serialized message immediately before
`Responder::send(string)`. The clock is armed for each server tick, ignores
incoming/non-tick traffic, and is reset after warmup. Actual server pairs
require the callback timestamp to fall inside the enclosing send invocation,
before the reaction's application callback. Its measured callback count must
equal the measured tick count.

All client-owned flows now retain both shared-runner raw series. The
server-owned tick writes its primary and scheduler-delay series too. Raw
write-open failures fail the arm. The functional controller requires exact
primary/delay counts, no dropped samples, correct raw labels, positive
primary values and no saturated 32-bit values; missing delay cannot borrow
complete primary samples or a matching owner sink.

| Input | Value |
|---|---|
| Second source fingerprint | `791e0b061c57cc9fc785249f5ad4d50bc1db36e0b8ebb4b9e06e408f2695e689` |
| Source/SDK files | 212 / 735, unchanged after execution |
| SDK fixture binary SHA-256 | `253b683dcf997d0c9610b75ca77e7398feb8a928666279e70047f92a5054aa2d` |
| Session binary SHA-256 | `65b7396d1f256d53c4914cf3093f54d3d2b949f33bed801118c37863303d3d8c` |

Both HP builds, all 48 SDK wire cycles, twelve independent owner vectors,
37 malformed-payload checks and all fifteen actual pairs pass again with
zero skips. The fixture binary additionally exercises the clock's unarmed,
incoming/non-tick, armed, disarmed and warmup-reset paths. This second check
again uses the high-priority `isol` lease with concurrent shared work allowed:
it has no report timing grade. The import preserves 131 original files plus
its seal; all fifteen imported pairs were independently regraded locally.

- [Second build report](evidence/quickfix-cpp-canonical-20261002/hp-5d3f03d491a2/build-report.json)
- [Second functional report](evidence/quickfix-cpp-canonical-20261002/hp-5d3f03d491a2/functional/report.json)
- [Second imported file seal](evidence/quickfix-cpp-canonical-20261002/hp-5d3f03d491a2/SHA256SUMS)

The portable [SDK functional guide](../../bench/docs/QUICKFIX_CPP.md) is selected
by the draft benchmark export. Its actual `--help` is exercised in a stripped
manifest archive without devel or `.git`. Complete current-generation raw
series and the tested prepared clock close the two corresponding functional
gaps above. Measured admin observations, full body byte/order alignment,
standalone SDK attestation, fixed root deployment and physical/report
rate/stability admission remain open. Neither retained generation is S5 pass.

## Actual measured admin callbacks and resend invalidation

The next frozen generation is
`23eaa5b255119c740cf5da1ee71cd535dea210ba`, source fingerprint
`795fa99e9a5acda24b03b72b0056e3431f3c3cd61f2c2015e03a3a87479d72c3`.
It consumes the [fresh source-built SDK](RECORD_2026-10-03_quickfix_cpp_source_sdk.md),
with all source/header/library/tool identities rechecked before both builds.
The new session binary SHA-256 is
`8b68e2bceb3cd57b6e022de2234a581fcbd17ce3c162f7113eec94413cc5f467`.

Production `Application::toAdmin` and `fromAdmin` callbacks now retain admin
events with direction, type, TestReqID and local monotonic timestamp. The
owner opens/closes each measured run through its measurement hooks. The
peer opens at its first measured application callback and closes after the
final response/reaction send. Journals retain all admin events, including
Logon/Logout outside those windows; counters cover all measured runs. These
local per-role windows do not imply synchronized clocks across machines.

Normal runs leave injection disabled. Diagnostic TestRequest pairs send
`QFCPP-PROBE` through the production Session and await the SDK's correlated
heartbeat. Both roles must observe the matching request/reply inside their
declared measurement windows. Negative ResendRequest pairs use that same
production path. Any measured `35=2` makes the corresponding arm fail with
`measured_resend_request`, while business samples and evidence stay retained.
The checker independently assigns event timestamps to windows and recounts
all directions/resends; good samples cannot hide absent or inconsistent
admin proof.

HP's high-priority `isol` check passes both builds, the unchanged 48 SDK
wire cycles/12 owner vectors/37 malformed-payload checks, and **23 actual
pairs**: 15 ordinary, four TestRequest/heartbeat and four expected ResendRequest
failures. Both roles reject the negative rows, and every pair retains its
complete business wire, sink, primary/delay raw and tick-clock evidence.
There are **zero skips**; all 215 frozen source files remain unchanged.
Actual controller start is `2026-10-02T23:53:17.177446Z`. This reservation
permits concurrent shared work and carries no report timing grade.

The first queue wrapper failed before acquiring a slot because the transient
unit's PATH lacked `host-cpu-slot`. Its wrapper and journal remain retained.
The corrected wrapper explicitly sets the session identity/PATH, checks
status/processes/memory, and wraps the foreground controller in the helper.
The source and SDK capsule were unchanged for this retry.

The import preserves **244 original successful-run files plus its seal**,
and both original queue-failure files plus their seal. All 23 imported
pairs were independently regraded locally:

- [Admin build result](evidence/quickfix-cpp-admin-20261003/hp-23eaa5b25511/build-report.json)
- [All 23 pair results](evidence/quickfix-cpp-admin-20261003/hp-23eaa5b25511/functional/report.json)
- [Bilateral measured heartbeat evidence](evidence/quickfix-cpp-admin-20261003/hp-23eaa5b25511/functional/nos_er-warm3-runs1-test_request/client-admin.json)
- [Actual received ResendRequest and SDK gap fill](evidence/quickfix-cpp-admin-20261003/hp-23eaa5b25511/functional/md-warm3-runs1-resend_request/server-admin.json)
- [Admin import seal](evidence/quickfix-cpp-admin-20261003/hp-23eaa5b25511/SHA256SUMS)

Measured admin observations now have actual functional evidence. Full body
byte/order alignment, public SDK/release admission, fixed root deployment
and physical/report rate/stability remain open. Fixture alignment and S5
pass remain false; no original installed payload or coverage grade changed.

## Production serialized wire capture

Frozen source `6f51590579cc0fa1edaba632322ecc3d58994720`, fingerprint
`e90b534a0f9a65bee6d5e973de5043f4c5b50b7032fbc8f400336186ee72d864`,
replaces application message re-encoding with the production `FIX::Log`
incoming/outgoing bytes. The checker requires complete bilateral byte
identity, actual SOH framing, exact BodyLength/CheckSum, unique session header
fields, correct sender/target roles and increasing per-sender sequence numbers.
It still checks every canonical required value and repeating-group entry.

Outgoing capture completes before the prepared tick timestamp. The C++
fixture verifies this callback order and that incoming capture cannot prepare
a send clock. Incoming capture adds work before application callback entry;
these captured pairs carry a functional grade only. Normal timing runs leave
capture disabled. Full body field/order admission remains separate, including
SDK-required fields absent from the minimal shared model.

HP started at `2026-10-03T00:41:56.340652Z` under a high-priority `isol` lease,
with concurrent shared work permitted. Both fresh benchmark builds pass using
the attested source-built SDK. The fixture passes 48 wire cycles, 12 owner
vectors and 37 malformed-payload checks. All 23 actual pairs pass again,
including measured heartbeat and expected resend invalidation, with **zero
skips**. All 216 frozen source files and the SDK sources remain unchanged.
The driver SHA-256 is
`d54646d60fcfaa972af2905e12250faea384de8a3715e262c195331c72a0eb20`;
the fixture binary SHA-256 is
`e704267efb6fb2a58e8e8a8806c47a71d24eaa44f544d3e4523dfcbf4a7c7f84`.

The import preserves 244 original files plus its seal. All 23 imported pairs
and the fixture vectors were independently regraded locally. Original output
is `~/archive/libhft/quickfix-cpp-raw-wire-hp-20261003-6f51590579cc`:

- [Production-wire build report](evidence/quickfix-cpp-raw-wire-20261003/hp-6f51590579cc/build-report.json)
- [All pair results](evidence/quickfix-cpp-raw-wire-20261003/hp-6f51590579cc/functional/report.json)
- [Actual client wire](evidence/quickfix-cpp-raw-wire-20261003/hp-6f51590579cc/functional/md_nos_er-warm3-runs2/client.fix)
- [Actual server wire](evidence/quickfix-cpp-raw-wire-20261003/hp-6f51590579cc/functional/md_nos_er-warm3-runs2/server.fix)
- [Production-wire import seal](evidence/quickfix-cpp-raw-wire-20261003/hp-6f51590579cc/SHA256SUMS)

No fixed root installation or physical/report rate/stability gate is promoted.
`comparison_fixture_aligned` and `stage5_pass` remain false.

## Canonical body order and remaining OrdType gap

Frozen source `9062e112922c976f9822e78db2b34a167d2ddd51`, fingerprint
`4e7a85932cf9aba9872748936956acb4fe81d19318ca718cb357ac970e060e21`,
uses QuickFIX's public `Message`/`message_order` APIs for the minimal contract's
pinned body order. HandlInst (21) and MDUpdateType (265) are optional in the
pinned stock FIX 4.4 dictionary and are omitted. OrdType (40) stays present
because that dictionary requires it; dictionary/session validation is retained.
The shared full-session model and all Stage 2 inputs remain unchanged.

A new body diagnostic compares every captured application message's complete
ordered body with the independent minimal model, excluding only declared
session/time fields. Mixed-flow ER values come from the derived order; all
repeating-group fields remain in the comparison. The report records counts,
extra/missing tags, value/order differences and the first mismatch per type.
Required-value success cannot conceal a failed strict body comparison.

HP started at `2026-10-03T00:56:31.479249Z`, using high-priority `isol` with
concurrent shared work permitted. Both SDK-linked builds pass, as do all
48 SDK cycles, 12 independent owner vectors, 37 malformed-payload probes and
23 actual production-session pairs, with **zero skips**. All 216 frozen source
files and SDK inputs stay unchanged. The adapter SHA-256 is
`dffbdf85ef1a8b431d1c1fe3dec5d9d3acfa81c44f43a0c0a7e6fa76e19dd09a`;
the fixture binary is
`9b05bb7e80e63c8a7cc6ceea52837299d00c750043d3fc7d841d8bedce532ee8`.

Every production `V`, `W` and `8` body now matches the minimal model exactly.
Every `D` has correct pinned values/order, with **only extra tag 40** remaining.
Across all 23 pairs there are no missing tags, value mismatches or pinned-order
mismatches. This closes the earlier ordering and optional-field differences;
full fixture alignment remains false because the required OrdType gap is open.
No retained latency has a report timing grade.

The import keeps 244 original files plus a seal; every pair and fixture vector
was independently regraded locally, including the strict per-type differences.
Original output is
`~/archive/libhft/quickfix-cpp-body-order-hp-20261003-9062e112922c`:

- [Body-order build report](evidence/quickfix-cpp-body-order-20261003/hp-9062e112922c/build-report.json)
- [Per-pair body comparisons](evidence/quickfix-cpp-body-order-20261003/hp-9062e112922c/functional/report.json)
- [Body-order import seal](evidence/quickfix-cpp-body-order-20261003/hp-9062e112922c/SHA256SUMS)

Root deployment, physical proof and report rate/stability gates remain open.
