Skip to content

release: v0.2.0#5

Merged
primeobsession merged 3 commits into
mainfrom
release/v0.2.0
Apr 20, 2026
Merged

release: v0.2.0#5
primeobsession merged 3 commits into
mainfrom
release/v0.2.0

Conversation

@primeobsession
Copy link
Copy Markdown
Contributor

Summary

Bumps prx-cli from 0.1.0 → 0.2.0. Monorepo alignment with parallect 0.2.0 and prx-spec 0.2.0.

Changes

User-facing

  • prx --version / prx -V flag — prints the installed version without running a subcommand. Also catches "am I actually running the real prx" cases.
  • prx publish --collection <slug> flag, auto-creates collection if missing (PR feat(publish): --collection <slug> flag for direct-to-collection publishing #2)
  • README rewritten for public release with clear PRX expansion + mission
  • TUI install hint fixed (pip install "prx-cli[tui]" — the prx PyPI name is a third-party squatter stub)

Dependencies

  • prx-spec pin: >=0.1.0>=0.2.0 (picks up manifest v1.1)

Quality / testing (PR #4)

  • New E2E integration suite (tests/e2e/) drives the installed prx binary as a subprocess against a fake prxhub
    • Entry-point integrity: uv run prx --version exits 0 with real version string, asserts output does not contain "Hello from prx"
    • --version / -V flags print prx <__version__>
    • --help lists all 19 real subcommands
    • prx publish happy path + missing-key + missing-file + hub-500 error paths (clean exits, no leaked tracebacks)
  • CI now runs E2E across the Python 3.10–3.13 matrix on every PR

Verification (all on this branch, 2x check)

  • uv sync --all-extras --group dev — clean
  • uv run ruff check src/ tests/ — clean
  • uv run pytest tests/ -q (1st run) — 97 passed, 1 skipped in 2.28s
  • uv run pytest tests/ -q (2nd run) — 97 passed, 1 skipped in 2.42s
  • uv run pytest tests/e2e -v10 passed, 1 skipped
  • uv build — wheel + sdist produced, metadata + prx = prx.cli:app entry point verified
  • Fresh venv install of the built wheel:
    • prx --versionprx 0.2.0
    • prx -Vprx 0.2.0
    • Does NOT contain "Hello from prx" ✓

Release process (on merge)

Tag v0.2.0 on the merge commit. release.yml triggers on tag push and:

  1. Matrix tests (3.10/3.11/3.12/3.13)
  2. Verifies tag ↔ pyproject.toml version match
  3. Publishes to PyPI via trusted publishing (OIDC, no token needed)
  4. Creates GitHub Release with auto-generated notes
  5. Dispatches pypi-release event to parallect/homebrew-tap

Test plan post-merge

  • CI passes on this PR
  • Tag pushed, release.yml run goes green
  • Fresh pip install prx-cli==0.2.0 outside the repo → prx --versionprx 0.2.0
  • Charles (or anyone) re-runs through the getting-started card → prx publish report.prx works end-to-end

🤖 Generated with Claude Code

scjfurniss and others added 3 commits April 20, 2026 12:25
Readers hit ".prx" without knowing what it stands for or why it matters.
Lead with the expansion (Portable Research eXchange) and the mission:
sharable AI research with cryptographic attribution, private or public.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* docs(tui-guide): correct install command to prx-cli[tui]

`pip install "prx[tui]"` installs the unrelated squatter stub on PyPI;
our package is `prx-cli`. Aligns this file with README.md, PRXHUB.md,
CHANGELOG.md, and the CLI's own error messages — all of which already
say `prx-cli`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(prx-cli): add E2E integration tests for binary + publish flow

Today a user installed our CLI and got `Hello from prx!` back from
`prx publish`. Unit tests don't catch that class of regression because
they invoke the Typer app in-process — they never see whether the
installed binary is the real one or a Typer placeholder / squatter.

This change adds a real end-to-end suite under `tests/e2e/` that shells
out to `uv run prx` and asserts on stdout/stderr/returncode, plus the
plumbing to exercise the full publish flow against a fake prxhub:

- `prx --version` / `-V` now exist on the root command (so users can
  verify which install they're actually running — and so CI can assert
  we never ship `Hello from prx!`).
- `tests/e2e/conftest.py` — fixtures: isolated HOME, real Ed25519
  signing key, pytest-httpserver-backed fake hub with 3-step publish
  stubs, and a real .prx bundle built via `prx_spec.write_bundle`.
- `tests/e2e/test_cli_binary.py` — 10 passing tests covering: entry
  point integrity, --version output, --help lists the real command set,
  `prx publish` happy path, missing signing key, missing file, and
  server 500 (all assert no stack trace leaks).
- CI now runs `tests/e2e/` as a dedicated step on every PR.
- `pytest-httpserver` added to the dev group.

Also cleaned up 6 pre-existing unused-import lint errors on base so the
new E2E CI step starts from a clean `ruff check`.

Local run: 97 passed, 1 skipped in ~2.4s.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Justin Furniss <justin@securecoders.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bumps prx-cli from 0.1.0 → 0.2.0. Monorepo alignment with parallect
0.2.0 and prx-spec 0.2.0; prx-spec dependency pin lifted to >=0.2.0.

User-visible since 0.1.0:
- `prx --version` / `-V` flag (new)
- `prx publish --collection <slug>` flag with auto-create
- README rewrite, TUI install-hint fix

Quality:
- New E2E integration suite (tests/e2e/) drives the installed binary as
  a subprocess against a fake prxhub — guards against "binary prints
  a stub" regressions (which is how the squatter `prx` package on PyPI
  bit a real user today).
- CI now runs E2E across the Python 3.10-3.13 matrix.

Verification:
- uv sync, ruff check — clean
- pytest tests/ — 97 passed, 1 skipped (2x run)
- uv build — wheel + sdist produced; metadata + entry-point verified
- Fresh venv install of dist/prx_cli-0.2.0-py3-none-any.whl:
    `prx --version` → "prx 0.2.0"
    `prx -V`        → "prx 0.2.0"
    (does NOT contain "Hello from prx")

Tag v0.2.0 after merge; release.yml publishes to PyPI via OIDC, cuts
the GitHub release, and dispatches to homebrew-tap.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@primeobsession primeobsession merged commit 2d9a39a into main Apr 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants