generate computes exactly what will change and provision applies it. Nothing is applied that wasn’t first generated and reviewable. For production, both run from CI; running locally is the sandbox flow.
Preview: infra generate
generate validates the config against the real account (certificates issued and covering the right names, network ids real and usable) and creates a CloudFormation change set for each stack (synthetiq-infra, synthetiq-edge) — without executing anything. It writes a changeset file under _infra/changesets/ containing:
- The resource-level table (action, resource, type, replacement warnings)
- Property-level before/after for every modified resource
- The full configuration of each created resource
- The resolved parameter values
terraform plan -detailed-exitcode: 0 with no file when nothing changed, 2 when changes are pending.
Apply: infra provision
provision executes only what was reviewed:
- Verify — the parked change sets still exist and are executable. If the config changed since
generate, or the stack moved underneath the change set, it stops and asks for a re-plan. - Pre-flight — simulates the required permissions for the executing principal; validates your own private subnets if you supplied them.
- Execute — runs the change sets in order (
synthetiq-infra, thensynthetiq-edge). - Finish — prints the three app DNS records to create, seeds the deploy key, and registers the infrastructure with the Synthetiq platform.
provision runs with a Synthetiq identity — your login locally, the service account in CI — and refuses a changeset generated by a different CLI version than the one applying it (--allow-version-skew overrides).
Confirm the account is registered and ready for deployments:
Updating
Updates are the same loop: edit the config, thengenerate → review → provision. To pick up Synthetiq platform updates, upgrade the CLI first:
generate produces an update change set against the existing stacks — only what changes, with replacement warnings. Re-running with no changes is a green no-op. In CI, pin @synthetiq/cli in the infra repo and upgrade via version-bump PRs — see Staying current.

