release: 2.1.0 - #14
Merged
Merged
Conversation
chore: back-merge v2.0.0 release into develop
Kivax was installed by cloning the repo and running install.py, which copied
share/ into ~/.kivax and symlinked the CLI onto PATH. That installer was a
reimplementation of what pip already does — dependency resolution (with a
--break-system-packages workaround for PEP 668), PATH placement, and a
kivax.bat shim on Windows — and it let the CLI and the store drift apart,
since updating one didn't update the other.
The global store is now package data at src/kivax/data/, so the CLI and the
material it copies into projects ship as one artifact and cannot disagree
about which version they are. `pipx install kivax` is the install, and
`pipx upgrade kivax` is the entire upgrade path.
- bin/kivax -> src/kivax/cli.py, exposed as the `kivax` console script
- share/lib/*.py -> src/kivax/lib/, a real package with relative imports
instead of sys.path.insert; passthrough subcommands re-exec via
`python -m kivax.lib.kivax_<name>` rather than a path to a script file
- share/{agents,runtime,templates,ci} + the two catalogs -> src/kivax/data/
- KIVAX_HOME still overrides the store, which is now the contributor flow
and the escape hatch for a vendored one
- the rendered-agent cache moves to ~/.cache/kivax, since site-packages must
be treated as read-only; it stays inside KIVAX_HOME when that is set, so
two stores never share one cache
BREAKING CHANGE: install.py is gone. Existing users must `pipx install kivax`
and remove ~/.kivax plus the old ~/.local/bin/kivax symlink, which would
otherwise keep shadowing the installed CLI. `kivax version` and `kivax doctor`
detect the leftovers and say so. Projects need no migration.
Editing the store by hand is no longer possible. It was never supported —
agents are generated and `kivax upgrade` overwrites a project's copies — and
the README now documents the two real options: the `agents:` block in
config.yml for models, upstream changes for behavior.
The suite runs against src/ on sys.path, where a wrong package-data glob is
invisible, so a `package` CI job builds the wheel, asserts its store file
count matches the tree, installs it into a clean virtualenv, and drives a
real init/feature/doctor/validate from a temp directory. The install job it
replaces tested an installer that no longer exists.
Co-Authored-By: Claude <noreply@anthropic.com>
The template still told contributors to run `--cov=.`, `ruff check . bin/kivax`, and to update agents under `share/` — all three obsolete as of the packaging change. Adds a line for the `package` job, which is the only check that sees the built wheel and so the only one that can catch a broken package-data glob. Co-Authored-By: Claude <noreply@anthropic.com>
The package job asserts that 'kivax feature new' is refused before project
setup, by piping the failing command into grep. That worked in the install
job this replaces, whose steps ran under the implicit `bash -e {0}`. Adding
`defaults.run.shell: bash` for the Windows leg of the matrix switches the
invocation to `bash -eo pipefail {0}`, and under pipefail a pipeline whose
first command fails on purpose fails the step — so the job went red on all
three runners while the packaging it was checking was fine.
Captures the output instead, and asserts both halves in one invocation: that
the command is refused, and that it says why.
Co-Authored-By: Claude <noreply@anthropic.com>
feat(packaging): ship kivax as a pip package with the store inside it
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
Releases 2.1.0: Kivax becomes a pip package.
pipx install kivaxis the whole installation on Windows, macOS, and Linux, andpipx upgrade kivaxis the whole upgrade.Rolls up #13 from
develop.Why
install.pyreimplemented what pip already does — dependency resolution (with a--break-system-packagesworkaround for PEP 668), PATH placement, and akivax.batshim on Windows — and it let the CLI and the global store drift, since updating one didn't update the other. The store now ships as package data inside the wheel, so the two are one artifact.What a reviewer should know
Breaking for existing users.
install.pyis gone. Anyone who installed by cloning mustpipx install kivaxand remove~/.kivaxplus the old~/.local/bin/kivaxsymlink, which would otherwise keep shadowing the installed CLI.kivax versionandkivax doctordetect the leftovers and say so. Projects need no migration — everythingkivax initwrote is already committed.Editing the store by hand no longer works. It was never supported (agents are generated,
kivax upgradeoverwrites project copies), so this stops pretending rather than removing a feature. README documents the alternatives: theagents:block for models, upstream for behavior,KIVAX_HOMEfor a vendored store.Release mechanics are new and untested end to end. This is the first tag that
.github/workflows/release.ymlwill act on. It validates the tag againstsrc/kivax/data/VERSION(so the tag must bev2.1.0), builds, and publishes to PyPI via Trusted Publishing. A failed publish burns nothing — PyPI only rejects a re-upload of a version that landed — so the job can be re-run.Verified
All checks green on #13 across Linux, macOS, and Windows: 482 tests, coverage 96.89%, ruff clean.
The
packagejob is the one that matters here — it builds the wheel, asserts its store file count matches the tree exactly (46/46), installs it into a clean virtualenv with no access to the checkout, and drives a realinit/feature new/doctor/validate. That last one confirms theos.execvswitch topython -m kivax.lib.<mod>survives a real install.Checklist
pytest testspassesruff check .passessrc/kivax/data/updated — the sample CI gate now installs withpip install kivaxpackageCI job passes on all three runners🤖 Generated with Claude Code