Two bugs after the first real watcher test this morning:

  1. exe_mtime() watched only AI Apocalypse.exe. But Unity IL2CPP builds are incremental — on a source-only change, only GameAssembly.dll is rewritten; the tiny exe wrapper stays cached at its previous mtime. The watcher missed today’s 8:18 AM build entirely because the exe hadn’t been touched since yesterday. Fix: poll the LATEST mtime across GameAssembly.dll + AI Apocalypse.exe so the watcher trips whenever EITHER changes. GameAssembly.dll is the more reliable signal for IL2CPP since it updates on every C# change.

  2. Success/fail log lines used unicode check/cross glyphs. Windows cp1252 console raises UnicodeEncodeError on write, which made the —now / —once paths exit with a traceback AFTER the upload had already succeeded (confusing when grepping logs). Swapped to [OK] / [FAIL] ASCII prefixes.

Verified end-to-end: today’s 8:18 AM build uploaded as BuildID 22922612 via python tools/watch_and_upload.py --now --once.

Co-Authored-By: Claude Opus 4.7 (1M context) [email protected]


Commit 7153914 by astafford8488.