What was broken
Concourse is an open source CI/CD system where tasks are described in YAML files. A task file can use vars written as ((name)), for example so that a container memory limit comes from the pipeline configuration instead of being hardcoded.
The trouble started in fields that are not strings. The task file was parsed into a structure first, and the vars were only resolved afterwards. With memory: ((container_mem_limit)) the parser saw text where it expected a number, and the task failed with "cpu/memory limit must be an integer". Issue #5765, which described this, had been open since June 2020.
What we changed
The file config source can now hand back the raw file contents before they are parsed. The vars are resolved in those contents, and the result is parsed once. This early pass now runs for every task file, not only when the step sets vars:. Along the way, the error message names the file that could not be parsed, also after interpolation.
How we tested it
New tests feed a task file with cpu: ((container_cpu_limit)) and memory: ((container_mem_limit)) and the vars 512 and 5gb, then check that the limits end up as 512 and 5 GiB. A second case checks that a file that is still invalid after interpolation fails with an error naming it.
The result
The change was merged on 5 October 2026. Vars in container_limits and other numeric fields of a task file now work the way the documentation describes.