Install packages in dependency order for deterministic file conflicts
This change improves the ordering of package installation to be more
deterministic when packages have conflicting files. Packages are now
sorted topologically so dependencies come before their dependents.
Key changes:
- Add `order.rs` module with `sort_by_dependency_order()` function
- Uses Tarjan's algorithm to handle circular dependencies via SCCs
- Within cycles, packages are sorted alphabetically for determinism
- Wire up sorting in `execute_plan` before installation
The actual installation still happens in parallel for performance.
Sorting by dependency order increases the likelihood that dependencies
complete before dependents, though parallel execution means the exact
order is not guaranteed. For guaranteed determinism with conflicting
files, users should avoid having packages with overlapping files.
References pip's approach: https://pip.pypa.io/en/stable/cli/pip_install/
Stabilize add bounds kind
Stabilize `uv add --bounds` and the `add-bounds` configuration option.
There's not many usages of the features, but there also aren't any problem reports, and I don't expect its functionality to change unless there were bigger `uv add` and/or argument/configuration handling changes.
* https://github.com/search?q=path%3A**%2F*.toml%20add-bounds&type=code
* https://grep.app/search?regexp=true&q=uv+add.*--bounds
* https://github.com/search?q=%22uv+add%22+%22--bounds%22&type=code&p=1