Release v3.1.0: fix CI, harden packaging, add tests#8
Conversation
- Fix publish.yml: replace broken v2 API smoke test with pytest - Bump version to 3.1.0, upgrade PyPI classifier to Beta - Remove empty slipcore_tools stub and tools dependency group - Fix refXXXX placeholder in finetune.py with SHA-derived ref tokens - Add CHANGELOG.md covering v2.0.0 through v3.1.0 - Rewrite RELEASE_CHECKLIST.md for v3 API - Add unit tests for finetune.py (17 tests) and errors.py (11 tests) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR prepares the slipcore v3.1.0 release by fixing the PyPI publish workflow, hardening packaging metadata, removing an unused stub package, and adding tests around the finetune generator and error hierarchy.
Changes:
- Replace the publish workflow’s broken v2 smoke test with
pytestexecution. - Bump to v3.1.0, update PyPI classifier to Beta, and remove
slipcore_tools+ thetoolsextra. - Fix fallback training example refs (
refXXXX→ SHA-derived refs) and add targeted unit tests + release documentation.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
tests/test_finetune.py |
Adds coverage for finetune example generation + output format writers. |
tests/test_errors.py |
Adds coverage for slipcore.errors hierarchy and key error behaviors. |
src/slipcore_tools/__init__.py |
Removes the stub tools package (previously a dependency-check placeholder). |
src/slipcore/finetune.py |
Replaces placeholder fallback refs with deterministic SHA-derived tokens. |
src/slipcore/__init__.py |
Bumps __version__ to 3.1.0. |
pyproject.toml |
Bumps version, updates classifier to Beta, removes tools extra, updates wheel packages. |
RELEASE_CHECKLIST.md |
Updates checklist for v3-era commands/workflow and dataset generation instructions. |
CHANGELOG.md |
Introduces changelog covering v2.0.0 through v3.1.0. |
.github/workflows/publish.yml |
Runs pytest in release publish pipeline before building/publishing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| def test_is_catchable_as_slip_error(self): | ||
| with pytest.raises(SlipError): | ||
| raise MissingExtraError("click", "tools") |
There was a problem hiding this comment.
MissingExtraError is raised here with extra="tools", but the tools optional dependency group was removed from pyproject.toml in this PR. Using a non-existent extra makes the test/example inconsistent with current packaging (and would suggest an invalid pip install slipcore[tools] command if surfaced in messages). Consider changing this to an existing extra (e.g. "ml" or "a2a") or introducing a constant/fixture that reflects the current extras.
| raise MissingExtraError("click", "tools") | |
| raise MissingExtraError("click", "ml") |
| # Tag the release (use current version) | ||
| git tag -a v3.1.0 -m "Slipstream v3.1.0" | ||
| git push origin v3.1.0 | ||
|
|
||
| # Create release on GitHub UI or: | ||
| gh release create v2.0.0 --title "Slipstream v2.0.0" --notes "See CHANGELOG.md" | ||
| # Create release on GitHub | ||
| gh release create v3.1.0 --title "Slipstream v3.1.0" --notes "See CHANGELOG.md" | ||
| ``` |
There was a problem hiding this comment.
This checklist section is now version-agnostic in the header, but the tag/release commands are hard-coded to v3.1.0. That’s easy to forget to update on the next release and could lead to tagging the wrong version. Consider using a placeholder (e.g. vX.Y.Z) or deriving the version from pyproject.toml/slipcore.__version__ in the commands.
- Fix MissingExtraError test to use existing "ml" extra instead of removed "tools" - Make RELEASE_CHECKLIST version-agnostic (derives version from slipcore.__version__) - Fix all 33 pre-existing ruff errors: - Auto-fix: import sorting, unused imports, f-string prefix (17 errors) - Add per-file E501 ignore for finetune.py/finetune_llm.py (LLM prompt strings) - Refactor ucr.py find_nearest() long conditional into named booleans - Break long list literals in slipcore_ml/coords.py into multi-line format Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Summary
slip/decode) withpytest— unblocks all future PyPI releasesslipcore_toolsstub: Empty 19-line placeholder removed along withtoolsdependency grouprefXXXXplaceholder: Fallback training examples now generate SHA-derived ref tokenstest_finetune.py(17 tests) +test_errors.py(11 tests)Test plan
pytest tests/ -v— 554 passed, 1 xfailedslipcore 3.1.0 OK: SLIP v3 a b Request Reviewv3.1.0and create GitHub release to trigger PyPI publish🤖 Generated with Claude Code