|
| 1 | +# 0.5.8 release evidence — 2026-08-02 |
| 2 | + |
| 3 | +## Candidate |
| 4 | + |
| 5 | +- Package version: `0.5.8` in `pyproject.toml`, `airlock.__version__`, and the tracing |
| 6 | + version. `scripts/check-version-consistency.py --tag v0.5.8` passed. |
| 7 | +- Dependency authority: `uv.lock` refreshed after the manifest version change; |
| 8 | + `uv lock --check` passed. Docker resolves the locked LiteLLM `1.94.1` and validates |
| 9 | + it against Airlock's declared `>=1.94.1,<2` floor at image build time. |
| 10 | + |
| 11 | +## P-8 / #34 validation |
| 12 | + |
| 13 | +`uv run pytest tests/test_tui.py -q -k config` passed: **12 passed**. |
| 14 | + |
| 15 | +The ConfigPane has one field-applicability contract. It marks restart-required and |
| 16 | +unapplied controls, reports no-op/live/restart/mixed Applies without values, and leaves |
| 17 | +`config.local.yaml` loading semantics unchanged. |
| 18 | + |
| 19 | +## GitHub issue #22 audit — PASS |
| 20 | + |
| 21 | +| Required decision | Evidence | |
| 22 | +|---|---| |
| 23 | +| Keep `/v1/chat/completions` OpenAI-compatible | `airlock/docs.py` conceptual/API documentation and `tests/test_docs.py` | |
| 24 | +| Accept Gemini request controls without a new body response contract | `airlock/gemini_interface.py` and `tests/test_gemini_interface.py` | |
| 25 | +| Surface Gemini mode/state through response headers | `airlock/callbacks/model_override_headers.py` and `tests/test_model_override_headers.py` | |
| 26 | +| Preserve structured provider detail for operators | `airlock/callbacks/request_event.py`, enterprise JSONL projection, `tests/test_enterprise_logger.py`, and the TUI Guards projection | |
| 27 | + |
| 28 | +Focused audit command: |
| 29 | + |
| 30 | +```text |
| 31 | +uv run pytest tests/test_gemini_interface.py tests/test_model_override_headers.py \ |
| 32 | + tests/test_enterprise_logger.py tests/test_tui.py -q -k 'gemini or config' |
| 33 | +# 24 passed, 143 deselected |
| 34 | +``` |
| 35 | + |
| 36 | +The issue is documentation/decision scope, not a request for a new provider-native |
| 37 | +response body. It is eligible to close with this evidence. |
| 38 | + |
| 39 | +## Local release gate |
| 40 | + |
| 41 | +| Gate | Result | |
| 42 | +|---|---| |
| 43 | +| Full non-live suite | `2768 passed, 107 deselected, 1 xpassed` (98 deprecation warnings) | |
| 44 | +| Ruff check / format | clean: `airlock/` and `tests/` | |
| 45 | +| Mypy | `airlock/fast/` clean (`--ignore-missing-imports`) | |
| 46 | +| Dependency audit | no known vulnerabilities; local project and spaCy model are intentionally not PyPI-auditable | |
| 47 | +| Docs | `mkdocs build --strict` passed | |
| 48 | +| Build | `uv build` produced `airlock_llm-0.5.8.tar.gz` and wheel | |
| 49 | +| Clean wheel install | fresh temporary venv imported `airlock 0.5.8`; `airlock --help` passed | |
| 50 | +| Docker | image built with locked LiteLLM `1.94.1`; isolated container returned `"I'm alive!"` from `/health/liveliness` with `AIRLOCK_HOST=0.0.0.0` and optional services disabled; container stopped | |
| 51 | + |
| 52 | +Live-provider tests remain opt-in and were intentionally deselected. The direct funded |
| 53 | +OpenAI `reasoning_effort=max` probe remains unavailable because no funded key is |
| 54 | +present; documented GPT-5.6 support is covered by the model-specific contract test. |
| 55 | + |
| 56 | +## Remaining release actions |
| 57 | + |
| 58 | +1. Commit this release candidate. |
| 59 | +2. Close GitHub issue #22 with this audit evidence. |
| 60 | +3. Push the candidate and require the GitHub Actions CI workflow to pass. |
| 61 | +4. Create and push `v0.5.8`; the release workflow then performs PyPI trusted |
| 62 | + publishing and creates the GitHub release. |
0 commit comments