Migrate to uv (#4226)
<!-- CURSOR_SUMMARY -->
> [!NOTE]
> **High Risk**
> Large build/packaging and CI/Docker workflow migration with a Python
version support drop; regressions are most likely in dependency
resolution, environment setup, and release/build pipelines rather than
runtime logic.
>
> **Overview**
> Migrates the project from `setup.py`/requirements files to native `uv`
+ `pyproject.toml` (Hatchling), adds `uv.lock`, and bumps the minimum
supported Python to **3.12 only**.
>
> CI and composite actions are rewritten to use `uv sync`/`uv run`
(dropping the bespoke venv cache and ingest cache action), license
checks switch from `liccheck` to `pip-licenses`, and the `Dockerfile`
now installs deps via `uv` and runs initialization steps inside the `uv`
environment. The Makefile is simplified around `uv` commands and linting
is consolidated to `ruff`.
>
> Includes a few small functional fixes (e.g., `bbox_visualisation.py`
colormap key bug, updated `unstructured-client` constraint) plus broad
test/script updates to avoid asserting exact compressed outputs and to
align formatting/strings with the new toolchain.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f86a098aedf268425c7eaa743f7cb9c04fcbaca6. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->