The three parallel test_programs_end_to_end_o* harness functions all
ran the same .f90 binaries with the working directory inherited from
cargo, and six I/O test programs hardcoded /tmp/afs_*.dat paths. That
made the parallel threads race on the same files: while one thread was
mid-read, another could re-open the file with status='replace' and
truncate it under the reader's feet, surfacing as
READ: cannot parse integer from ' <huge run of spaces> '
io_flush_stress was the first to flake because its 1000-iteration
flush() loop is the most aggressive interleaver, but io_write_to_unit,
io_rewind, io_file_roundtrip, io_multi_value_read, and file_io shared
the same antipattern.
Fix: extend the existing per-(file,level) binary path pattern to a
per-(file,level) sandbox directory. The harness creates an isolated
sandbox for each (program, opt-level) pair and runs the binary with
that as cwd. The six affected programs now use plain relative
filenames so they write inside their own sandbox. No two test threads
can ever share a path again.
Pin afs-as to its first tagged release. The afs-as repo now ships
release-quality package metadata, a CHANGELOG, broader fuzz coverage,
the trusted-fast-path panic contract documented in its README, and a
CI workflow that exercises every integration test rather than a
hand-picked subset. See FortranGoingOnForty/afs-as#6 and #7.