Skip to content

All Rules

The Terraform lexicon provides 26 rules: 1 lint rule and 25 post-synth checks.

IDSeverityCategoryDescription
TF101errorcorrectnessterraformApply’s planFile must reference a preceding terraformPlan step.

Post-synth checks validate the serialized output after the build pipeline completes.

IDDescription
TF001Root module declares no remote backend
TF002A provider the root implies has no required_providers entry, or an incomplete one
TF003Root module’s terraform block has no required_version
TF004Registry-sourced module block has no version
TF005Git/hg module source is unpinned, or pinned to a mutable ref
TF006Sensitive variable declares a default value
TF007Secret-shaped literal in a variable default or a locals value
TF008Provider block configures a hardcoded credential
TF009Credential-named variable is not marked sensitive
TF010Variable declares no type constraint
TF011Variable declares no description
TF012Output declares no description
TF013lifecycle ignore_changes is set to all
TF014Child module configures a provider block
TF015Child module declares a backend or cloud block
TF016Attribute value is a quoted interpolation of a single expression
TF017Module block uses depends_on
TF018Output value is a whole resource or data source
TF019Meta-argument explicitly set to its default of false
TF020Declaration is never referenced in its module scope
TF021count builds instance identities from count.index where for_each is safer
TF022Credential-named resource attribute holds a plaintext literal
TF024Live root declares a backend or cloud block, which choudoufu refuses
TF025Live root references a non-default terraform.workspace, which choudoufu refuses
TF026Live root declares delete: “never” but its policy leaves undeclared_tagged at “delete”