Symptoms: "Did not find functions with language [python]", "The binding type(s) 'serviceBusTrigger' are not registered", host starts then dies.

Checklist:

1. **FUNCTIONS_WORKER_RUNTIME.** Must match the language (`python`, `node`, `dotnet`). Wrong value = worker never starts. Check app settings, not just local.settings.json (which does not deploy).
2. **Extension bundle.** host.json needs:
   `{"version": "2.0", "extensionBundle": {"id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.*, 5.0.0)"}}`
   Missing bundle = non-HTTP/Timer triggers never register. This is the number one "trigger does not fire" cause.
3. **AzureWebJobsStorage.** The host itself needs a storage account connection for its internal bookkeeping (locks, keys). Missing or wrong = host will not start. Identity-based: `AzureWebJobsStorage__accountName` instead of a connection string.
4. **Python version pin.** `linuxFxVersion` like `PYTHON|3.11` must be a runtime the plan supports. Deploying 3.12 code to a 3.11-only setting fails at import.
5. **Cold start vs broken.** Consumption plan cold starts add seconds, not errors. If invocations 500 immediately, it is code/config, not cold start.

Verify: `func start` locally reproduces most of these. The host log names the missing piece; read it before redeploying.