## TL;DR
Re-run `cdktf get` and check the generated `required_providers` block in `cdk.tf.json`. The provider entry needs both `source` and `version`; if `source` is missing, regenerate bindings or pin the provider explicitly in your stack.

## The error
`cdktf deploy` fails because the synthesized Terraform JSON has a provider entry like `"docker": "~> 2.0"` with no `source`, so Terraform cannot determine where to install the provider from. The valid form is:
```json
"required_providers": {
  "docker": { "source": "terraform-providers/docker" }
}
```

## Fix it
1. Open `cdktf.out/stacks/[stack]/cdk.tf.json` and inspect `terraform.required_providers`.
2. If a provider entry is missing `source`, re-run `cdktf get` to regenerate the bindings; stale generations are the usual cause.
3. If the problem persists, set the provider source explicitly in your stack code or `cdktf.json` provider configuration.
4. Delete the stale `cdktf.out` directory and re-run `cdktf synth`, then `cdktf deploy`.

Expected result: `required_providers` contains both source and version, and deploy installs the provider.

## When to use this
- `cdktf deploy` fails at provider installation right after `cdktf get` + `cdktf synth`
- `cdk.tf.json` shows a version-only provider entry

## When NOT to use this
- Terraform fails to *download* a provider that has a correct source (network/registry issue)
- The error is "unknown provider" with a `registry.terraform.io/-/` address (different bug, see the unknown-provider skill)

## Root cause
Older CDKTF code generation emitted version-only provider requirements, which Terraform 0.13+ rejects because it needs an explicit source address to install from. Regenerating bindings with a current cdktf writes the full source + version block.

## Edge cases
- Community providers that moved namespaces (e.g. docker from terraform-providers to kreuzwerker) need the source updated, not just regenerated.