# QuickFIX/n canonical original SDK body/parse fixture

## Scope and public API

The new separate `quickfix-n-canonical` consumer closes the cold fixture gap:
all four canonical flows use public QuickFIX/n field maps/groups, explicit
body order installed with public `FieldMap.CopyStateFrom`, original SDK
`ConstructString` framing/checksum and public `Message.FromString` with the
original FIX44 factory/dictionary. Owner folds and reactive side/quantity/
price derive from actual parsed public SDK values at every book depth.
Original SDK serialized body order is retained, without re-encoding the parsed
object. The shared generated canonical wire constants remain unchanged.

This is **cold SDK capability only**. It opens no sockets and does not implement
production Session Logon/sequence/callback handling, measurement clocks, bounded
transport capture or physical collection. It awards no Stage 3/4/5 or timing
grade and cannot replace a historical QuickFIX/n result. Actual LibHFT .NET
first-CPU report passes remain separate; their .NET 8 admission cannot be
borrowed by this .NET 10 peer. A production consumer and matched-runtime
qualification are the next required steps.

The canonical D omits FIX extras 21/60. The public dictionary map API removes
only their required flags if present: the actual original FIX44 XML already
makes 21 optional, so **only tag 60 is relaxed**. Every other header/body/group
validation remains active, including canonical required OrdType 40. No SDK,
message factory or dictionary XML source/binary is patched. No source or licensed
runtime is redistributed by this harness.

## Actual standalone qualification

Both hosts build the complete **915-file stripped harness** with no Git, engine
or private source tree. SDK 10.0.112 and installed runtime .NET 10.0.12 are used;
builds have zero warnings/errors, two MSBuild jobs and no build server/shared
compilation. HP holds high-priority `isol`; SCAN normal `isol`, after checking
slot/process and disk state. Outputs stay under the session build root.

Both use the existing immutable root-owned SDK artifacts. Actual loaded core,
FIX44 factory, dependency and dictionary hashes are bound to the original
provenance. The source checkout is unchanged and clean at the original upstream
pin. The new project references only those foreign SDK assemblies; no LibHFT
engine library or source is needed. It replaces only its inherited SDK source
guard with its actual SDK artifact guard, preserving all shared build-root and
microbench APIs. A deliberately absent library-source override still builds;
a separate missing-QuickFIX-runtime invocation fails with the correct artifact
error before compilation. Other projects retain their original SDK checks.

Each host produces **120 original SDK serialized frame vectors and four complete
12-cycle typed owner vectors**. Independent canonical body/value/order and owner
checks all pass. A separate original-wire pass checks every frame's exact ASCII
BodyLength, checksum, type, sender/target, sequence and original body bytes;
all 120 match the body vectors. Every depth-ten W has all twenty bid/ask entries;
one-level tick and reactive order/ACK semantics match the common reference.
No timing is inferred from cold process exits or these vector checks.

The operational v1 final receipt accidentally reused its `body` audit variable
while reading the vector lines, leaving a final body string in that receipt's
`body_vectors` field. The original passing logs/receipt remain unchanged. A
read-only finalizer re-reads the original vectors, SDK/driver hashes, success
and deliberate-failure exit receipts, reconstructs the complete audit object
and binds every original log/receipt hash. No build, SDK process, socket pair
or timing is repeated for that receipt correction.

## Immutable inputs and retention

- Harness source: `d9ef08f3d9ccb163290ab92f2b0517e85ee9f7c7`.
- Harness inventory SHA-256: `80b4d27efce4dadfbf050b15bbd227692cd7dabbcaac5a6586d2b38829b92a86`.
- Driver DLL, identical on both hosts: `37a6e4851f79cbeb19162242664571a8cfe3fbb13081531f3a5f756c478ca25d`.
- Original upstream source: `274b491d76f7755be85452dbefead08b2a6d62bd`.
- QuickFix.dll: `c5eb951904c4254f4292c7a9fc797d76c9c310294dd8896e753291a372a9b680`.
- QuickFix.FIX44.dll: `2075a0ac710cead239e357e7835ef3353c7ec12a3964e749143062b5edce20f0`.
- FIX44.xml: `a8111ec59d33053b45be975bbb7d6d1e9f2b6f4a160d832853fa0d8c627ea434`.
- Microsoft.Extensions.Logging.Abstractions.dll: `bb853130f5afaf335be7858d661f8212ec653835100f5a4e3aa2c66a4d4f685d`.
- Microsoft.Extensions.DependencyInjection.Abstractions.dll: `67fa4325000db017dc0c35829b416f024f042d24efb868bcf17a895ee6500a93`.
- provenance.json: `54ea06378f659e7e7ad53b3f270e3b6a4fb2bad7a866d6d8dfd4c5709ea9224a`.

All source bytes/modes, SDK inputs and original runtime identities remain
unchanged. Export closure/scrub findings are zero, without whole-harness release
admission. Both hosts retain:

- `~/.cache/libhft/fullbench-quickfix-n-canonical-fixture-20261017-v1`
- `~/build/codex-fullbench/libhft/quickfix-n-canonical-fixture-20261017-v1`

Only this summary enters Git/website records. Synthetic cold vectors/logs and
runtime products stay on the hosts; they are not transport evidence or compact
latency cells. A new production-session consumer must independently prove exact
Logons, real callbacks/admin, complete selected clocks, pre-warmup-only capture,
owner/counts, physical/rate/stability and matched-runtime fairness before any
current .NET peer comparison or release admission.
