first the matrix is "expanded" into all possible combinations and then every item in `include` is "run", which either modifies existing combinations or adds new ones it runs "top to bottom", so a single combination can get modified multiple times by multiple `include`s so order of the `include`s matters