Add a fail-fast: false OS matrix (ubuntu-latest, windows-latest) and a workflow_dispatch trigger so CI can be run on demand.