# Portable benchmark controls after the explicit input split

The original immutable quantity snapshot `43b20caa45ab3583d08b03bcb050f30f069ef688`
records its failed broad private portable gate unchanged: fifty failures,
2,551 passes, 267 passing subtests, two SDK-source deselections and zero skips.
That scope remains separate from its native and physical outcomes.

## Repairs

Portable fixtures now name the existing workload adapter input before calling
Stage 2 directly, and read native/Go/Java/Rust/.NET fixture sources from that
input. Java source loops explicitly require a nonempty inventory. Archive
isolation cases copy the declared public support files and supply their own
benchmark/tools/controller roots, with inherited LibHFT variables removed;
the outer Git checkout still cannot supply an archive identity.

Three Stage 7 launchers now import the standard-library `sys` module they
already use. The campaign merger imports its renderer from the separately
declared integration-controller input. An optional `--repo` must agree with
the declared benchmark/source root; positive and refusal cases exercise the
whole pipeline. Fix8 preparation reads its unchanged terminal patch from
the declared workload input and retains the selected absolute path and
original recipe digest. Its SDK source immutability, terminal-patch staging,
compiler alias, fresh-prefix, output separation and source-drift refusals
remain covered. No SDK source, shared input/clock/build API, manifest,
benchmark workload, build flag or admission threshold changes.

## Actual verification

The development checkout passes 2,596 tests and 294 subtests, with two
SDK-source checks explicitly deselected and zero skips. The added positive
source-root pipeline case subsequently passes in its 23-test/32-subtest
campaign suite.

The complete committed private developer archive at
`26e7c334ce4c88c40ebfa18c2746307232fc0577` is retained on
`s/codex-fullbench-portable-inputs-20261019`. It contains 9,901 regular files,
zero symlinks, and source inventory
`f23f27c09214456afa5b59284f8696bfc48231bf985e0a2ced7b42c2f727dbfe`.
SCAN runs that frozen archive under a normal-priority shared CPU lease on
CPUs 0–9, with benchmark, tools, clock/admission, workload, controller,
language-source and Cargo inputs declared explicitly from that archive.
The pinned GNU patch executable is unchanged.

All 2,597 tests and 294 subtests pass: 2,891 JUnit cases, zero failures,
errors or skips, and two explicit SDK-source deselections. Every archive
source byte and mode remains unchanged. Three bounded payloads (receipt,
JUnit XML and the log tail) are collected with original sizes/hashes; their
counts, source identity and scope are independently checked. The receipt is
`69e3dd1d5462634fb971afd403dda4dd2af1ce28a7db11b7ca600ee56e77d9ad`.

This is a passing private portable-controller gate for the new source.
It grants no SDK-native, standalone public-archive, release, timing or
physical admission and does not replace the original failed-source receipt.
No unchanged native or physical workload is rerun for these fixture repairs.
The full benchmark plan remains open for its remaining report, anchor,
matched comparison, roster and publication gates.


## Remaining public archive gate

The current benchmark manifest still selects `oss/benchmarks` but verifies
`cpp/fixbench/tools/open_source_fix_engines`. After the controller move that
former path contains workload adapters, not the private integration Python
controls. Its old SDK-free/full-session verifier description therefore
cannot serve as present standalone qualification. The benchmark manifests
are explicitly frozen by the Java/SBE extraction notice in the shared claims
file. The discrepancy is handed to the benchmark/microbench and extraction
owners there; no frozen manifest/root or export policy is changed here.
The new private archive pass is kept separate from this remaining gate.
