connectonion/useful_skills/ship-feature/SKILL.md
Ship a feature end-to-end — update tests, docs, docs-site, then release to PyPI. Use when user says "ship", "ship feature", "release", or asks to publish a new version.
npx skillsauth add openonion/connectonion ship-featureInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Ship a feature completely: tests → docs → docs-site → release.
Read the user's message to identify which feature/module was changed.
Run in parallel:
git diff --stat — what files changedgit diff — full diff of changesgit log --oneline -5 — recent commit contextFind the relevant test file:
glob("tests/**/*.py") — find all test filessrc/agent.py → tests/unit/test_agent.py)Update the test file:
python -m pytest tests/unit/test_<module>.py -vThis step is required. Do not skip.
Find ALL docs that need updating:
glob("docs/**/*.md")
For each changed area:
docs/cli/README.md, docs/useful_tools/README.md) — update the table of contents if you added something newCommit docs/ changes as part of the release commit (not separately).
This step is required. Do not skip even if docs-site/ is not present locally.
docs-site is a separate Next.js git repo. Check if it's cloned:
ls docs-site/
If docs-site/ exists:
glob("docs-site/app/**/*.{tsx,mdx}")docs/CommandBlock, CodeBlock, etc.)cd docs-site && git add . && git commit -m "Update docs for <feature>" && git push && cd ..
If docs-site/ does NOT exist locally:
co copy ship-feature --force to re-run"Find and read the current version — check these locations in order:
grep -r "__version__" --include="*.py" -l # find which file has version
cat pyproject.toml | grep "^version" # or pyproject.toml
cat setup.py | grep "version=" # or setup.py
Apply versioning rules (read VERSIONING.md if it exists, otherwise use semver):
Search for every file containing the current version string and update each one:
grep -r "X.Y.Z" --include="*.py" --include="*.toml" --include="*.cfg" -l
Common locations: __init__.py, pyproject.toml, setup.py, setup.cfg
Stage only what changed — do NOT blindly stage all files:
git add -p # or stage specific files that were actually modified
git status # confirm what's staged before committing
git commit -m "Release vX.Y.Z: <feature description>"
git tag vX.Y.Z
git push
git push origin vX.Y.Z
python -m build
twine upload dist/*X.Y.Z*
Confirm upload succeeded by checking the output for "View at: https://pypi.org/project/<package>/X.Y.Z/"
docs/ updateddocs-site/ updated and pushed__init__.py and setup.pytesting
Ship a feature end-to-end — update tests, docs, docs-site, then release to PyPI. Use when user says "ship", "ship feature", "release", or asks to publish a new version.
tools
Review GitHub pull requests. Use when user says "review PR", "review pull request", or "/review-pr".
development
Create git commits with good messages. Use when user says "commit", "create commit", or asks to commit changes.
testing
Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like "create a skill", "author a skill", "tidy up a skill", "improve this skill", "review the skill", "clean up the skill", "audit the skill".