Left behind by the rename to apworld_tester: the new package was added
but the old tree was never removed, so both were committed and both
were installed. Nothing imported it and 58 of its 85 files had since
diverged, but it stayed importable and shadowed the live code.
Constrain packages.find to apworld_tester* so a stray directory under
src/ cannot be packaged again.
SheetFetcher.save() opened paths.sheet_html without creating its parent,
so a fresh install failed with FileNotFoundError on the first fetch --
Paths only computes locations, and this is usually the first write to
the data root. Matches how every other writer in the pipeline behaves.
The unanchored 'build/' pattern matched src/apworld_tester/pipeline/build/,
so the package was never committed and a fresh clone failed at import with
ModuleNotFoundError. Anchor build/ and dist/ to the repo root and add the
missing module files. Also ignore .venv/.