You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finelog] Split the native server ext into a marin-finelog-server dist (#6324)
## What
`cd lib/finelog && uv run` used to recompile the whole Rust tree on
every
`pyproject.toml` mtime change (any pull or branch switch cost ~3 min),
because
`marin-finelog` was a maturin project bundling the pure-Python client
with the
native ext. This splits the package in two and fixes the dependency
direction.
### Two dists
- **`marin-finelog-server`** — new maturin dist rooted at
`lib/finelog/rust`,
shipping the in-process server as the top-level module `finelog_server`
(top-level because an editable `src/finelog` would shadow a nested
`finelog/_native.so` in site-packages). Its `tool.uv` cache-keys cover
the
Rust sources, so dev-mode source builds rebuild on Rust edits, not on
every
`pyproject` mtime.
- **`marin-finelog`** — back to pure hatchling (client/deploy/proto +
config).
In-dir `uv run` now builds a pure wheel in ~1 s and takes the extension
from
PyPI by default.
### The client no longer depends on the server
The pure `marin-finelog` client never needs the in-process native server
— only
consumers that *start* it do. So `marin-finelog-server` is **not** a
runtime
dependency of the client:
- `lib/finelog`: the server moves into the `dev` group (needed only by
the
embedded-server smoke test, the dashboard demo, and to bind the
`rust_mode.py dev` path source).
- `lib/iris`: the controller — the one consumer of the embedded server —
depends on `marin-finelog-server` explicitly. Root `marin` reaches it
transitively via `marin-iris`.
- Floors move to the stable `>= 0.2.10` pair, so the now-pointless
`marin-finelog-server` prerelease opt-in is dropped from the root
`constraint-dependencies` and the iris `Dockerfile`.
### Build resilience
`build_package.py` fetched zig from a single hard-coded community mirror
(`pkg.earth`) with no retry/fallback — a transient mirror 500 failed the
whole
wheel build (it just did, on this PR). It now rotates through several
community
mirrors with retries and falls back to the official ziglang.org server
only if
every mirror fails.
## Release / deploy order
`finelog-release-wheels.yaml` publishes both dists in lockstep at one
resolved
version. The published `marin-finelog 0.2.9` is the *old fat wheel*
(`finelog._native`); the new code imports `finelog_server`, so consumers
must
move to a coherent new version — hence a **stable 0.2.10 pair**.
1. On PyPI, add a **pending trusted publisher** for
`marin-finelog-server`
(project `marin-finelog-server`, owner `marin-community`, repo
`marin-community/marin`, workflow `finelog-release-wheels.yaml`,
environment
`pypi-publish`). `marin-finelog` is already configured.
2. Dispatch `finelog-release-wheels` (`mode=stable`, `version=0.2.10`)
on this
branch to cut the stable pair.
3. `uv lock` (user mode) now resolves the pair → commit the refreshed
`uv.lock`.
CI's `uv sync --frozen` jobs go green and the PR is mergeable.
Until step 2, root/iris in-dir work needs `scripts/rust_mode.py dev`
(path
sources build the server locally); the `dupekit-unit` user-mode guard
checks
both marker files.
0 commit comments