# Actual canonical .NET single-traversal book qualification

## Declared change

The [managed first-CPU collection](RECORD_2026-10-17_dotnet_managed_first_cpu_physical.md)
retains SCAN mixed rate failure. The shared fixture previously traversed every
book once to validate it, then again to re-read the same actual prices/sizes
for the owner fold. Mixed reaction additionally validates the received book.
This generation combines the owner's validation and fold in one actual public
SDK entry traversal. It retains every level, typed numeric success, side,
price, size, group order/count and request/symbol check. Reactive validation
remains independent. No required field, value, owner fold, byte spelling/order,
public send/callback API, clock or grading rule is removed or changed.
This qualifies the change before timing; no causal performance claim is made.

## Real standalone functional qualification

Both hosts build the complete 909-file stripped consumer source, with SDK
10.0.112 targeting net8.0 and runtime 8.0.31, two MSBuild jobs, no build server
or shared compilation, and zero warnings/errors. All nine profiles pass:
Native legacy receive; Native handler inherited/first CPU, each ordinary and
2 ms probe; Managed public inherited/first CPU, each ordinary and 2 ms probe.
Each profile has twelve actual four-flow pairs, warmups 5, 0 and 5, 240 primary/
240 delay samples and 1,000 application frames per peer per host. Managed pairs
use alternate loopback 127.0.0.2. Each complete 120-body/four-owner cold vector
is byte-identical to the previous formatter and independently canonical.

This is **216 actual TCP pairs and 1,338 independent cold refusals**, without
skips. All actual owner counts/sinks, callback/prepared-write/admin observations,
selected handler/extraction spans and declared masks pass. Managed native-engine
maps remain unloaded. Ten pre-warmup captures close before warmup; measured
capture is zero. Probes stay ungraded. All 1,018 focused SDK-free clock,
preflight, affinity, runtime, compact/report, matcher and lease/status controls
also pass without skips. HP holds high-priority `isol`, SCAN normal `isol`;
slot/process and free-disk states are checked before work.

## Actual compiled malformed-book checks

The separate 911-file stripped source adds a cold C# checker. It uses typed
scoped delegates to invoke `ReadBook` and `FoldBook` from the actual compiled
previous/current Native and Managed products. It does not compile a duplicate
extraction implementation. It reads each original cold vector, checks valid
books, and corrupts every entry at every depth: wrong side, changed numeric
price/size, malformed price/size and missing price/size. Header controls alter
or remove request identity, symbol and count. It checks both depth-ten and
one-level tick books, sequences 1–12. No fixture files are created by the checker.

Each product accepts 24 valid templates and rejects all 2,040 malformed books
through each of its two actual extraction entry points: 4,080 real rejections.
Across four products on each host this is **192 valid templates, 16,320 malformed
books and 32,640 actual rejections**. Builds have zero warnings/errors. Original
driver, vector and every runtime file hash stays unchanged. No target rebuild,
new socket pair, measured run or native engine creation occurs in these checks.

The first helper attempt fails before compilation because the standard harness
requires explicit `LibhftDotnetSource`; both original failures remain retained.
The second compiles and passes the first old Native checks, then correctly
refuses SDK byte binding: the helper loaded the current built SDK alongside
the old product. Those built SDK binaries differ despite the unchanged source
content pin. No byte equivalence or cause is assumed. A fresh third operation
builds the checker separately against each exact supplied SDK assembly, using
the supported project property. All four product checks now pass on both hosts.
The original failed roots/logs stay retained; target products and socket pairs
are never rebuilt or repeated during these operational corrections.

## Immutable inputs

- Functional driver source: `e0b496f4d7561c2112cadc65b872480d7b70a7e2`.
- Functional inventory SHA-256: `08e27e53ef20cdf21d1e1f6f6bc9a99c43158c57a5a99ad3670862eabe2e5956`.
- Native driver DLL: `57c8c4d6ae99a64fa2cddc82da1f9ac35ddbbb47dba6a1b1587d562024d465fd`.
- Managed driver DLL: `0c55a7611bb9f77fdda9710aa677b113c08cde364dc52f14ce0ec68c84ad735a`.
- Checker source: `fd5cd9bd3a109a4df6228f6dd6e7fcf2d65cc368`.
- Checker source inventory SHA-256: `07931a2de023505a9df95d892c627b6e06008bde2171c9f1ff133259187fe1e1`.
- Previous SDK assembly: `826899fe279f8ee0b0edfd2a4ac13bf602c9f9da6ba6f2119cb23c96e943edd0`.
- Current SDK assembly: `0a6731d3bd690ca48eafb11d00540d7474f5f8376a47739bd66ea361d5d2ff6f`.
- Previous-SDK checker DLL: `d237c049c56b221dffab2946c4b17146f8cadc166d99e70058e9b961c495cbfe`.
- Current-SDK checker DLL: `1f10242ec34460f0d0a4208a5dbae2892782010c16e6489b7c091611d8a26a09`.
- Unchanged native library: `91bdc88f8cd2d375262daafdc233ce2b16bc49e8fcae0789da12af999c737dc9`.
- Unpatched SDK content pin: `uncommitted-functional-source-26310f12584fd0f392af231da8c2ea10067f50bb337db118cc79a2895da54386`.

All driver/checker/SDK binary hashes above match across hosts. Source/SDK bytes
and modes remain unchanged, with zero export closure/scrub findings. This is
not whole-harness or coordinated release admission. Both hosts retain:

- `~/.cache/libhft/fullbench-dotnet-book-fold-20261017-v1`
- `~/build/codex-fullbench/libhft/dotnet-book-fold-20261017-v1`
- `~/.cache/libhft/fullbench-dotnet-book-fold-extraction-20261017-v{1,2,3}`
- `~/build/codex-fullbench/libhft/dotnet-book-fold-extraction-20261017-v{1,2,3}`

Fresh complete four-flow tiny/report DAC matrices are separately declared for
Native inherited, Native first CPU, Managed inherited and Managed first CPU,
once per rig, under `isol-no-shared` and high priority on HP. Each runtime
bundle will bind its exact compiled inputs and the actual compiled extraction
receipts. No profile union fills a failed fresh flow. Earlier compact results
and failed gates stay retained. Raw working output stays on the hosts; only
qualified compact cells and records enter Git/website data. Current language
peer and whole-harness release gates remain separate.
