# CrossFIX / Philadelphia report inputs and output placement

The retained-format report now requires `--inputs` JSON and accepts
`--output-dir`; input paths resolve beside the declaration, including spaces.
Data, notebook and configuration receipt go under the output directory,
which defaults to the session build root or the owning archive's target.
Read-only `--check-inputs` creates no outputs. Required summary data, config
schema/types and input/output overlap are checked before generation. Existing
output child symlinks are refused before the original CSV cleanup can follow
one into declared input data. The optional application inventory now correctly
reports unavailable sources without dereferencing `None`.

All **27** original calculation, source-row, delta, distribution and notebook
execution functions retain AST-identical bodies. Only dependency-inventory's
optional-source guard, notebook input/presentation and main are changed;
old implicit path selectors are replaced by the explicit declaration. This
remains the Philadelphia 1.1.4 fast Java 8 / CrossFIX 1.6 socket-selector
format, including its legacy mixed flows and original status semantics.
It does not qualify the current four-flow comparison.

Exact original generator, machine/run paths and every original notebook prose
cell remain under `internal/bench/java/fixbench/scripts/crossfix-inputs-originals-20261003`,
pinned to `4cca558da28a`. The private replay selects the same synthetic records
for both generators, producing **eight byte-identical CSVs** and all original
markdown cells. Generic defaults make no inherited campaign conclusions;
explicit markdown declarations can reproduce the retained discussion.

## Verification and retention

The first local execution completed the actual notebook, but its new assertion
expected fourteen code cells instead of the original twelve: **one failure,
five passes**. Its exact source `21170987d` and failed log remain preserved.
Corrected source `aacc9a6f421e` passes **eight tests plus 27 subchecks, zero skips**,
including all **twelve** code cells in a real Python kernel. Its complete
**742-file** stripped archive passes six actual CLI checks with no skips,
including kernel execution; all source bytes and Git modes remain unchanged.

A further output-protection source **7ec99ac5d** adds the existing child-symlink
refusal. It passes **nine tests plus 27 subchecks, zero skips** locally and
**seven tests, zero skips** in another complete **742-file** archive. The
actual executed notebook has all twelve code cells complete, no cell errors,
and unchanged declared input bytes. Original and protected source generations
are retained separately, with hashes, commands, environment/tool versions and
logs; disposable archive materializations are removed.

Source refs are `s/codex-fullbench-crossfix-inputs-original-source-20261003`,
`s/codex-fullbench-crossfix-inputs-source-20261003` and
`s/codex-fullbench-crossfix-output-source-20261003`. Sealed local evidence is
under `~/archive/libhft/crossfix-{inputs,output}-20261003-*`, mirrored in
[repository evidence](evidence/crossfix-inputs-20261003/SHA256SUMS).
This pass selects **739 source files**, with **35 scrub findings in two files**,
84 textual escapes and zero dead links. No benchmark, HDR conversion,
SDK build, physical timing, Stage 5, report or standalone release admission is
claimed. Full SDK/release closure and physical comparison gates remain open.

Integration preserves **738 of 742** qualified inputs in the active tree,
plus **three exact-byte private snapshots** of the concurrently migrated
Stage 2 publication tools. The fourth difference is their reviewed portable
MICROBENCH guide. New Stage 2 campaign tools and the owner's qualified
publication receipt are preserved. All full-session/report/calculation/shared
runtime inputs stay unchanged. The integrated suite again passes **nine tests
and 27 subchecks, zero skips**, including the actual kernel and retained CSV/prose
replay. Its input map, current readiness and log are sealed beside both original
generations. Current readiness selects **741 files**, with 35 scrub findings
in two files, 84 textual escapes and zero dead links.
