Skip to content

Fix Proxy command ownership and release 0.9.3 - #149

Merged
antoinezambelli merged 4 commits into
mainfrom
az/proxy-duel
Aug 22, 2026
Merged

Fix Proxy command ownership and release 0.9.3#149
antoinezambelli merged 4 commits into
mainfrom
az/proxy-duel

Conversation

@antoinezambelli

Copy link
Copy Markdown
Owner

Summary

Forge 0.9.3 corrects ownership of the global forge-proxy command.

The forge-guardrails Python package previously installed its own
forge-proxy launcher even though the standalone Proxy distribution has a
dedicated installer and complete install, update, and uninstall lifecycle.
When both products were installed, normal command resolution could select the
Python launcher instead of the standalone installation.

This release makes the boundary explicit: the standalone distribution
exclusively owns forge-proxy, while the Python package continues to expose
Proxy through python -m forge.proxy.

Proxy request handling, routing, backend behavior, and guardrail policy are
unchanged.

Changes

  • Remove the forge-proxy console entry point from the Python distribution.
  • Preserve python -m forge.proxy as the Python-managed execution path.
  • Launch the Docker image through python -m forge.proxy.
  • Keep tomli-w as a normal package and standalone-artifact dependency.
  • Refuse standalone installation or update when an unowned forge-proxy
    exists on PATH or occupies the intended command pathname.
  • Report the conflicting path and direct owners of legacy pip launchers to
    upgrade forge-guardrails in the same Python environment before retrying.
  • Never overwrite, rearrange PATH around, or delete an unowned command.
  • Preserve an unowned command that replaces a previously installed standalone
    shim while still removing Forge-owned state and PATH integration.
  • Keep the existing Windows PATH append behavior and existing POSIX PATH
    behavior unchanged.
  • Extend the shared, version-parameterized native lifecycle with collision,
    name-resolution, replacement, and ownership-aware uninstall checks.
  • Exercise that same lifecycle through the existing Windows, Linux, and macOS
    candidate jobs without adding workflows, jobs, or release-specific CI.
  • Make the existing Anthropic wire-capture tests compatible with both the
    Anthropic 0.86 httpx transport and the Anthropic 1.x httpx2 transport.

Migration

Users who received a forge-proxy launcher from an older
forge-guardrails installation should upgrade that package in the same Python
environment. Pip will remove the launcher it owns. The standalone installer
can then install and own the global command without competing PATH entries.

The standalone installer deliberately does not delete or overwrite the
existing command.

Validation

  • Full unit suite with Anthropic 0.86: 1,540 passed, 1 skipped
  • Full unit suite with Anthropic 1.0: 1,540 passed, 1 skipped
  • Coverage: 93%
  • Focused Proxy and release suite: 148 passed
  • Wheel and sdist built, inspected, and passed Twine checks
  • Installed wheel contains no forge-proxy console entry point
  • python -m forge.proxy --version reports 0.9.3
  • Windows standalone one-file build and lifecycle: passed
  • Reusable ownership lifecycle: collision refusal, bare-command resolution,
    replacement refusal, replacement-preserving uninstall, normal update, and
    failure recovery passed
  • Disposable Windows migration from PyPI forge-guardrails==0.9.2 to the
    local 0.9.3 wheel confirmed that pip removes the old launcher
  • Read-only correctness review: no findings
  • git diff --check: clean

The Windows, Linux, and macOS Proxy candidate jobs and aggregation remain
required before merge. Their retained candidate bytes will be promoted after
the normal PyPI and GitHub release steps.

Release

This is a full Proxy release:

  • Forge/PyPI version: 0.9.3
  • Standalone Proxy pointer: 0.9.3
  • Hugging Face dataset publication: none

🤖 Generated with Codex and human-reviewed.

@antoinezambelli
antoinezambelli merged commit 3565af3 into main Aug 22, 2026
7 checks passed
@antoinezambelli
antoinezambelli deleted the az/proxy-duel branch August 22, 2026 03:36
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.

1 participant