The single matrix job becomes two independent jobs on the oak Gitea runners (oak-ubuntu-2404 / oak-windows-2025 — the user's labels, kept as-is). Every runner.os conditional collapses into the owning job and all macOS steps are removed. actionlint.yaml whitelists the two oak runner labels (actionlint needs -config-file now that the config lives under .gitea/ instead of the default .github/ path).