Goal
Run Base's own project reconciliation code from the Base runtime instead of requiring every participating project to host Base's Python dependencies.
Background
For non-uv projects, Base merges bootstrap packages such as Click, PyYAML, and tomli from lib/base/default_manifest.yaml into the project virtualenv, then runs base_setup through base-wrapper using that project venv. This makes even shell-only or non-Python projects appear unhealthy without a Python virtualenv needed primarily by Base itself.
#1569 moved ordinary project environments to project-local .venv, but it intentionally preserved Base's runtime model. Related issues #812, #1008, and #1065 addressed routing and inherited-state defects rather than this control-plane/runtime coupling.
Scope
- Separate the Base control-plane interpreter and dependencies from project-owned runtime dependencies.
- Execute Base manifest reconciliation from the Base runtime venv where possible.
- Keep project Python environments optional and owned by project declarations.
- Preserve Python-package artifact installation into the intended project environment.
- Define pre-runtime behavior for projects that do not need Python.
- Update check, doctor, setup, workspace reports, activation, docs, and migration tests.
Acceptance Criteria
- A shell-only or non-Python Base project can be healthy without a project
.venv created solely for Base.
- Base core modules run from the Base-owned runtime.
- Project-declared Python artifacts still reconcile into the correct project environment.
- uv-managed and explicitly isolated project environments remain supported.
- Diagnostics clearly distinguish Base runtime failures from project runtime failures.
Validation
- Focused runtime-routing and setup reconciliation tests.
- BATS fixtures for shell-only, non-uv Python, uv, and Base-self projects.
- Workspace status/check/doctor regression tests.
- Full Base validation gate.
git diff --check.
Non-Goals
- Do not remove support for project Python virtualenvs.
- Do not make Base a dependency solver.
- Do not change project-owned run/test/build commands unnecessarily.
Project Fields
- Status: Backlog
- Priority: P1
- Size: L
- Area: Runtime
- Initiative: Adoption Polish
Agent Assignment
Human first. This changes a central runtime boundary and should begin with a compatibility design and fixture matrix.
Goal
Run Base's own project reconciliation code from the Base runtime instead of requiring every participating project to host Base's Python dependencies.
Background
For non-uv projects, Base merges bootstrap packages such as Click, PyYAML, and tomli from
lib/base/default_manifest.yamlinto the project virtualenv, then runsbase_setupthroughbase-wrapperusing that project venv. This makes even shell-only or non-Python projects appear unhealthy without a Python virtualenv needed primarily by Base itself.#1569 moved ordinary project environments to project-local
.venv, but it intentionally preserved Base's runtime model. Related issues #812, #1008, and #1065 addressed routing and inherited-state defects rather than this control-plane/runtime coupling.Scope
Acceptance Criteria
.venvcreated solely for Base.Validation
git diff --check.Non-Goals
Project Fields
Agent Assignment
Human first. This changes a central runtime boundary and should begin with a compatibility design and fixture matrix.