docs: drop standalone pip --user install in favor of pipx#25
Closed
alexkroman wants to merge 12 commits into
Closed
docs: drop standalone pip --user install in favor of pipx#25alexkroman wants to merge 12 commits into
alexkroman wants to merge 12 commits into
Conversation
pipx is the recommended way to install a Python CLI, and the bare `pip install --user "git+..."` command increasingly fails under PEP 668 externally-managed environments (Debian 12+, Ubuntu 23.04+, Homebrew). install.sh still falls back to pip --user automatically when pipx is absent, so pipx-less users remain covered by the curl|sh path. https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
Declare `depends_on "ffmpeg"` in the formula skeleton so `brew install aai` yields a working CLI without a separate `brew install ffmpeg`. ffmpeg is a runtime executable that transcribe/stream shell out to for decoding non-WAV/URL audio (not a build/link dep of any Python package), so it belongs alongside portaudio in the runtime depends_on list. https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
…l docs Implements the in-repo Homebrew tap (Formula/aai.rb) from the tap plan: a Language::Python::Virtualenv formula that builds aai from the v0.1.0 GitHub tag tarball and installs its 51-package runtime closure from pinned resource stanzas. Native deps (portaudio, ffmpeg, openssl@3, python@3.13, rust/pkgconf for builds) are declared via depends_on so brew install yields a fully working CLI. The resources were generated offline from uv.lock via the new scripts/generate_brew_resources.py (plan Appendix A) since brew isn't available in this environment; the two Linux-only keyring deps (jeepney, secretstorage) are scoped to on_linux and the Windows-only pywin32-ctypes is dropped. README documents the brew tap install path. Pending before the tap goes live: cut the v0.1.0 release/tag on main to fill the placeholder source sha256, then brew style/audit/install/test on macOS to validate the build (neither possible in this Linux env). https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
CI only exercises Python 3.12, so the previous 3.11 floor (and the stale 3.10-3.13 note) over-claimed support. Bump the minimum to 3.12 across the board: pyproject requires-python + classifiers, mypy/pyright/ruff target versions, the install.sh runtime gate and its tests, the doctor check, the README badge/prose, and AGENTS.md. 3.13 stays supported (the Homebrew formula pins python@3.13 and audioop-lts backfills audioop there). https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
Two changes from a quality pass: - Regenerate Formula/aai.rb against the post-3.12 uv.lock. Bumping requires-python to >=3.12 dropped three Python <=3.11 backports from the runtime closure (backports-tarfile, importlib-metadata, zipp), but the formula still carried them as phantom resources. Now 48 resources, matching the lock. - Consolidate the per-line out.append() calls in the resource generator into one resource-block string (byte-identical output). https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
Add a lint-formula job that runs brew style on Formula/aai.rb via the SHA-pinned Homebrew/actions/setup-homebrew action, so the formula gets real Homebrew linting on every PR instead of only a ruby -c syntax check. Scoped to brew style (offline) deliberately: the stricter brew audit --strict --online and a brew install/test build need the real source sha256, which stays a placeholder until the v0.1.0 tag is cut, so those belong in a release-time job (tap plan Task 4/6). https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
The 3.12 bump set ruff target-version=py312, which activated PEP 695 modernization lints across the tree (I'd only linted changed files): - UP047: use def f[T](...) generics in auth/flow.py and output.py - UP040: use the 'type' keyword for the alias in streaming/macos.py The new brew style job also flagged two real formula offenses: - DependencyOrder: sort the runtime depends_on (ffmpeg before openssl@3/portaudio) - ComponentsOrder: move the on_linux block above the resource stanzas https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
CI previously tested only 3.12 while the Homebrew formula ships python@3.13 and the classifiers claim 3.13 — an untested shipped runtime. Matrix the check job over [3.12, 3.13] (fail-fast off) and pin UV_PYTHON to the matrix version so check.sh's uv run/build actually exercise each interpreter. Verified the full suite passes on both locally. https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
…aths-ci-Uhfly # Conflicts: # aai_cli/output.py
Add 'synchronize' to the pull_request trigger types so a PR's checks re-run on every new commit, instead of going stale at the run from when the PR was opened/reopened. https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
- Scope push to main: PRs are now covered by the pull_request trigger (incl. synchronize), so pushing a PR commit no longer fires both a push and a pull_request run for the same SHA. - Add a concurrency group that cancels superseded PR/branch runs on a new push, while never cancelling a main run. - Add timeout-minutes: 15 to every job so a hung step fails fast instead of burning toward GitHub's 6-hour default. Trade-off: branches without an open PR no longer auto-run CI; they run once a PR is opened (which also fixes fork-PR coverage). https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
…ection The py3.12/py3.13 matrix renamed the check contexts to '... (py3.12)' and '... (py3.13)', so the branch-protection rule requiring the un-suffixed 'lint + typecheck + tests' could never be satisfied and blocked the PR. Add a check-result gate job that re-publishes that exact name, green only when every matrix cell passed (if: always() + explicit result check, so a failed/skipped/cancelled matrix can't satisfy it). Pointing branch protection at this one stable name also makes future matrix changes safe. https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq
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.
pipx is the recommended way to install a Python CLI, and the bare
pip install --user "git+..."command increasingly fails under PEP 668externally-managed environments (Debian 12+, Ubuntu 23.04+, Homebrew).
install.sh still falls back to pip --user automatically when pipx is
absent, so pipx-less users remain covered by the curl|sh path.
https://claude.ai/code/session_01Y6P9zAX4orQUNAJDc4zLdq