Repository navigation
CI, MIT license, and jitagent 0.0.1 on PyPI - #3
Merged
Merged
Conversation
Two workflows. CI runs the unit tests and the corpus on 3.11/3.12/3.13, then builds the distribution, runs `twine check --strict`, and installs the wheel into a clean venv to run the CLI from it — everything else tests the source tree, so a broken console script or missing package data would otherwise reach PyPI unnoticed. Release publishes over Trusted Publishing (OIDC, no stored token) when a GitHub Release is published, not on a tag push: a tag is cheap to create by accident and a PyPI version can never be reused. It re-runs the tests on the released commit and refuses to publish if the tag and the version in pyproject disagree. Preparing the package turned up two things worth fixing first: - **`agentjit selftest` was broken for anyone who pip-installed it.** It resolved the corpus relative to the source tree, so it only worked from a git checkout — while the README tells you to run it right after installing. The corpus now lives in src/agentjit/corpus/ and ships as package data. It is the one check worth running on a new machine anyway: how the sandbox contains a memory bomb is platform-dependent. - **`coverage` was a mandatory dependency nothing could reach.** The branch-coverage gate was cut a while ago; its plumbing survived in sandbox.py and _child.py with no caller able to switch it on. Removed, along with the dependency, so `jsonschema` is the only one left. The distribution is `agent-jit` because `agentjit` is taken on PyPI by an unrelated project; the import name and the CLI stay `agentjit`. Also adds LICENSE (MIT), CHANGELOG.md, and CONTRIBUTING.md — which records what a new verification gate has to prove, given five were removed here for never having caught a real model's mistake. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeJE3eqihzPMnwr1TDJGvp
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
PyPI rejected `agent-jit`: its similarity check strips `-`, `_` and `.` before
comparing, so it normalises to `agentjit` — which exists. My earlier
availability check only asked whether the project existed, which is a weaker
question than whether the name can be registered.
Looking at what holds the name made the decision easy. It is not abandoned: 5
releases, the most recent the day before this, and it is the same concept
("Just-In-Time Compiler for AI Agent Trajectories"). More to the point, its
wheel installs a top-level `agentjit` package — so sharing the import name
would mean the two distributions silently overwrite each other's files in
site-packages. So this is a full rename, not just a distribution name:
`jitagent` for the package, the import, the CLI, JITAGENT_HOME and
~/.jitagent. The GitHub repository keeps its name.
The README demo was re-captured rather than search-and-replaced. It claims to
be real output, and a transcript edited by sed is not — the run behind it is
fresh, with different generated cases and a different handle.
That re-capture also exposed a defect in capture_demo.sh: the CLI's output
goes to the transcript, so when a synthesis call failed transiently the
operator got a bare exit code, and the EXIT trap then deleted the log that
would have explained it. It now prints the tail of the log on failure.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FeJE3eqihzPMnwr1TDJGvp
The repository is Birfy/jitagent now, so the project URLs, the CI badge and the clone line follow it. GitHub redirects the old path, but a package's metadata should name where the code actually is, not rely on a redirect that lapses if the old name is ever reused. Also stops tracking src/*.egg-info, which an editable install regenerates. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeJE3eqihzPMnwr1TDJGvp
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.
Adds the plumbing to ship this: GitHub Actions CI, a license, and a release path to PyPI as
jitagent.The name
agent-jitwas rejected by PyPI — its similarity check strips-,_and.before comparing, so it normalises toagentjit, which exists. Looking at what holds that name settled the question: 5 releases, the most recent one day before this, and the same concept ("Just-In-Time Compiler for AI Agent Trajectories"). Its wheel also installs a top-levelagentjitpackage, so sharing the import name would mean the two distributions silently overwrite each other's files in site-packages.So everything is
jitagent— distribution, import, CLI,JITAGENT_HOME,~/.jitagent, and the repository.Two workflows
ci.yml— on every push tomainand every PR:audit_traps.pyagainst the committed audit results, so the numbers the README quotes cannot drift silentlytwine check --strict, then installs the wheel into a clean venv and runs the CLI out of itThat last step matters: everything else tests the source tree, so a broken console script or missing package data would sail through and only surface after upload. It caught a real bug immediately (below).
release.yml— publishes over Trusted Publishing (OIDC, no token stored anywhere) when a GitHub Release is published, not on a tag push. A tag is cheap to create by accident and a PyPI version can never be reused, even after deletion. It re-runs the tests on the released commit and refuses to publish if the tag and the version inpyproject.tomldisagree.workflow_dispatchpublishes to TestPyPI for a rehearsal.Three bugs found while preparing the package
selftestwas broken for anyone who pip-installed it. It resolved the corpus relative to the source tree, so it only worked from a git checkout — while the README tells you to run it immediately after installing. The corpus now lives insrc/jitagent/corpus/and ships as package data. It is the one check worth running on a new machine anyway: how the sandbox contains a memory bomb is platform-dependent (RLIMIT_ASon Linux, a watchdog on macOS).coveragewas a mandatory dependency nothing could reach. The branch-coverage gate was cut earlier, but its plumbing survived insandbox.pyand_child.pywith no caller able to switch it on. Removed along with the dependency, sojsonschemais the only runtime dependency left.capture_demo.shswallowed its own failures. The CLI's output goes to the transcript, so when a synthesis call failed transiently the operator got a bare exit code — and theEXITtrap then deleted the log that would have explained it. It now prints the tail of the log on failure. (Found by hitting it.)The demo was re-captured, not renamed
docs/demo.txtclaims to be real captured output, so a transcript edited by search-and-replace would have made that claim false. The run behind the animation is fresh under the new name — different generated cases, different handle.Also
LICENSE(MIT),CHANGELOG.md, andCONTRIBUTING.md— which records what a new verification gate has to prove, given that five were removed from this repo for never having caught a real model's mistake: a real failure it would have caught, a corpus case, and evidence it does not fire on correct code.Verified locally
Wheel metadata:
Name: jitagent,Version: 0.0.1,License-Expression: MIT,Requires-Python: >=3.11, one runtime dependency (jsonschema>=4.21).Releasing 0.0.1
The PyPI trusted publisher is configured. After this merges, publishing a GitHub Release tagged
v0.0.1runsrelease.yml, which re-runs the tests, checks the tag against the version, builds, and uploads over OIDC.🤖 Generated with Claude Code
https://claude.ai/code/session_01FeJE3eqihzPMnwr1TDJGvp