# Standalone full-session control suite — 2026-10-17

## Source and scope

The complete stripped benchmark archive at
`1e206ee34773d4182605f791fe067b977255ec16` passes the full-session
Python control suite on HP and SCAN. Its 925-file byte/mode inventory hashes
to `4982defb6ea7422794af37eb9cc0837edf5b8e20cf8e67be92c993de0596d888`.
It has neither a Git directory nor an engine SDK tree. The manifest selects
922 source files and supplies three templates. Source readiness has no
private/unresolved/gated references, placement errors, scrub findings or dead
documentation links. The 66 textual source escapes remain declared external
inputs, not independently qualified SDK consumption.

The command is `python3 -B -m pytest -q -p no:cacheprovider`, selecting
`cpp/fixbench/tools/open_source_fix_engines` with `-m 'not sdk_source'`.
`LIBHFT_BUILD_ROOT`, pytest temporary files and JUnit output are outside the
source archive. The build directory is created before the command starts.

The two SDK source guards also pass separately from that frozen archive with
explicit Java and .NET source inputs from the clean engine files at the same
development commit (66 other scenario checks deselected). They inspect
Java/JNI and .NET native callback/send ordering; they do not compile or load
those SDKs and do not extend native/runtime qualification.

| Host | Python | Passed | Failed/skipped | Explicitly deselected |
|---|---|---:|---|---:|
| HP | 3.9.25 | 2,136 | 0 / 0 | 2 SDK source guards |
| SCAN | 3.13.14 | 2,136 plus 58 separately reported subtests | 0 / 0 | 2 SDK source guards |

Both operations inspect host pools, processes and disk before entering an
outer `host-cpu-slot wait --pool isol` lease; HP requests high priority.
They are functional checks, allowing concurrent shared work. Both verify the
complete frozen byte/mode inventory after pytest; no exported input changes.
These are not physical measurements or timing admissions.

## Fixes and retained failures

- The first archive attempt failed collection because a scenario test assumed
  `.git` and the development directory layout. The shared layout helper now
  resolves that test's harness inputs. The two Java/JNI and .NET native source
  guards have an explicit `sdk_source` marker and external source inputs;
  they remain in the development contract gate.
- The next operation did not create its declared build directory. This
  caused 49 Stage 2 preparation/fixture failures; the operation now creates
  the directory. Stage 2 source, tests and shared preparation APIs are unchanged.
- Actual whole-suite execution also exposed a legacy LibHFT .NET Stage 5
  project path still hardcoding `bench/`. It now uses `benchmark_path`.
  Final-report and Stage 7 path assertions also use the actual source layout.
- Public selected-host transport tests now supply two synthetic deployments,
  exercising local execution/copy and remote routing without consulting a
  private host configuration. No transport assertion is skipped.
- Six test modules reading fixed root launchers, installers or retained
  campaign fixtures move intact to the mirrored private test directory.
  A new development conformance stage discovers that entire directory and
  passes with no skipped or failed stages. Its selected-stage report remains
  `PARTIAL`, as intended: it does not represent all 365 conformance stages.
  An attempted nested pytest output path failed before fixture creation when
  its parent was absent; the stage now places its pytest directory directly
  under the already declared build root and is rechecked there.
- That private discovery exposed stale Rust expectations: old fixtures lack
  affirmative current comparison alignment. Their tests now require
  `comparison_fixture_unaligned` and diagnostic status, including when
  historical admin/delay observations are present. Other negative controls
  explicitly supply synthetic alignment prerequisites and assert their unit
  baseline qualifies before mutating the property under test, so a missing
  alignment flag cannot make those rejection checks vacuous. No historical fixture,
  runtime, original result or report gate is altered.
- HP's first corrected-source run passes 2,135 checks and fails the actual
  Fix8 patch check because GNU `patch` is absent. SCAN passes all checks.
  The system-installed SCAN `patch-2.7.6-16.el9.x86_64` passes `rpm -V`;
  its binary is copied to HP's user tool cache, with metadata and SHA-256
  `821048159f28fb3e247ceb417b8b5bcde2680ed76c6ec88205d6a936f2df99c5`.
  HP's fresh output directory passes the unchanged source archive with that
  exact prerequisite on this operation's `PATH`. No root install is needed.

Original failed operations remain on their hosts. Successful reports are
`~/build/codex-fullbench/libhft/fullbench-export-portable-checks-20261017-v3`
on SCAN and the corresponding `v4` directory on HP; both consume the frozen
`~/.cache/libhft/fullbench-export-portable-checks-20261017-v3` source capsule.
Local small decision reviews are under the session build root; raw suite
output and JUnit artifacts are not imported into Git.

## Export gate and remaining admission

The manifest gains a scoped `verify` command for these portable full-session
controls, using the export tool's existing external scratch directory. The
source-layout guide declares Python/pytest, Bash, Git and GNU `patch`
prerequisites and the separate SDK source checks. Private deployment checks
stay in development; moving them does not remove their assertions.

The actual manifest command also passes locally: 2,136 checks and 58 separately
reported subtests, zero failures/skips and two explicit SDK deselections.
The export tool's fingerprint check reports `verify_writes: []`, with zero
closure, scrub or link findings and its one verification command passing.
All temporary verification output is under the session build root. This
integration check includes the new manifest and public documentation changes;
the separately frozen host suite above remains pinned to its original commit.

This closes portable full-session Python control-suite execution. It does not
qualify every SDK/native build, source/licence admission, actual production
engine pairing, physical timing, whole-language comparisons or coordinated
public release. Current Java and .NET peer rate failures and remaining roster
and release work stay open. The compact benchmark catalogue remains 653 cells;
no benchmark result is replaced by this control-suite work.
