exclude removes combinations: arm64 skips Node.js 26 2,131 . include adds keys to a matching combination or, when an entry would change an original value (node: 22), a new combination: here an experimental job on the previous LTS line, whose experimental: true feeds continue-on-error, so it may fail without failing the run. It paid off at once: npm 2,036 ci on Node.js 22 warned EBADENGINE Unsupported engine ... required: { node: '>=24' }, yet all tests passed, so dropping Node.js 22 would be a policy choice, not a necessity.
fail-fast defaults to true: when one matrix job fails, GitHub 29 cancels those still queued or running, which hides whether the failure is universal. With false, all four jobs of pull request #18 (Build-and-Test Workflow) ran to the end with the same failing test, so the bug was in the code, not a runtime. max-parallel caps concurrency.