Release
Local acceptance
Run the following in an isolated environment at the supported Python version:
python -m pytest -q
python -m pip check
chatclash --version
chatclash --tree
chatclash --tree-brief
python -m build
python -m twine check dist/*
mkdocs build --strict
git diff --check
Install the built wheel into a fresh environment and read back --version, --tree, --tree-brief, and ChatEnv provider discovery. An editable source environment is not public-install verification.
Release order
- Select the next forward version from PyPI, remote tags, and default-branch source.
- Update version, changelog, tests, and user docs; complete local acceptance and independent review first.
- Push a branch and create a PR; merge only after checks are green for its exact head.
- Synchronize the default branch and prove the release tag targets the merged default-branch commit, not a feature-branch commit.
- Create and push the
v<version>tag in the repository's established style, then wait for the tag-triggered publish workflow. - Read back exact-version PyPI metadata, wheel, and sdist; install the exact version from public PyPI in a cache-free isolated environment.
- Synchronize the canonical checkout, confirm a clean status, and install the exact public release into the standard ChatArch venv when appropriate.
Service boundary
Publishing a Python package does not automatically replace the engine, refresh a subscription, or restart chatclash-mihomo.service. Plan production migration separately: install the published version, render and validate configuration, then explicitly reload/restart in an authorized maintenance window and verify proxy behavior. Never commit or publish subscription data, authentication, or generated YAML.