An Azure service that is used to provision Windows and Linux virtual machines.
1. Is the delay known or expected?
I couldn’t find anything saying the 300 seconds is intentional. so I wouldn’t build a timeout around that number.
2. What read-only diagnostics separate guest upload delay from control-plane propagation?
You already have what you need. The waagent logs don’t prove upload or ingestion, but ExecutionState from the API does, since the control plane can’t report it until it has the guest status. So if ExecutionState shows Succeeded at around 3 seconds while ProvisioningState hasn’t flipped yet, the guest side is done and whatever remains is platform side.
3. Is there a documented mitigation that preserves verification?
No, not if you need both confirmed. The 300 seconds is the wait on ProvisioningState, a separate event from the script finishing.
What the docs do settle is whether you actually need both. Run scripts in a Linux VM in Azure using managed Run Commands says of InstanceView.ExecutionState: “Refer this state to know whether your script was successful or not.” ProvisioningState is defined separately as “Status of general extension provisioning end to end (whether extension platform was able to trigger Run Command script or not).”
So if what you are verifying is that the script ran and succeeded, ExecutionState plus ExitCode is the documented check, with “A nonzero ExitCode indicates an unsuccessful execution.”
Help make this community better for everyone: if this answer resolved your issue, please accept it or leave an upvote. If not, share more details in a comment so we can continue the discussion and find the right solution.