264 TemporaryDirectory() and mkdtemp() calls without dir= wrote to the
/tmp tmpfs, and a full tmpfs failed modules no change touched. The test
package now points tempfile and TMPDIR at tmp/tests, and sets
GIT_CEILING_DIRECTORIES there so git run in a scratch directory does
not find the checkout above it. The package test asserts both.
--for-games reads the card's rom folders through install/games/ and keeps
what the games need: per system what its default core reads, one region
where the content proves it (crc32 and size, a disc serial, a header the
core reads), an arcade set's BIOS parents. A game not recognised gets
every BIOS of its system and is named. --required-only keeps only what
starts. The plan and the line menu open on it when the card holds games,
everything one press away. A cache keeps what reading a card found.
core_probe takes probe.lock itself around one execution, load check included, and releases it when the run ends. A campaign pass never holds it between runs, so two passes interleave. RETROBIOS_PROBE_LOCK names another file, RETROBIOS_PROBE_LOCK_HELD says the caller holds it. Tests use their own lock file.
Most modules write under tmp/, which a fresh clone lacks, and only three
created it on import. A module run alone failed with FileNotFoundError on
a temporary directory.
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.
validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.