Goal
Move Base manifest contracts behind a neutral Python package boundary so unrelated subsystems no longer depend on setup internals.
Background
Manifest models, loading, schema constants, validators, and compatibility imports currently live under base_setup. Roughly thirty non-test production files outside that package import it. This makes base_setup the implicit domain core and obscures the intended dependency direction.
Closed issues #288, #1420, #1442, and #1461 split manifest internals, while #1576 extracted devcontainer and devenv consumers. None established a neutral manifest package or mechanically enforced the package dependency graph.
Scope
- Define a focused package such as
base_manifest owning the model, loader, schema constants, validators, and public read API.
- Preserve documented compatibility imports during migration.
- Move consumers incrementally without duplicating schema definitions.
- Document the intended Python package dependency DAG.
- Add import-boundary or structure tests that reject wrong-direction dependencies.
- Identify any setup-specific manifest reconciliation that should remain in
base_setup.
Acceptance Criteria
- New code can consume manifest contracts without importing
base_setup.
- Manifest parsing behavior, errors, and dataclass output remain compatible.
- Compatibility facades are explicit and tested.
- The allowed dependency direction is documented and mechanically checked.
- At least one major non-setup consumer migrates to the neutral package.
Validation
- Full manifest parser and compatibility tests.
- Package structure/import-boundary tests.
- Focused tests for migrated consumers.
- Pylint on touched production Python.
git diff --check.
Non-Goals
- Do not create a vague catch-all
base_core package.
- Do not redesign the manifest schema.
- Do not extract a separately published package in the first slice.
Project Fields
- Status: Backlog
- Priority: P2
- Size: L
- Area: Python
- Initiative: Contract Hardening
Agent Assignment
Human first. Establish the dependency boundary and compatibility plan before moving consumers.
Goal
Move Base manifest contracts behind a neutral Python package boundary so unrelated subsystems no longer depend on setup internals.
Background
Manifest models, loading, schema constants, validators, and compatibility imports currently live under
base_setup. Roughly thirty non-test production files outside that package import it. This makesbase_setupthe implicit domain core and obscures the intended dependency direction.Closed issues #288, #1420, #1442, and #1461 split manifest internals, while #1576 extracted devcontainer and devenv consumers. None established a neutral manifest package or mechanically enforced the package dependency graph.
Scope
base_manifestowning the model, loader, schema constants, validators, and public read API.base_setup.Acceptance Criteria
base_setup.Validation
git diff --check.Non-Goals
base_corepackage.Project Fields
Agent Assignment
Human first. Establish the dependency boundary and compatibility plan before moving consumers.