# FIX8 original writer and fixed-scale field capability — 2026-10-23

Both hosts qualify a separately declared `fix8+generated-canonical+typed-fixed-scale-fields`
message configuration. Its 360 original SDK writer/parser/clone vectors match
all four canonical bodies exactly. Another 360 vectors preserve the unextended
numeric field behavior: all values and group associations agree, but 282 frames
trim fractional zeroes and therefore miss this campaign's byte contract.
SCAN finishes the same native/cold checks on 2026-10-24, after its queued lease becomes available.
This checkpoint admits message capability only; production Session, causal
owner, clock, timing, physical DAC and matched-comparison gates remain open.

## Original SDK and generated dictionary

The selected upstream source is FIX8
`fd6a550685ed9addbdccb27e605eb11e5ff949e0`. The upstream archive SHA-256 is
`7171e193f73107f9b5b9f552f4501489021fadc5eab58d42d13dfeddf842ab61`.
All 302 original source files have canonical content-inventory SHA-256
`68165546748b4d661e7bc9321520512c375332a285c5088de4845aeb9554d9cf`.
The workers verify source bytes and preserve the source and SDK inventories.

HP materializes the prior source-pinned SDK into its own new build root from
`hp-generations.tar.gz` (SHA-256
`f854877493e909e3f262d7d439e0d04b3f4be11643b9c045d7be30cc08bb0b4d`).
It verifies all 714 prior SDK artifact entries against the original preparation
receipt (`ef315b364fb83d19398c33c86e4b712a2a7a6aa35bcc1f3b8948275c0ba2a793`),
all source identities, aliases and the final receipt itself. The 715 materialized
paths are unchanged after qualification. These are the original SDK artifacts,
including the previously recorded terminal compatibility patch and notices.
The existing archive and shared SDK installations stay untouched.

The new minimal FIX4.4 dictionary declares the canonical D/8/V/W body order,
all three repeating-group shapes and the original standard PRICE/QTY types.
It also includes the standard admin messages needed by a later Session driver.
This gate exercises only the standalone message APIs. Its schema SHA-256 is
`6e0c22c4001a0b59b52cb4da987ad3af45e41da3d3d84b628c962c8e335e1fe8`.
Public `f8c` generates six sources/headers in a new output directory; the worker
checks their existence in addition to the compiler exit status.

## Numeric wire difference and public extension

Original SDK `Field<double, tag>::set_precision(5)` specifies a maximum
precision. Its `modp_dtoa` removes trailing fractional zeroes, retaining one
fractional digit. For example, the original output is `44=10000.0` where the
canonical frame requires `44=10000.00000`. The first native generation exposes
that difference and the initial strict cold reader refuses admission.

The new application field subclass uses FIX8's public virtual `print(char*)`
and `copy()` APIs. It delegates digit generation and rounding to the original
SDK numeric formatter, then pads the field's fractional part to five digits.
The SDK still constructs and serializes the complete message, assigns schema
order and framing, and parses the actual serialized output. Standard typed
numeric getters supply every extracted price and quantity. Reversed insertion
and public `Message::clone()` exercise the extension and repeating groups.
The configuration retains the original SDK arithmetic and its source bytes.

Each of the 120 independent cases has six variants: original forward/reverse/
copy and fixed-scale forward/reverse/copy. D and ER values vary through all six
quantity/price table positions; MD/mixed traverse twenty entries, tick traverses
two. The independent cold reader checks every actual field, group association,
exact body order, header, BodyLength, CheckSum and typed parsed value. Original
format differences remain explicit and cannot borrow fixed-scale admission.

## Native and independent qualification

| Host | Source / generation | Native writer/parser | Cold controls | Status |
|---|---|---|---|---|
| HP | `dde4c6a3b52a8e82699c6fcb5500a38c32d807a5`, v2 | 720 vectors; 360 fixed-scale canonical, 282 original-format differences; 15 actual malformed-input refusals | 36 altered-evidence refusals | fixed-scale message capability passes |
| SCAN | `dac3d42054cb145f4bf2b86ce52f0e56a6603b28`, v3 | 720 vectors; 360 fixed-scale canonical, 282 original-format differences; 15 actual malformed-input refusals | 36 altered-evidence refusals | fixed-scale message capability passes |

HP uses GCC 14.2.1 under a high-priority `isol` lease, inherited CPUs 8–17;
no timing grade is inferred from those functional runs. The SDK compiler,
loaded libraries, actual executable and generated-source hashes are retained.
Its executable SHA-256 is
`cd43606e8f4e3fa0c115d480f2bc70a825a33dc99f9873470f0ceedb6270cf2f`;
native receipt SHA-256 is
`83710ac46abd155d5f162d715a0ccfe31f13dba35c6911b69af51f9cd656c79a`;
bounded review-index SHA-256 is
`709b2662743794f356816f4118e6357fa84a232a6fb5d7b5c945c162235281e2`.
The cold reader/control source is pinned by `dac3d42054`.
The control receipt SHA-256 is
`15692e997208cff57728ecacad35e8cd26eb33e944e050826fc921c14d584650`.

SCAN uses the same compiler and its normal shared lease, CPUs 0–9. All
707 selected SDK paths remain unchanged; the original 302 source files and
public fixture/dictionary match HP. Its executable SHA-256 is
`9d8973795b5479abc99989fe9486a90c8d373c362d618c1817102a0a1d5fc69e`,
native receipt SHA-256 is
`4d9c8b3c8806c4b300761c044a0924355fbde98e16de6cb9dcda097f959cd3d7`,
and review-index SHA-256 is
`6638cb16a5650c267e0641f43c55a8f91e0a8248d2b92c4300d7cf1b740ec845`.
Its cold-control receipt SHA-256 is
`b48d4247f1891196c5aadfb89fc4490c7f74b199449a757ea1fa6f05609e0050`.
Both host services finish with exit status zero and MainPID zero. The independent
reader confirms the complete native inventories and all fifteen input refusals,
then refuses 36 separately rehashed evidence corruptions on each host.

Controls alter and rehash actual native output. They cover well-framed wrong
prices, trimmed fixed-scale prices, duplicate/missing vectors,
compiler/CPU/source claims, both SDK byte maps, generated source, executable,
loader selection and false Session/timing/export claims. A source suite passes
34 focused FIX8 tests and five subtests, zero selected skips. It includes the
unchanged Stage2 codec/preparation checks.

## Retention and pending work

HP keeps both native generations in
`~/build/codex-fullbench/libhft/fix8-writer-qualification-20261023-v{1,2}` and
sealed inputs in `~/.cache/libhft/fullbench-fix8-writer-20261023-v{1,2}`.
The first SDK binary/output and initial refusal remain separate from v2.
The bounded local review is under the same session's build root.

The obsolete SCAN v1 service was stopped while queued, before a build root
existed. SCAN v2 staging refused the old prefix's absolute `usr/bin` build-tool
aliases before launching a worker. V3 selects its SDK input closure while
excluding that unrelated portable build-tool subtree; it pins the selected
SDK inventory before queuing. No SDK/cache file or system tool is modified.
Its capsule and foreground user service are
`fullbench-fix8-writer-20261023-v3` and
`codex-fullbench-fix8-writer-20261023-v3.service`. It completes under a normal shared
lease on CPUs 0–9. Its source and public dictionary/fixture remain sealed.

Next: implement and qualify the real original SDK Session's four causal
workflows and owner sinks. The legacy TCP
shim's historical Stage3/Stage5 results remain separate. This investigation
exports zero result cells and changes no latency ranking, report-grade pass,
10,000/s offered load, existing benchmark result or website CDF policy.

The subsequent [original Session checkpoint](RECORD_2026-10-24_fix8_original_session.md)
records its separate two-host production Session and owner qualification.
