todo2code

Ticket 019: Publish the Python SDK as the root todo2code package

Goal and scope

Publish the dependency-free Python SDK from the repository root as the PyPI distribution todo2code. The root pyproject.toml becomes the single Python package manifest, while sdk/python/pyproject.toml is removed. The distribution contains only the existing todo2code package and todo2code_sdk compatibility module; it does not embed the TypeScript runtime or the rest of the repository.

The user selected the root distribution name todo2code, removal of the nested manifest and an SDK-only package. Python artifacts will coexist with the TypeScript build under dist/: python -m build does not clean that directory, and the Goal publish command remains restricted to dist/todo2code-{version}*.

goal.yaml must declare the Python project type and version the root manifest. The existing make python-wheel target must build from the root after removal of the nested manifest. Tickets 018 and 035 are now DONE. Ticket-035 declared all five publication paths as integration-owned shared contracts, so this ticket can perform the atomic change under the integration workstream.

Planned changed paths

Acceptance criteria

Participants

Completion boundary

Validation result

The root wheel and sdist pass Twine checks and clean-environment imports with zero declared runtime dependencies. The wheel contains only the Python SDK, compatibility module and distribution metadata. npm run verify, npm run examples:check, make e2e-core and the local governance gate pass.

Goal 2.1.284 exposed a release-safety defect during AC-05: the command goal --dry-run publish --no-make --version 0.5.1 printed the bounded Twine command but still executed it. Consequently Python 0.5.1 was published to PyPI before merge. The following npm publication attempt failed with ENEEDAUTH; an independent registry lookup confirms that todo2code@0.5.1 is absent from npm. No release was removed or yanked.