# FIX Antenna .NET: original prepared-message API and complete callback clocks

## Outcome

Both hosts pass 23 fresh finite original-SDK Session pairs, independent bounded
collection/replay and all 207 alterations of actual output copies. Each retains
696 transmitted application frames, 696 original prepared-message snapshots,
4,716 consumed clock events and 276 exact primary samples. Administration totals
233 frames on HP and 230 on SCAN; HP includes three bounded startup Heartbeats. The four canonical flows and changed-symbol/touch mixed/tick controls
retain exact bytes, complete typed owners and original administration.
No performance or Stage 5 admission is granted, and zero cells are exported.

Each flow has no-probe, construction, serialization, extraction and
after-completion cases; tick has one additional prepared-send probe. The two
changed-book controls have no probe. Every deliberate pause lasts at least two
milliseconds. Independent replay checks actual placement and exact sample
arithmetic, not a relative timing threshold between separate runs.

## Clock boundaries and original SDK behavior

The producer calls original public `IFixSession.PrepareMessage` using the fresh
SDK message whose price fields were converted by the separately qualified
fixed-scale helper. Before the send clock it retains the original prepared
buffer. All application bytes match the actual complete wire body exactly.
The SDK's original five-character sequence reservation is admitted only by the
explicit prepared-message reader; the earlier normal Session reader keeps its
strict default. Administration still uses original normal Session generation.

This API prepares application bytes and reserves the envelope. Actual snapshots
show sequence, SendingTime and CheckSum still blank before public
`SendMessage`. The SDK fills them inside that synchronous send. That work stays
inside the measured span and is declared explicitly. This is not evidence of
an exact completed-wire transport-entry timestamp. No internal property,
reflection, transport replacement, SDK source patch or SDK rebuild is used.
`OnMessageSent` is after the TCP write and supplies capture only; it never
supplies tick t0.

For request/reply and mixed, the primary begins at actual task entry before
construction and finishes after all final reply extraction. Tick begins after
original prepared application serialization, immediately before public send,
and finishes at application callback entry before reaction extraction. Tick
owner extraction remains mandatory even though its work is after the latency
stop. A post-completion probe cannot inflate the primary. Original monotonic
Stopwatch frequency is 1,000,000,000 on each host; integer clock differences
must exactly reproduce every retained nanosecond sample.

Construction and serialization probes remain inside complete RTT; tick excludes
them through its later start. Extraction belongs inside request/reply RTT and
outside the tick stop. The prepared-send pause belongs inside tick. Both hosts
prove these boundaries through recorded events and all twelve samples per pair.
These diagnostic values are not published benchmark latency numbers.

## Inputs, failures and verification

All seventeen qualified SDK/package files and the immutable predecessor DLL
remain unchanged before/after. Original core SHA-256 remains
`11b2934a4dd07106292f6d67bf37b65151540efb5e5d2cb0c36bc228d0279f40`;
the fixed-scale predecessor remains
`f027e4aea85438d57ca1e7080444254f94d5f80cea2cfe69bff2191344c9ad20`.
Each job verifies its separately qualified original Session parent. Only the
new clock producer is compiled; neither SDK nor predecessor is rebuilt.
Actual loaded SDK/helper paths and hashes bind to the qualified outputs.

The source gate passes 111 tests without selected skips. Each native matrix
then passes 207 alterations of actual copied output: wrong primary,
missing/duplicate clocks, missing/malformed prepared frames, false post-write
clock or envelope claims, incorrect owner and truncated receive capture.
Independent collections execute once per host and reproduce original proofs.

The first staging generation stops locally before any native launch because a
Path was passed to a byte-hash helper. The second compiles but rejects access
to the SDK's internal prepared flag; no Session pair starts. Both failures stay
retained. The third removes that unnecessary access and uses only public API;
it compiles without warnings/errors. SCAN completes all pairs. HP completes
four pairs before its reader refuses one original empty Heartbeat immediately
after Logon, before probes/application. A new reader allows at most one such
frame per role strictly before its startup TestRequest, preserving exact counts,
sequences and bilateral bytes. Duplicate or application-window empty Heartbeats
still refuse. Its original failure remains retained; a sealed continuation
replays the four captures and executes only the nineteen unrun cases using the
same producer DLL, without compilation. Every original prefix file is hashed
before and after. Actual administration counts are retained below. No failed bundle
is overwritten, and no completed native pair is repeated for a reader change.

Jobs run as UID/GID 1000 under functional isolated CPU leases after slot,
process and memory preflight. HP queues at high priority; SCAN uses normal
priority and permits shared work. Builds use one MSBuild worker, disable build
servers and shared compilation, and write only under the session build root.
Both successful units exit zero with no main process remaining. Independent
replays use the BEELINK2 shared lease. Frozen roots, SDK/previous producers,
root helpers, sudo and existing results remain unchanged.

This closes the finite public-API clock investigation. Shared harness phases,
pacing/delay series, deployable runtime and fresh physical report admission
remain separate. The SDK envelope boundary is explicit and cannot silently
be promoted to completed-wire evidence. The .NET matched comparison and full
plan remain incomplete. Website delivery keeps compact summaries without
full per-result CDFs; no live OVH upload is attempted.

## Pins and receipts

Original producer/native source: `096fdc0117b3cfc1308151fb5c67ac5e6a6fcfb7`.
HP continuation worker source and per-host receipts are bound below.
Native outputs: `~/build/codex-fullbench/libhft/fixantenna-clocks-qualification-20261026-v3`.
Independent collections: `~/build/codex-fullbench/libhft/fixantenna-clocks-review-20261026-v3/{hp,scan}`.

| Host / receipt | Value or SHA-256 |
| --- | --- |
| HP administration frames | 233 |
| HP worker source | `626fa5c319609e6dfc60a597d8623d3a29aa5637` |
| HP native-receipt.json | `fc037dfff3833fdb752e46a84c970704d91f501a57dd74c0428fa6dff1088bea` |
| HP cold-review.json | `bf87fc94ade39f3a3d85e4e4f9abc983b36ba6c627c1a5e0f62a3669e6839a05` |
| HP reader-controls.json | `247eb436029b1bf804550b9bdfa32f219ea8f95c93b2467c733cf2ec0f1a75df` |
| SCAN administration frames | 230 |
| SCAN worker source | `096fdc0117b3cfc1308151fb5c67ac5e6a6fcfb7` |
| SCAN native-receipt.json | `fdd4579ddff2e68f5952f67b28741b92cf6991ee7bbfeee920e50d1b70940427` |
| SCAN cold-review.json | `6e5b41b1a264050d98980b488afe53068806f1895e0ce690da78a8aa0ffd4d03` |
| SCAN reader-controls.json | `247eb436029b1bf804550b9bdfa32f219ea8f95c93b2467c733cf2ec0f1a75df` |

| Producer | Bytes | SHA-256 |
| --- | ---: | --- |
| HP | 44,032 | `9c7268b237ca99755f04fb4086e4a2409ce2ab76cafebf0095e7fb8f79ed0a47` |
| SCAN | 44,032 | `9c7268b237ca99755f04fb4086e4a2409ce2ab76cafebf0095e7fb8f79ed0a47` |
