A child module's output sometimes returns a tuple and sometimes a list depending on how it is called, and callers that pass it into list(string) variables keep breaking. The module targets Terraform 1.15, and the maintainers want the output itself to declare and enforce list(string). Which change achieves this?
Select an answer to reveal the explanation.
Short Explanation
Before 1.15 an output was a bit like an unlabelled jar: callers had to guess what was inside. Now you can stick a type on the lid. Declare list(string) right on the output, and every caller gets a value that matches the label.
Full Explanation
Terraform 1.15 added an optional type argument to output blocks, letting a module author declare a type constraint for the value the output returns. With type = list(string), Terraform converts the expression's result to that type where a conversion exists, such as from a tuple of strings, and reports an error when the value cannot conform, so callers always receive a consistent shape and the module's contract is explicit in code. Output blocks do not support validation blocks; the closest construct is a precondition, which checks a condition but neither declares nor converts the type. The description argument is documentation text and has no effect on evaluation. Constraining each caller's variable pushes the problem onto every consumer and does not fix the inconsistent output at its source; the premise that outputs cannot be typed in 1.15 is also false. Exam caveat: version 1.15 also added a deprecated argument for outputs in child modules, which warns callers that still reference an output scheduled for removal. Operational check: call the module from a test configuration in both of the ways that used to produce different shapes and confirm the output's type is list(string) in terraform console.