fix(void): carry python3-pysocks and constrain the audio and SOCKS floors #39

Merged
xavierk merged 2 commits from fix/void-dependency-floors into main 2026-11-06 16:17:20 +00:00
Owner

Description

Void's stock python3-PyAudio (0.2.12_5) and python3-pysocks (1.7.0_8) sit below the project floors (pyaudio>=0.2.13, PySocks>=1.7.1,<2). voculinux depended on both by bare name. An installed stock package already satisfies a bare name, so a user who has the stock packages is never upgraded and runs below the floor.

As spec #16 requires, the gap is closed visibly in the personal repository and not hidden:

  • packaging/void/srcpkgs/python3-pysocks: PySocks 1.7.1 from the PyPI sdist that uv.lock pins. The digest was verified by hand (3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0). The ${PYPI_SITE} URL form gives the same digest.
  • voculinux depends on python3-PyAudio>=0.2.14_1 and python3-pysocks>=1.7.1_1. This is the xbps name>=version_revision form.
  • The install smoke installs the stock packages first, then voculinux, and fails unless each reads back as its carried pkgver. This is the upgrade path the defect describes.
  • Tests: each constraint must equal its carried template's current version and revision. The offline stock-version test only records the versions verified on 2026-11-06. The live signal is the install smoke: once Void's stock package reaches the carried version, the constraint is already met, the stock package is kept, and the pkgver check fails. The depends parser refuses malformed tokens instead of stripping them. Every package the gate builds needs an install recipe.
  • Docs: a "Version floors" section in packaging/void/README.md, and a pointer in docs/RELEASE_PROCESS.md.

Verification

  • Void manual: >= with the _revision form is valid. The subpackage example uses >=${version}_${revision}.
  • Live Void index (xbps-query -R): stock matches neither >=0.2.14_1 nor >=1.7.1_1. The control >=0.2.12_5 matches the stock package.
  • xlint exits 0 on python3-PyAudio, python3-pysocks and voculinux, in the pinned void-glibc-full image.
  • black, isort and flake8 are clean on the touched Python. shellcheck reports no warnings on the touched scripts. jscpd reports 4.32% against the threshold of 5.
  • pytest on the Void, release-workflow and rename-sweep test files: 190 passed. The full suite was not run.

Not run

  • The container release build and install smoke. A human-supervised run does that after merge. The new stock-then-upgrade check has not run in a container. It is the first thing to watch.

Open questions

  • xbps has one comparator per dependency, so PySocks' <2 cannot be written. The carried 1.7.1 satisfies it. A future Void python3-pysocks 2.x would also satisfy >=1.7.1_1, and this dependency does not exclude it.
  • The pysocks template keeps Void's default check phase, as the stock template does. The Void manual runs make_check only when XBPS_CHECK_PKGS is set or -Q is passed. The container passes neither, so the sdist's own tests (which need test/bin/3proxy) do not run in the release build.
  • The maintainer field mirrors the stock template ("Orphaned"), as python3-pywhispercpp does.

Related issue

Refs #16. This PR does not close the spec.

Type of change

  • Bug fix
  • Packaging / CI

Checklist

  • Code follows project style (Black, isort, flake8)
  • Documentation updated when user-facing behavior or install steps change
  • Tests added or updated for the change
  • Local tests pass (pytest): the Void, release-workflow and rename-sweep files pass (191). The full non-slow suite: 5581 passed, 10 failed. Two installer tests fail identically on origin/main. Eight perf-baseline tests pass alone on both branch and main, and fail only inside the full run (test-order pollution, not investigated).
  • Conventional commit message style

Notes for reviewers

  • Start with packaging/void/srcpkgs/voculinux/template (the two constraints) and the new python3-pysocks template.
  • Follow-up commit 4a0a245: a cross-check that the constrained depends, the stock pre-install and the pkgver loop name the same packages, and the README wording on the live signal.
  • The install-smoke change in packaging/void/container-release.sh is the defect's regression guard. It is shellchecked and tested by string, but not run.
## Description Void's stock `python3-PyAudio` (0.2.12_5) and `python3-pysocks` (1.7.0_8) sit below the project floors (`pyaudio>=0.2.13`, `PySocks>=1.7.1,<2`). `voculinux` depended on both by bare name. An installed stock package already satisfies a bare name, so a user who has the stock packages is never upgraded and runs below the floor. As spec #16 requires, the gap is closed visibly in the personal repository and not hidden: - `packaging/void/srcpkgs/python3-pysocks`: PySocks 1.7.1 from the PyPI sdist that `uv.lock` pins. The digest was verified by hand (`3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0`). The `${PYPI_SITE}` URL form gives the same digest. - `voculinux` depends on `python3-PyAudio>=0.2.14_1` and `python3-pysocks>=1.7.1_1`. This is the xbps `name>=version_revision` form. - The install smoke installs the stock packages first, then `voculinux`, and fails unless each reads back as its carried pkgver. This is the upgrade path the defect describes. - Tests: each constraint must equal its carried template's current version and revision. The offline stock-version test only records the versions verified on 2026-11-06. The live signal is the install smoke: once Void's stock package reaches the carried version, the constraint is already met, the stock package is kept, and the pkgver check fails. The depends parser refuses malformed tokens instead of stripping them. Every package the gate builds needs an install recipe. - Docs: a "Version floors" section in `packaging/void/README.md`, and a pointer in `docs/RELEASE_PROCESS.md`. ## Verification - Void manual: `>=` with the `_revision` form is valid. The subpackage example uses `>=${version}_${revision}`. - Live Void index (`xbps-query -R`): stock matches neither `>=0.2.14_1` nor `>=1.7.1_1`. The control `>=0.2.12_5` matches the stock package. - xlint exits 0 on `python3-PyAudio`, `python3-pysocks` and `voculinux`, in the pinned void-glibc-full image. - black, isort and flake8 are clean on the touched Python. shellcheck reports no warnings on the touched scripts. jscpd reports 4.32% against the threshold of 5. - pytest on the Void, release-workflow and rename-sweep test files: 190 passed. The full suite was not run. ## Not run - The container release build and install smoke. A human-supervised run does that after merge. The new stock-then-upgrade check has not run in a container. It is the first thing to watch. ## Open questions - xbps has one comparator per dependency, so PySocks' `<2` cannot be written. The carried 1.7.1 satisfies it. A future Void `python3-pysocks` 2.x would also satisfy `>=1.7.1_1`, and this dependency does not exclude it. - The pysocks template keeps Void's default check phase, as the stock template does. The Void manual runs `make_check` only when `XBPS_CHECK_PKGS` is set or `-Q` is passed. The container passes neither, so the sdist's own tests (which need `test/bin/3proxy`) do not run in the release build. - The maintainer field mirrors the stock template ("Orphaned"), as `python3-pywhispercpp` does. ## Related issue Refs #16. This PR does not close the spec. ## Type of change - [x] Bug fix - [x] Packaging / CI ## Checklist - [x] Code follows project style (Black, isort, flake8) - [x] Documentation updated when user-facing behavior or install steps change - [x] Tests added or updated for the change - [ ] Local tests pass (`pytest`): the Void, release-workflow and rename-sweep files pass (191). The full non-slow suite: 5581 passed, 10 failed. Two installer tests fail identically on `origin/main`. Eight perf-baseline tests pass alone on both branch and main, and fail only inside the full run (test-order pollution, not investigated). - [x] Conventional commit message style ## Notes for reviewers - Start with `packaging/void/srcpkgs/voculinux/template` (the two constraints) and the new `python3-pysocks` template. - Follow-up commit 4a0a245: a cross-check that the constrained depends, the stock pre-install and the pkgver loop name the same packages, and the README wording on the live signal. - The install-smoke change in `packaging/void/container-release.sh` is the defect's regression guard. It is shellchecked and tested by string, but not run.
xavierk added 1 commit 2026-11-06 16:02:56 +00:00
fix(void): carry python3-pysocks and constrain the audio and SOCKS floors
CI / security (pull_request) Successful in 1m13s
CI / lint (pull_request) Successful in 23s
CI / ai-review (pull_request) Successful in 8s
06b7b79664
Void's stock python3-PyAudio (0.2.12_5) and python3-pysocks (1.7.0_8) sit
below the project floors (pyaudio>=0.2.13, PySocks>=1.7.1). voculinux
depended on both by bare name, which an installed stock package already
satisfies, so a user who had the stock packages was never upgraded.

- add packaging/void/srcpkgs/python3-pysocks: PySocks 1.7.1 from the PyPI
  sdist that uv.lock pins (sha256 3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0)
- voculinux depends on python3-PyAudio>=0.2.14_1 and python3-pysocks>=1.7.1_1
- the install smoke installs the stock packages first, then voculinux, and
  fails unless each reads back as its carried pkgver
- tests: each constraint must name its carried template's current version
  and revision; the stock version must sit below the floor; the depends
  parser refuses malformed tokens instead of stripping them
- docs: "Version floors" in packaging/void/README.md; a pointer in
  docs/RELEASE_PROCESS.md

Refs #16
xavierk added 1 commit 2026-11-06 16:15:07 +00:00
test(void): tie the stock pre-install to the constrained depends
CI / security (pull_request) Successful in 1m10s
CI / lint (pull_request) Successful in 25s
CI / ai-review (pull_request) Successful in 8s
4a0a245578
The version-constrained carried packages are named in three places: the
voculinux depends, the stock pre-install line and the pkgver loop of the
install smoke. Nothing required them to agree, so a third gap package
could be added to one place and missed in the others. The new test
requires all three to name the same set.

Also corrects the README "Version floors" wording: the offline
stock-version test only records the versions verified on 2026-11-06,
and the install smoke's pkgver check is the live signal.

Refs #16
xavierk merged commit 37cf549956 into main 2026-11-06 16:17:20 +00:00
Sign in to join this conversation.