fix: target-version fallback with extend
Summary
Closes #21956
Root cause: When a .ruff.toml, ruff.toml config was discovered via ancestor search, Ruff eagerly derived target-version from requires-python in pyproject.toml during config loading. That fallback value then participated in config merging and incorrectly overrode an explicit target-version defined in an extended config.
Fix: Defer the requires-python fallback until after the full extend chain across .ruff.toml / ruff.toml is merged, and apply it only if target-version is still unset.
Impact: Explicit target-version settings in extended configs are now respected, requires-python is only used as a fallback.
Test Plan
Added a new test. I was useful to validate the fix but may be redundant to keep, lmk if you would love me to remove it