Use deployment.prod_gap_summary() to see exactly what strict prod would reject, or result.prod_gap on a run result. The trap: Deployment.run(...) rejects dev-mode deployments and Agent.deploy(...) uses the strict path, so "works in dev" does not mean "deploys." Clear the prod gap before shipping.

Context: Official docs (Julep capabilities and safety guide, Dev vs prod enforcement): strict is the default and is what production runs. While iterating, deploy(..., mode="dev") keeps compiling and running locally but retains the diagnostics that strict prod would block on. And Temporal stays prod-strict no matter what.