Symptom
integration CI fails at the Bootstrap siblings → uv sync step (has for 5+ days, both matrix legs), before any tests run:
× Failed to build `geodude @ file:///home/runner/work/robot-code/robot-code/geodude`
├─▶ Failed to parse entry: `mj-viser`
╰─▶ `mj-viser` references a workspace in `tool.uv.sources`
(e.g., `mj-viser = { workspace = true }`), but is not a workspace member
Puzzle (all three of these are individually correct)
- Root
pyproject.toml [tool.uv.workspace].members includes mj_viser.
mj_viser/pyproject.toml [project].name = "mj-viser" (matches).
geodude/pyproject.toml (origin/main) declares both:
- dep:
"mj-viser @ git+https://github.com/personalrobotics/mj_viser.git"
- source:
[tool.uv.sources] mj-viser = { workspace = true }
So mj-viser is a member, yet uv reports it isn't — only while building geodude.
Likely root cause
uv is building geodude as an isolated sdist rather than installing it as an editable workspace member. In that isolated build there is no workspace context, so geodude's own { workspace = true } sources can't resolve → "not a workspace member". The git+ URL dependency on mj-viser (geodude line ~26) is the most likely trigger for the out-of-workspace build.
Candidate fixes (for the owner)
- Drop the
git+… URL deps in geodude/pyproject.toml for siblings that are workspace members (rely on the { workspace = true } source alone), or
- Pin/adjust uv so workspace members aren't built in isolation, or
- Confirm whether a recent uv release changed workspace-source build semantics.
Scope / not this
Symptom
integrationCI fails at the Bootstrap siblings →uv syncstep (has for 5+ days, both matrix legs), before any tests run:Puzzle (all three of these are individually correct)
pyproject.toml[tool.uv.workspace].membersincludesmj_viser.mj_viser/pyproject.toml[project].name = "mj-viser"(matches).geodude/pyproject.toml(origin/main) declares both:"mj-viser @ git+https://github.com/personalrobotics/mj_viser.git"[tool.uv.sources] mj-viser = { workspace = true }So
mj-viseris a member, yet uv reports it isn't — only while building geodude.Likely root cause
uv is building geodude as an isolated sdist rather than installing it as an editable workspace member. In that isolated build there is no workspace context, so geodude's own
{ workspace = true }sources can't resolve → "not a workspace member". Thegit+URL dependency onmj-viser(geodude line ~26) is the most likely trigger for the out-of-workspace build.Candidate fixes (for the owner)
git+…URL deps ingeodude/pyproject.tomlfor siblings that are workspace members (rely on the{ workspace = true }source alone), orScope / not this
gitlink-freshnessgate is green).integration (3.10)python-version failure is fixed in ci: gate gitlink freshness; make setup.sh + CI cover the ADA repos #73 (matrix → 3.11/3.12).