# FIX Antenna .NET: original numeric fields and fixed-scale writer capability

## Outcome

Both hosts pass the original public FixMessage writer/clone/parser matrix at
the roster source pin `ff38f51129fd9555bf8a992245dc9fb9d6e89be8`. Each native
run and independent local replay checks 720 vectors and 7,200 actual numeric
getter reads. The optional public fixed-scale helper produces all 360 exact
canonical bodies, including indexed reverse insertion and original SDK cloning.
The original formatter retains 282 body spelling differences across its three
modes. This is a capability result, with zero Session, clock or timing admission
and zero new benchmark cells.

| Configuration | Forward | Reverse indexed insertion | SDK deep clone |
| --- | ---: | ---: | ---: |
| Original SDK numeric formatting | 26/120 exact | 26/120 exact | 26/120 exact |
| Original numeric conversion plus fraction-zero padding | 120/120 exact | 120/120 exact | 120/120 exact |

All original outputs preserve required values and field/group order. The
original SDK's precision argument is a maximum: a price such as `10000.00000`
becomes `10000`. The new opt-in `FixAntennaFixedScale` first calls the original
public double/precision field setter, reads that field's SDK-converted bytes,
then appends only missing fractional zeros through the public field update API.
This occurs before SDK field serialization, with no whole-frame rewrite,
precomputed numeric text, private reflection, SDK source patch or SDK rebuild.
The raw formatter remains available as its own visible control configuration.

The fixture covers all four canonical flows and all twelve markers, the full
twenty-entry MD book, repeating-group order, derived mixed/tick orders, varying
quantity/price widths and original acknowledgement fields. Integers use public
long field setters; prices use the SDK double conversion before optional
padding. `RawFixUtil.GetFixMessage` reparses each actual frame; original SDK
long/decimal getters reconstruct every numeric value. Framing in this fixture
is explicit adapter evidence, not a production Session serializer qualification.

## Unchanged inputs and process authority

All 2,528 source files in the existing SCAN Stage 2 source were checked against
the roster commit's Git archive before sealing the inputs. Each qualification
also verifies that entire source archive unchanged before and after. The 17
existing SDK/package assembly and metadata files are copied byte-for-byte as
immutable inputs for both hosts; the SDK is never rebuilt. The original
observer-overlay DLLs and all previous native/timing outputs remain separate.

The SDK core assembly SHA-256 is
`11b2934a4dd07106292f6d67bf37b65151540efb5e5d2cb0c36bc228d0279f40`.
Both newly compiled fixture assemblies are 22,528 bytes and share SHA-256
`f027e4aea85438d57ca1e7080444254f94d5f80cea2cfe69bff2191344c9ad20`.
Actual loaded SDK assembly paths and hashes bind to the qualified copies.
Compiler/runtime information and complete source, SDK and artifact inventories
are retained. Neither original reference checkout nor a main checkout is built.

Both workers run as UID/GID 1000 under functional isolated CPU leases after
slot/process/memory preflight. HP requests high priority and waits for the
other session's host reservation; SCAN runs at normal priority with concurrent
shared work permitted. Builds use one MSBuild worker and disable build servers
and shared compilation. Both services exit zero with no remaining main process.

Fifteen malformed actual inputs refuse per host. Twenty-two altered actual
outputs also refuse: missing/duplicate vectors, wrong markers/modes, malformed
hex, missing or incorrect numeric reads, validly reframed symbol/quantity/price/
scale/order/group changes, and borrowed/changed/duplicate loaded SDK identities.
The reader's focused source suite passes thirteen tests. Collections execute
once per host and independently agree with both original native proofs; no
unchanged matrix is rerun. No frozen Stage 2, Java/SBE, manifest, root helper,
sudo registration, SDK or existing result is edited.

This closes the scoped writer capability gate for the declared extension.
Original production Session, administration, complete RTT/prepared tick clocks,
shared warmup/pacing, runtime and fresh physical report gates remain separate.
The full plan and .NET matched comparison remain incomplete. Website delivery
retains summaries without full per-result CDFs; no live OVH upload is attempted.

## Pins and receipts

Source/worker pin: `be7ff072c42f8b867cc45914e68be37be31da86f`.
Native output: `~/build/codex-fullbench/libhft/fixantenna-writer-qualification-20261026-v1`.
Independent collection: `~/build/codex-fullbench/libhft/fixantenna-writer-review-20261026-v1/{hp,scan}`.

| Host / receipt | SHA-256 |
| --- | --- |
| HP native-receipt.json | `00409b4a6e15fb7f022e76fec53865e52fa47234f99e363ca6e771fcc5cfbccd` |
| HP cold-review.json | `4c69cc69062f5fb0a026e69cc4d5f0144d8fb4c4c30fa05f2f21bf9a0f5727cb` |
| SCAN native-receipt.json | `586bb1e021aa3e67ac9a952c475ca060868c10e8f3f6ef59501235234d58b7fb` |
| SCAN cold-review.json | `8cc3d124e619ec7fcb5fa77cb5dec1348d6dd5ac1797a4d08310abeeec7c76b2` |
