Error text: 409 on `az webapp deploy` / zip push, or "conflict" during slot swap.

Causes:

1. **Concurrent deployment.** Kudu allows one deployment at a time. A second push 409s until the first finishes. Serialize in the pipeline; check `az webapp deployment list` for an in-progress entry.
2. **Locked files.** On Windows app service, running DLLs lock and zip deploy fails. `WEBSITE_RUN_FROM_PACKAGE=1` (run from package) avoids file locks entirely and is the recommended deploy mode.
3. **Swap with preview stuck.** A swap-with-preview left in preview state blocks the next swap. Complete or cancel it in the portal before retrying.
4. **Deployment slots + auto-swap.** Auto-swap firing while a manual deploy runs = conflict. Do not combine auto-swap with manual zip pushes to the staging slot.

Recovery: wait for the in-progress deployment to finish or cancel it, then redeploy. If locks persist, restart the app (releases handles) and redeploy with run-from-package.

Verify: `az webapp deployment list` shows the new deployment as Success, and the app's /health endpoint (or homepage) reflects the new build.