On this page
Local editable overlays for `rlsbl dev sync`, installing sibling project checkouts as editable packages without committing path dependencies.
#rlsbl.commands.dev_sync
#rlsbl.commands.dev_sync
Local editable overlays for rlsbl dev sync, installing sibling project checkouts as editable packages without committing path dependencies.
Overlays sibling checkouts (e.g. ../strictcli/python) onto the project's locked environment without committing machine-local [tool.uv.sources] path dependencies. Driven by a git-invisible TOML file at the project root (dev-sources.toml.local-only -- the scaffold gitignore ignores *.local-only).
Why a wrapper is required (verified against uv 0.9.17):
uv pip install -e ../xalone is wiped by the nextuv sync: exact sync
reinstalls the locked registry wheel even at equal versions.
uv sync --inexact --no-install-package <name>preserves a pre-existing
editable install; neither flag has an env-var equivalent.
- Bare
uv runauto-syncs (and wipes overlays) unless UV_NO_SYNC=1 is set,
hence the hard gate below.
#_load_overlays
def _load_overlays(project_root)Parse and validate the overlay file. Returns a list of {"package": str, "path": str (absolute), "version": str | None} dicts, or None after printing a hard error. Never a silent no-op.
#_write_sentinel
def _write_sentinel(project_root, overlays)Atomically record the intended overlay state after a successful sync.
Writes SENTINEL_FILENAME alongside the overrides file (gitignored via the *.local-only pattern), capturing per overlaid package: its distribution name, the editable checkout path, and the overlaid version (read from the checkout's pyproject at sync time). The drift check and rlsbl dev status read this to detect when a later bare uv sync/uv run reinstalled the locked registry wheel over the overlay -- a silent wipe that would run the consuming project's tests against stale RELEASED dependency code.
Atomic write (tmp + os.replace) per the codebase convention for shared state. overlays is the list returned by _load_overlays.
#run_status
def run_status(project_root)Entry point for rlsbl dev status. Prints the declared overlays and their actual venv state, then returns a process exit code: 1 if any declared overlay was wiped or is missing (scriptable), 0 otherwise -- including when no overlays are declared (no sentinel).
#run_sync
def run_sync(project_root)Entry point for rlsbl dev sync. Returns a process exit code.