v0.4.2
Release-tooling-only patch on top of v0.4.1. No proxy code changes — v0.4.1's substitution and audit guarantees are unchanged. v0.4.1 was correctly published to PyPI and the core wire-format behavior was verified by the smoke harness's positive test on the published wheel. The release.yml pypi-install-smoke gate did its job: it caught a real signal mismatch and held back the GitHub Release until investigation was complete. The investigation found the proxy was behaving correctly; the harness's negative-assertion grep needed updating.
Fixed (release tooling)
tests/pypi-smoke/run.shNEGATIVE assertion now accepts the"type":"deny"audit event in addition to the"decision":"denied"/"decision":"forwarded_unmodified"shapes. The addon has two distinct deny paths for an unbound destination: (1) theunmatched_destination_policy: denypolicy gate fires BEFORE placeholder analysis when the request's host is in no binding at all and emits{"type":"deny","reason":"unmatched_destination",...}; (2) thedestination_not_in_bindingcheck inside the inject path fires when a placeholder IS present but the matched secret's bindings don't cover the request host and emits{"type":"inject_decision","decision":"denied",...}. The pypi-smoke negative test aims atexample.invalid(in no binding at all), so the policy gate fires first. The previous grep only knew path (2) and the smoke went red despite the proxy correctly returning 403 + auditing the deny.tests/docker-e2e/run.sh:236already greps the"type":"deny"shape, so this was a pypi-smoke-only regression introduced when the pypi-smoke harness was first added in v0.4.1.tests/pypi-smoke/docker-compose.ymluses${TEST_SECRET:-}instead of the strict${TEST_SECRET:?...}for theavp-initenv reference. The strict form blockeddocker compose down -vteardown whenTEST_SECRETwasn't exported, because compose interpolates all referenced vars at parse time even fordown. The empty default unblocks teardown without weakening the test:run.shstill exports the real value beforecompose up, and a manualcompose upwithoutTEST_SECRETproduces a brokensecrets.ymlthat fails the positive assertion at run time rather than at compose time.
Changed
- README.md and tests/pypi-smoke/README.md version pointers bumped from
0.4.1to0.4.2. The "Status" prose now leads with the v0.4.2 framing (release-tooling patch only; v0.4.1 guarantees unchanged) before recapping v0.4.1 and v0.4.0.