The two easy Void dependency gaps close as in-repo package templates in void-packages layout under the packaging tree: the keyboard input library the app needs on X11, and an updated audio binding template that resolves the known version-floor gap deliberately (Void's current package is older than the project's declared floor). Templates follow Void manual conventions, build in the pinned Void glibc container with podman, and pass an import smoke. Dependency verification is never disabled to hide the version gap; if evidence shows the project floor itself was raised without need, that finding is recorded here and the floor decision is revisited explicitly instead.
Acceptance criteria
Both templates pass the Void template linter with no findings.
Both packages build in the pinned Void glibc container (podman) and the built packages import cleanly in a fresh container.
The audio binding version satisfies the project's declared floor, or this ticket records the evidence and decision if the floor is changed instead; no verification-disabling template options anywhere.
Template dependency lists name only packages verified to exist in current void-packages.
Blocked by
None (can start immediately).
## Parent
[Spec: Voculinux — Void Linux (glibc) Wayland/niri port of Vocalinux](https://git.bongbetic.com/xavierk/voculinux/issues/16)
## What to build
The two easy Void dependency gaps close as in-repo package templates in void-packages layout under the packaging tree: the keyboard input library the app needs on X11, and an updated audio binding template that resolves the known version-floor gap deliberately (Void's current package is older than the project's declared floor). Templates follow Void manual conventions, build in the pinned Void glibc container with podman, and pass an import smoke. Dependency verification is never disabled to hide the version gap; if evidence shows the project floor itself was raised without need, that finding is recorded here and the floor decision is revisited explicitly instead.
## Acceptance criteria
- [ ] Both templates pass the Void template linter with no findings.
- [ ] Both packages build in the pinned Void glibc container (podman) and the built packages import cleanly in a fresh container.
- [ ] The audio binding version satisfies the project's declared floor, or this ticket records the evidence and decision if the floor is changed instead; no verification-disabling template options anywhere.
- [ ] Template dependency lists name only packages verified to exist in current void-packages.
## Blocked by
None (can start immediately).
Ticket #25 implemented on branch feature/25 (commit c462ffb, cut from integration/spec16 tip 0a4d637, still current).
What was built (packaging/void/, void-packages layout + tests/test_void_small_deps.py, 12 offline policy tests):
srcpkgs/python3-pynput/template: new, 1.8.2_1 (Void ships no pynput; 404 on master 2026-11-05). python3-module style; depends python3-evdev python3-six python3-xlib (covers pynput's linux install_requires per uv.lock); post_patch strips setup_requires (void precedent: python3-pyte/python3-twitter) so the build never fetches setuptools-lint/sphinx/twine over the network.
srcpkgs/python3-PyAudio/template: updated 0.2.12_5 -> 0.2.14_1, checksum 78dfff38... (= uv.lock sdist hash). Only version/revision/maintainer/checksum differ from upstream; same build knobs and post_install. Floor decision: floor stays pyaudio>=0.2.13 (not relaxed); template satisfies it. No noverifypydeps/nopyprovides in either template.
tool_checksums.txt: base-image pinned to ghcr.io/void-linux/void-glibc-full index digest sha256:e98f8cdd... (tag: latest).
Acceptance evidence (podman, pinned container):
xlint: both templates pass with no findings.
xbps-src pkg: both build; PyAudio distfile checksum verifies OK; all deps resolved from current void repos (evdev 1.7.1_2, six 1.17.0_2, xlib 0.33_4, portaudio-devel, python3-devel, setuptools 80.10.2_2).
Fresh-container install via local xbps repo index: both install; python3 -c import pyaudio -> 0.2.14 against PortAudio V19.6.0-devel. pynput presence via find_spec (its X backend needs a display, same documented behavior as the native smoke gate).
Notes for later tickets: the void-glibc-full image ships dash, not bash, so xbps-src needs bash+git installed first (done in throwaway prep layers, not committed). python3 in current Void is 3.14. Staging checkout with built xbps left at ~/.cache/tmp/t25-void-packages (scratch, not committed).
Ticket #25 implemented on branch feature/25 (commit c462ffb, cut from integration/spec16 tip 0a4d637, still current).
What was built (packaging/void/, void-packages layout + tests/test_void_small_deps.py, 12 offline policy tests):
- srcpkgs/python3-pynput/template: new, 1.8.2_1 (Void ships no pynput; 404 on master 2026-11-05). python3-module style; depends python3-evdev python3-six python3-xlib (covers pynput's linux install_requires per uv.lock); post_patch strips setup_requires (void precedent: python3-pyte/python3-twitter) so the build never fetches setuptools-lint/sphinx/twine over the network.
- srcpkgs/python3-PyAudio/template: updated 0.2.12_5 -> 0.2.14_1, checksum 78dfff38... (= uv.lock sdist hash). Only version/revision/maintainer/checksum differ from upstream; same build knobs and post_install. Floor decision: floor stays pyaudio>=0.2.13 (not relaxed); template satisfies it. No noverifypydeps/nopyprovides in either template.
- tool_checksums.txt: base-image pinned to ghcr.io/void-linux/void-glibc-full index digest sha256:e98f8cdd... (tag: latest).
Acceptance evidence (podman, pinned container):
- xlint: both templates pass with no findings.
- xbps-src pkg: both build; PyAudio distfile checksum verifies OK; all deps resolved from current void repos (evdev 1.7.1_2, six 1.17.0_2, xlib 0.33_4, portaudio-devel, python3-devel, setuptools 80.10.2_2).
- Fresh-container install via local xbps repo index: both install; python3 -c import pyaudio -> 0.2.14 against PortAudio V19.6.0-devel. pynput presence via find_spec (its X backend needs a display, same documented behavior as the native smoke gate).
- Offline suite: 12/12 pass; black/flake8-critical/isort clean.
Notes for later tickets: the void-glibc-full image ships dash, not bash, so xbps-src needs bash+git installed first (done in throwaway prep layers, not committed). python3 in current Void is 3.14. Staging checkout with built xbps left at ~/.cache/tmp/t25-void-packages (scratch, not committed).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Parent
Spec: Voculinux — Void Linux (glibc) Wayland/niri port of Vocalinux
What to build
The two easy Void dependency gaps close as in-repo package templates in void-packages layout under the packaging tree: the keyboard input library the app needs on X11, and an updated audio binding template that resolves the known version-floor gap deliberately (Void's current package is older than the project's declared floor). Templates follow Void manual conventions, build in the pinned Void glibc container with podman, and pass an import smoke. Dependency verification is never disabled to hide the version gap; if evidence shows the project floor itself was raised without need, that finding is recorded here and the floor decision is revisited explicitly instead.
Acceptance criteria
Blocked by
None (can start immediately).
Ticket #25 implemented on branch feature/25 (commit
c462ffb, cut from integration/spec16 tip0a4d637, still current).What was built (packaging/void/, void-packages layout + tests/test_void_small_deps.py, 12 offline policy tests):
Acceptance evidence (podman, pinned container):
Notes for later tickets: the void-glibc-full image ships dash, not bash, so xbps-src needs bash+git installed first (done in throwaway prep layers, not committed). python3 in current Void is 3.14. Staging checkout with built xbps left at ~/.cache/tmp/t25-void-packages (scratch, not committed).
Merged in integration/spec16
1dd3986383pushed to fork/integration/spec16 (https://github.com/soubarnak/vocalinux/tree/integration/spec16), review PASS, gates flake8 E9,F63,F7,F82 + black --check + isort --check + mypy src/ clean, pytest 37 passed, npm jest 11 suites/92 tests + lint 0 errors + tsc clean + build OK