# Stage 2 — converted-value field parity replacement

Status: **complete and qualified: 25 adapters, 320 probes, 554 operation rows**.
The historical parse columns do not establish comparable field work. This
campaign replaces them using the
[converted-values-v2 contract](PLAN_MICROBENCH.md#checked-field-work-converted-values-v2).
The [portable method](../../bench/docs/MICROBENCH.md) describes the operation
boundaries and interpretation of batch-average percentiles.

## Work contract and roster

D and 8 check all nine and twelve application fields respectively, through
the selected engine's public parser and field API. Both `parse_only` and
`parse_extract` perform that same D/8 work. W light checks symbol, count and
the first bid/offer prices; W full checks request ID, symbol, count and all
twenty entries in order. The independent oracle hashes typed converted values,
including scale-five prices. Every supported operation has isolated text and
numeric stale-oracle probes; a probe must report its selected operation,
positive errors and exit 3.

The default roster has 25 adapters. Falcon supports D/8 only. Llfix supports
three builds and has no public receive parser; its
[encoder admission](RECORD_2026-10-02_stage2-llfix.md) is separate from timing
qualification. The expected whole-roster gates are 25 successful normal runs,
320 passing probes and 554 operation rows. The extra administrative and
legacy/cursor rows remain separately identified.

## First native diagnostic and corrections

The clean preparation at `a6f8121cde8a73b3c2a8808327d0eafb1266eb17`
compiled 24 normal adapters and 308 probes. Fix8's generated quantity and price
fields were still strings, so its new numeric getter calls did not compile.
Its benchmark dictionary now uses numeric SDK types and explicit output
precision, with actual encoder-output validation before timing.

The compiled subset's 100-sample, 10-invocation warmup check finished at
`2026-10-02T21:44:51Z` with exit 1: 22 normal runs passed, two failed;
240 probes passed, eight failed and 60 were not run. It produced 429 successful
normal summary rows. These results are diagnostic and establish no ranking.
The [build/run matrix](evidence/stage2-converted-values-v2-scan-20261002/diagnostic-a6f8121cd/stage2_build_matrix.csv)
and [probe verdicts](evidence/stage2-converted-values-v2-scan-20261002/diagnostic-a6f8121cd/stage2_parity_audit.csv)
preserve the failures.

Isolated operation checks and SDK inspection identified three further issues:

- Libhft's legacy extraction required a field oracle on eight administrative
  fixtures that have none. Oracle enforcement remains strict for D/8/W;
  administrative operations retain their diagnostic sink.
- NexusFIX delegated D/8 parsing to extraction before reaching the new complete
  hash. The actual extraction path now checks every contracted field; the
  unreachable duplicate code was removed.
- Ferrumfix's public decoder retains repeating-group context across calls.
  The first W also assigns trailing custom oracle tags to the last group
  entry. Each invocation now creates a fresh decoder from the cached immutable
  public dictionary and reads those tags through the public group API.
  Decoder construction remains inside timing; the SDK is unchanged.

The [operation failure isolation](evidence/stage2-converted-values-v2-scan-20261002/diagnostic-a6f8121cd/normal-failure-isolation.json)
retains the actual filtered-run failures. All original prepared runtimes and
generated sources, compile/run/probe logs, partial results and workflows are
sealed on scan and locally under
`~/archive/libhft/codex-microbench-fields-20261002/runtime-diagnostic-a6f8121cd`.
The [archive receipt](evidence/stage2-converted-values-v2-scan-20261002/diagnostic-a6f8121cd/archive-seal.json)
records 482 verified runtime paths and 4,857 verified files. The original
manifest and seals remain unchanged.

Private source refs retain both checkpoints:
`archive/stage2-converted-values-diagnostic-a6f8121cd` and
`archive/stage2-converted-values-4375a8fe0`.

## Frozen retry and timing gates

The retry started on scan at `2026-10-02T22:17:17Z`, at clean source
`4375a8fe04c0b7490a61413062d9b56868b13381`. The four repaired native adapters
passed normal execution, then all 84 isolated probes and 150 operation rows
passed at 100 measured samples and 10 warmup invocations. The
[focused gate](evidence/stage2-converted-values-v2-scan-20261002/focused-native-4375a8fe0/)
retains every verdict and its complete clock contract. The focused runtime
capsule is sealed on scan and locally at
`~/archive/libhft/codex-microbench-fields-20261002/focused-native-runtime-4375a8fe0`:
101 verified runtime paths and 460 verified files.

The workflow then rebuilt development Java/JNI and .NET native bindings and
prepared the default 25 adapters and 320 probes. The whole-roster gate ran from
`2026-10-02T23:03:55Z` to `2026-10-02T23:04:28Z` and passed **25/25 normal runs,
320/320 isolated probes and 554 operation rows**, at 100 measured samples and
10 warmup invocations. The clock contract is complete. Llfix supplies exactly
the three build operations and no parse probe; Falcon supplies eight probes.
Every compile/run/probe verdict and the original summary are in the
[whole-roster evidence](evidence/stage2-converted-values-v2-scan-20261002/whole-roster-4375a8fe0/).
All compile/run/probe logs remain in the session archive. This smoke establishes
field-work parity and supplies no timing qualification.

The clean preparation seals 508 runtime paths. Its manifest SHA-256 is
`8ec4385339f7e90a68b631c6155b725321f92a0e68fd20a0f8e592e417c2e1f2`.
The final timing workflow was queued at `2026-10-02T23:04:44Z`, retaining the
same worktree, workspace, SDKs and prepared artifacts. Its final step seals the
complete runtime/source/evidence capsule after monitoring ends and before
releasing the exclusive CPU lease. Generated Rust manifests/locks, C# project
files and Go module/sum files are included by the updated archive tool.

The preceding capsules keep their original seals. Supplemental retained project
inputs are separately sealed on scan and locally in
`diagnostic-project-inputs-a6f8121cd` (296 files) and
`focused-project-inputs-4375a8fe0` (26 files), under the same session archive.

Final timing follows the successful 25/320/554 functional gate, uses the
same prepared source and runtime seals, and acquires `host-cpu-slot` with
`--pool isol-no-shared`. The intended settings are 50,000 measured batch
samples, 5,000 untimed warmup invocations, adapter CPUs `18,19` and launcher
CPUs `0-9`. A passing immediate 120-second preflight, complete clock contract,
continuous process monitor and explicit ownership review are required.
Any competing observed sample at or above 5% CPU invalidates that selected
adapter window. A replacement window must use the same prepared manifest.

The later documentation and private-main integration commits are separate
from this frozen preparation pin. No build, archive CLI startup check or
historical timing pass qualifies the replacement ranking. A new matrix will
be published only after the actual functional and timing gates pass.

## Quiet-host attempts

The first final-timing lease started at `2026-10-02T23:34:52Z`. All three
120-second preflights rejected another process above 5% CPU, so this attempt
produced no timing results and released its lease at `2026-10-02T23:40:52Z`.
The [original failed preflights](evidence/stage2-converted-values-v2-scan-20261002/quiet-preflights/)
retain the observed processes, source checks and unchanged manifest hash.
No other session's process was stopped or changed.

The same frozen preparation was queued again, as segment `full2`, at
`2026-10-02T23:41:45Z`, behind the waiting Onload trial. It requires a fresh
passing preflight and the same monitoring and ownership-review gates.


## Whole-roster timing and ownership review

Segment `full2` passed its third 120-second preflight after acquiring both
CPU pools at `2026-10-02T23:46:45Z`. The timed run covered
`2026-10-02T23:52:56Z` to `2026-10-03T00:56:36Z`, at 50,000 measured
32-operation batch samples and 5,000 untimed warmup invocations. All 25 normal
runs, 320 isolated probes and 554 operation rows passed; the clock contract
is complete. The workflow finished and released the lease at
`2026-10-03T00:57:09Z` after sealing its runtime archive.

The [unaltered timing and ownership evidence](evidence/stage2-converted-values-v2-scan-20261002/timing-full2-4375a8fe0/)
retains all CSVs, conditions, preflight, process identities, raw five-second
monitor (deterministically compressed), all 1,561 threshold observations and
the explicit review. Campaign actor ownership uses captured PID start ticks,
exact sealed launcher commands and engine/CSV/sample arguments; adjacent
adapter samples remain in the review. One external sample fails the hffix
window: `dnf`, PID 3570251, 8.8% CPU in the interval ending
`2026-10-02T23:55:36Z`. The other 24 adapter windows have zero external samples.
No ranking is published from the rejected hffix window.

A same-manifest hffix-only replacement, `repair1`, was queued at
`2026-10-03T01:03:44Z`. It uses the original prepared runtime and requires its
own fresh preflight, monitoring and ownership review.

The full runtime capsule is retained on scan and locally at
`~/archive/libhft/codex-microbench-fields-20261002/converted-values-v2-runtime-4375a8fe04c0b7490a61413062d9b56868b13381-full2`.
All 508 runtime paths and 5,064 sealed files were verified again locally.
The frozen archive hook omitted generated Go source files; its original seal
is preserved. A [separately sealed supplement](evidence/stage2-converted-values-v2-scan-20261002/generated-go-inputs-4375a8fe0/)
retains the actual normal Go source and all twelve probe sources, verifies
their bytes against the frozen runner's renderer, and records the original
paths and modification times. Its 15 sealed files were verified on scan and
locally before any workspace cleanup.


## NexusFIX SDK provenance and rejected repair preflights

The actual NexusFIX compile log points at the source symlink under the frozen
workspace, resolving to `~/.cache/libhft/stage2-sources/nexusfix`. This unpacked
SDK has no Git receipt. A retrospective read-only check verifies every one of
its 91 include files against Git blobs at
`ffa8b0a014b5cb4020ec8a99fe22fa3a24bfc494`, from the clean managed
`~/.cache/libhft/nexusfix-ffa8b0a` checkout. The
[header fingerprints and archived ELF comment](evidence/stage2-converted-values-v2-scan-20261002/nexusfix-sdk-provenance/)
retain that check. The archived binary confirms Clang 21.1.8; the compile log
uses `/usr/bin/clang++`, C++23, and the frozen repository's `native/compat`
include before the SDK include. Its current Clang configuration selects GCC
toolset 15; stock GCC 11.5.0 lacks the required C++23 support. No SDK header
was patched. The 4375 whole-roster preparation was on scan, with no corresponding
NexusFIX preparation claimed on HP.

The hffix `repair1` lease ran from `2026-10-03T02:17:37Z` to
`2026-10-03T02:23:37Z`. All three 120-second preflights rejected competing
activity and produced no repair timings. The final preflight observed editor
and agent CPU bursts, including VS Code peaks of 69.8% and 59.1%. The
[original rejected preflights and state](evidence/stage2-converted-values-v2-scan-20261002/repair1-preflights/)
preserve those observations and the unchanged manifest hash. The same-manifest
hffix-only `repair2` was queued at `2026-10-03T02:25:55Z`, behind the Onload
`mlxcap4` trial. The frozen source and runtimes remain intact.

## Qualified scan ranking

The same-manifest `repair2` hffix run covered
`2026-10-03T02:56:47Z` to `2026-10-03T02:58:33Z`.
Its first two preflights rejected residual load and competing CPU activity;
the third fresh 120-second preflight passed. Normal execution and all twelve
isolated field probes passed, and its clock contract is complete. The
retained [repair evidence](evidence/stage2-converted-values-v2-scan-20261002/repair2-4375a8fe0/)
includes all three preflights and the process identities. All 41 threshold
observations belong to the exact campaign monitor, launcher or hffix command;
there is no external sample at or above 5% CPU in the replacement window.
The workflow released its lease at `2026-10-03T02:59:05Z` after sealing the
full runtime archive. It
verified all 508 runtime paths and 5,070 sealed files;
its original seal and prepared manifest remain unchanged.

The [primary scan matrix](microbench-matrix-scan.html) and
[dated 25-adapter matrix](microbench-matrix-scan-25-20261003.html) select all hffix rows from
`repair2` and all other rows from `full2`. The original contaminated
hffix timing remains retained and excluded. All selected raw per-engine CSV
values match the merged summary; no timing value was recomputed or edited.
The [qualified evidence](evidence/stage2-converted-values-v2-scan-20261002/qualified/)
retains the selection, all 25 normal verdicts, 320 passing isolated probes,
554 operation rows, complete clocks, preflights, every threshold observation,
explicit ownership review, qualifier/publisher receipts and actual reporting
source bytes. Process monitors are losslessly compressed with original-byte
SHA-256 receipts. Complete source/runtime capsules remain on scan and locally
under the campaign archive.

The measured source stays at
`4375a8fe04c0b7490a61413062d9b56868b13381`. Later reporting source is recorded
separately: only the runner's `write_report` and `write_html_report` functions
differ in its AST. Qualification verifies the original manifest, clock,
CPU affinity, sample settings, raw CSVs and ownership evidence before publishing.

Publication verification passed 21 focused qualifier, prepared-campaign,
report and archive tests with zero skips, plus the roster drift check
(35 engines, 34 with four-flow evidence, 25 Stage-2 adapters). All 129 retained
qualification/repair files and four decoded monitor copies match their seals.
The retained grading source starts three real CLIs and imports the runner
from its own structural root, without `.git` or an engine tree. All 109 local
links in the five updated methodology/campaign documents resolve.

### Selected p50 batch averages

Nanoseconds per operation, each sample averaging 32 operations. These are
codec timings; they do not measure individual message or session latency.
D and 8 parse labels both perform their complete checked field set.

| Adapter | D parse | 8 parse | D build | 8 build | W build |
|---|---:|---:|---:|---:|---:|
| libhft C++ | 446 | 561 | 70 | 78 | 385 |
| libhft Java Pure | 827 | 1075 | 561 | 691 | 2492 |
| libhft Rust Pure | 646 | 774 | 183 | 300 | 602 |
| Falcon | 1088 | 1088 | 1390 | 1378 | N/A |
| Llfix | N/A | N/A | 462 | 533 | 2153 |

Falcon now traverses and hashes the application body. Its corrected D/8 parse
rows are slower than libhft C++ and Java Pure on this host; its historical
framing-only advantage is not a field-parser result. Llfix supplies encoder
rows only, with no public receive-parser claim.
