A compose file with variable substitution, an override file and an extends is not readable by inspection, and the difference between what you think it says and what it says is where the afternoon goes.
$ docker-compose config | head -20
services:
php:
build:
context: /home/t/app
args:
UID: '1000'
environment:
DB_HOST: mysql
$ docker-compose config --services
$ docker-compose config -q && echo valid
Running it in CI with -q turns a malformed file into a build failure rather than a deploy failure, and it costs nothing. The output has every variable substituted, which means it will happily print secrets — worth remembering before pasting it into a ticket. Diffing the resolved output between two branches is the fastest way to review a compose change that touches an override.