VoiceHub 0.3 release readiness¶
This is the authoritative release-candidate checklist for VoiceHub 0.3.0. It separates locally reproducible checks, cross-platform CI, real-checkpoint evidence, and maintainer-controlled publication. A pending hardware or external gate is never counted as a pass.
Candidate report¶
Updated 2026-08-02. The source version is 0.3.0. PyPI still serves 0.1.6, so
installing voicehub from PyPI does not yet provide the current repository
contract.
| Gate | Current evidence | Status |
|---|---|---|
| Source, docs, benchmark, and PyPI candidate alignment | Local check identified 0.3.0 as a new candidate over PyPI 0.1.6 | Passed |
| Full CPU-safe suite | PR 71 exact head afd1d29 passed the supported Linux, macOS, and Windows test matrix in CI run 30747565870. The latest recorded local Python 3.12.12 candidate reported 2,444 passed, 15 skipped, 3,406 subtests, and 35 warnings in 116.03 seconds |
Passed remotely on Python 3.10-3.12 for afd1d29 and locally on Python 3.12 for the recorded candidate; five CUDA/Triton plus two inaccessible WeNet paths remain explicitly unverified |
| Formatting and lint | PR 71 exact head afd1d29 passed CI lint and pre-commit.ci; the documentation-slice hook run first let YAPF format the new regression and exited nonzero, then passed every hook on the formatted files |
Passed remotely for the exact candidate and locally on the documentation slice; the failed formatter run is excluded |
| Documentation | PR 71 exact head afd1d29 passed Docs run 30747565866; the documentation-parity slice passed 30 documentation contracts with 1,132 subtests, 43 combined documentation/release/guidance tests with 1,143 subtests, and a strict eleven-language build |
Passed remotely for the exact candidate and locally for the documentation-parity slice; the reference mobile light render and remaining representative page matrix remain pending |
| Wheel, sdist, and editable installs | PR 71 exact head afd1d29 passed Package CI run 30747565842; the latest local probe reported 68 models, 81 provenance manifests, 193 compliance files, required package data, zero dependency violations, and no eager PyTorch import from wheel, sdist, and editable installs |
Passed remotely for the exact candidate and locally for the recorded candidate; local wheel was 57,186,791 bytes and sdist was 55,427,312 bytes |
| Python 3.10–3.12 on Linux, macOS, and Windows | PR 71 exact head afd1d29 passed all nine version/platform jobs, both runtime smokes, default runtime, training, and lint in CI run 30747565870 |
Passed for exact head afd1d29 |
| Canonical AI guidance | PR 71 exact head afd1d29 passed the canonical guidance contract in every supported platform matrix job; the current tree's merged guidance change passed 13 local tests and 11 subtests |
Passed cross-platform for the exact candidate and locally for the current tree |
| Released-checkpoint TTS, ASR, and VAD evidence | Dated RTX 4090 JSON and guide; see matrix below | Passed for the listed representatives |
| Pinned small release assets | The official ESPNet configuration plus SenseVoice and SpeechBrain tokenizers at immutable revisions matched declared sizes, file fingerprints, extracted tokens, and published encoding vectors | Passed locally; Package CI and the tagged release build now repeat all three opt-in online gates |
| TEN-VAD checkpoint oracle | The official 315,449-byte ONNX graph at immutable revision 22a3bcd4509d0faaa8eef4881e8af5f39c178950 converted to native Safetensors and matched ONNX Runtime across 25 recurrent steps |
Passed locally with pinned ONNX Runtime 1.22.1; Package CI and the tagged build now repeat the isolated development oracle |
| NVIDIA QuartzNet checkpoint conversion | The official 70,993,538-byte NGC stt_en_quartznet15x5 1.0.0rc1 archive matched its pinned digest, converted to 639 native tensors, and strict-loaded from Safetensors |
Passed locally; Package CI and the tagged build now repeat the isolated conversion without redistributing the NGC artifact |
| Tokenless publication workflow | Source contract test verifies separate build/publish jobs, protected environment, and job-scoped OIDC | Passed locally; tagged run pending |
Protected pypi environment and PyPI publisher |
GitHub's environment inventory currently contains only github-pages; PyPI publisher settings require maintainer access |
Pending maintainer configuration |
| Git tag, GitHub release, and PyPI publication | No local/remote v0.3.0 tag or matching GitHub release exists; publication requires explicit maintainer approval |
Pending |
| Shared diffusion-serving dispatch | Native and vLLM-Omni model sets are derived from registered architecture features; runtime extension and fail-closed tests pass | Passed; the registry-wide shared-layer policy covers the remaining provider-branch boundary |
| Shared task-factory defaults | TTS, ASR, and VAD no-argument defaults are unique ModelSpec.default_for_task declarations; modern and compatibility factories follow live metadata and contain no registered-model literals |
Passed; the registry-wide shared-layer policy covers the remaining provider-branch boundary |
| Model contribution completion gate | An activated package-local manifest now supplies the lazy ModelSpec, aliases, and honest inference-only training profile without editing either central catalog; inactive scaffolds stay undiscovered and duplicate or richer unsupported declarations fail explicitly |
Passed for representative zero-central-edit, TTS/ASR/VAD, extension, mismatch, lazy-import, and no-mutation fixtures |
| Model-page source provenance | The generator resolves source records from model packages and every lazy native-architecture component without importing an implementation; 58 pages link existing SOURCE.json files and the remaining 10 explicitly report that no integration-specific record is bundled |
Passed; registry-derived documentation tests reject missing files, false provenance links, stale generated pages, and regressions across representative TTS, ASR, and VAD architectures |
| Checkpoint documentation provenance | A shared declarative contract distinguishes real Hugging Face repositories, external archives, and local-only inputs; page, index, gallery, quickstart, and notebook generation consume the same metadata without provider-name branches | Passed; 59 real Hub notebooks remain, WeNet's inaccessible archive is not presented as Hugging Face, and integrations without a default no longer claim a registry default |
| Native dependency boundary | The policy derives 755 seed files from the stable core boundary, all 383 immediate model-package Python facades, literal architecture component references, and three runtime-generated vendored roots; the 1,304-file fixed-point closure has zero violations and does not import PyTorch | Passed; a new model facade joins the default audit without a central provider-list edit |
| Shared provider independence | A source-only AST policy checks all 202 shared Python files against 68 canonical model types and 102 live aliases; declarative metadata and model-local code remain valid, while comparisons and every supported condition form fail | Passed with zero shared behavior violations; runtime extensions join without a central list edit |
Layered verification matrix¶
Contract coverage and checkpoint coverage answer different questions and stay separate in release reports.
| Layer | Scope | Evidence | Interpretation |
|---|---|---|---|
| Registry and lazy construction | All 34 TTS, 23 ASR, and 11 VAD integrations | Full pytest suite plus the TTS and ASR/VAD registry audits | Proves discovery, configuration, lazy allocation, and normalized contract behavior; it does not prove every public weight file |
| Native graph and checkpoint shape | Every registered family | Model-specific CPU/meta tests and immutable inventory tests | Proves the implemented graph and declared checkpoint namespace under deterministic fixtures |
| Package surface | Every registered runtime | scripts/check_distribution.py and Package CI |
Proves wheel, sdist, editable install, package data, import coverage, and declared dependencies |
| TTS real checkpoint | vits with facebook/mms-tts-eng@c71de0f |
tts_vits_rtx4090_2026-07-31.json |
Complete tokenizer, acoustic graph, flow, and vocoder path on an RTX 4090 |
| ASR real checkpoints | Moonshine tiny, Wav2Vec2 base, and Whisper tiny through five adapters | asr_vad_rtx4090_2026-07-31.json |
Complete transcription paths with deterministic text and single-sample WER; not a corpus accuracy claim |
| ASR checkpoint conversion | NeMo QuartzNet15x5 character CTC | Pinned NGC 1.0.0rc1 archive, source/config/weights digests, tensor inventory, and strict native reload | Proves the official 639-tensor namespace converts to the implemented graph; it is not a corpus accuracy claim |
| VAD real checkpoints or algorithms | Silero, Sherpa/Silero, WebRTC, and Auditok | Same ASR/VAD JSON evidence | Complete segmentation paths with boundary/score comparisons |
| Hardware-limited remainder | Gated, restricted, multi-gigabyte, or unavailable checkpoints | Provider documentation and explicit coverage records in benchmark JSON | Pending by design; no claim that every public checkpoint was downloaded |
The readable methodology and results are in the RTX 4090 speech benchmark. Performance numbers are checkpoint- and machine-specific and are not release thresholds on other hardware.
Local release gates¶
Run from a clean checkout with Python 3.12 after installing
.[test,training,docs]:
python scripts/check_release.py
python -m pytest -q
pre-commit run --all-files
mkdocs build --strict --clean
python scripts/check_distribution.py
Before the final capability-driven serving slice, the local working tree passed
the full suite in independent macOS environments on Python 3.10.19 (173.39
seconds), Python 3.11.15 (154.82 seconds), and Python 3.12.12 (106.98 seconds).
The Python 3.10 and 3.11 runs created isolated temporary environments,
installed .[test] with uv's CPU PyTorch backend, and did not use or modify the
repository lock file. Each run reported 2,400 passed, 25 skipped, 3,287
subtests, and 35 warnings.
The current tree then reran the complete Python 3.12 suite after replacing the
diffusion-serving model allowlist with architecture capability discovery. It
reported 2,401 passed, 25 skipped, 3,287 subtests, and 35 warnings in 102.48
seconds. The 16 changed-contract tests separately passed under Python 3.10.19,
3.11.15, and 3.12.12. Skipped paths are recorded as unverified, not passed.
Candidate CI separately passed the supported Python versions on Linux, macOS,
and Windows for commit e2bfb4a; that remote result does not prove later
uncommitted changes.
The next provider-branch slice moved ASR and VAD task defaults into unique
ModelSpec.default_for_task declarations. The current Python 3.12 tree then
reported 2,405 passed, 25 skipped, 3,287 subtests, and 35 warnings in 97.82
seconds. Its five changed registry/auto tests passed under Python 3.10.19,
3.11.15, and 3.12.12 without loading a heavy backend. An attempted broader
Python 3.10 run reused the Python 3.12 environment and failed on the expected
compiled-PyTorch ABI mismatch; it is invalid cross-version evidence and is not
counted as a pass.
The following compatibility slice declared the existing Orpheus TTS default in
the same registry metadata and removed the provider literal from
AutoInferenceModel. The final Python 3.12 tree reported 2,406 passed, 25
skipped, 3,289 subtests, and 35 warnings in 103.26 seconds. Its three changed,
dependency-light default-contract tests passed under Python 3.10.19, 3.11.15,
and 3.12.12. The runtime replacement regression proves both the modern TTS
factory and the compatibility factory follow a new process-local default
without editing either shared factory.
The next contribution slice replaced the scaffold checker's quoted-name search
with import-free AST validation of built-in ModelSpec, alias, and training
profile declarations. A quoted comment can no longer satisfy discovery;
wrong lazy modules, classes, config paths, checkpoints, tasks, aliases, and
training tasks produce separate errors. TTS, ASR, and VAD fixtures pass, and a
completed separately distributed extension still passes without either central
catalog file. The final Python 3.12 tree reported 2,411 passed, 25 skipped,
3,303 subtests, and 35 warnings in 95.12 seconds. Its five changed pure-Python
contract tests passed under Python 3.10.19, 3.11.15, and 3.12.12. The first
focused run exposed a shadowed checkpoint variable, and the first broad docs
run exposed a non-compiling alias example; both failed runs are excluded from
passing evidence, and both exact regressions passed after correction.
The following contribution slice added the read-only catalog command. It
derives the built-in ModelSpec, alias entries, task enum, and honest
inference-only training profile from model-integration.json, labels each
central insertion point, and never imports VoiceHub or a model backend. The
same output completed the checker fixtures for TTS, ASR, and VAD and remained
byte-for-byte deterministic without changing their file inventories. Its three
pure-Python tests passed on Python 3.10.19, 3.11.15, and 3.12.12. The focused
test's first fake-catalog assembly had invalid indentation, and the first
selected pre-commit run reformatted the new docstring; neither failed run is
counted. The corrected current tree reported 2,414 passed, 25 skipped, 3,307
subtests, and 35 warnings in 107.99 seconds.
The complete current executable and test tree then passed the same full suite
in independent macOS environments on Python 3.10.19 (166.51 seconds) and
Python 3.11.15 (153.60 seconds). Each direct uv pip install -e ".[test]"
used the CPU PyTorch backend in a new temporary virtual environment and did not
read or modify the repository lock file. Together with the Python 3.12.12 run,
all three supported interpreters reported exactly 2,414 passed, 25 skipped,
3,307 subtests, and 35 warnings. This strengthens supported-version evidence;
it does not substitute for Linux or Windows execution of the later local tree.
The next architecture-policy slice removed 230 model/provider paths from a
253-entry manually maintained native-runtime seed list. The audited boundary is
now derived from 23 stable core roots, every immediate Python file in each
model package, literal lazy component references in architecture registrations,
and only three narrow source roots needed by runtime-generated vendored imports.
The resulting 755 seeds reach a 1,304-file fixed-point closure with zero
external dependency violations and no eager PyTorch import. A temporary future
model facade importing transformers fails the default audit without any
central policy edit, while MeloTTS and OpenVoice regressions prove that active
internal closures stay covered and dormant vendored frontends stay excluded.
The pure policy probe reported the same 755 seeds, 1,304 closure files, zero
violations, and no PyTorch import on Python 3.10.19, 3.11.15, and 3.12.12. The
current Python 3.12.12 tree then reported 2,416 passed, 25 skipped, 3,307
subtests, and 35 warnings in 113.71 seconds. Two initial focused runs exposed
missing literal architecture references and direct-seed/closure test
semantics; the corrected tests pass, and those failed runs are not counted as
release evidence.
The following shared-architecture slice unified the boundary previously
covered by four partial provider-branch checks into one registry-wide policy.
It scans all 202 Python files outside model-local models/ and
architectures/ roots against 68 canonical
model types and 102 live aliases. Declarative catalogs, licensing, provenance,
and training metadata remain valid, while provider literals in comparisons,
if and conditional expressions, loop conditions, assertions, comprehension
filters, and match cases or guards fail with file and line evidence. A
runtime-registered model and alias join the default audit without editing a
policy list. The complete related slice reported 141 passes and 178 subtests;
the same synthetic if and match violations were detected on Python 3.10.19,
3.11.15, and 3.12.12. The current Python 3.12.12 tree then reported 2,420
passed, 25 skipped, 3,307 subtests, and 35 warnings in 113.34 seconds. The first
selected pre-commit run let docformatter update the new policy file and exited
nonzero; the formatted source passed the second run and the focused four-test
suite, so the first run is not counted as passing evidence.
The next contribution slice made model-integration.json the package-local
source of truth for a completed inference-only built-in. New scaffolds are
inactive by default and therefore cannot enter either registry while their
runtime, checkpoint revision, or evidence is incomplete. Once explicitly
activated, one strict source-only parse requires every package facade,
IMPLEMENTATION_STATUS = "ready", an immutable checkpoint revision, and
bundled license text before it derives the lazy ModelSpec, aliases,
capabilities, components, checkpoint, and task; the same manifest produces an
honest inference-only ModelTrainingSpec. No model package or PyTorch module is
imported, and neither voicehub/models/registry.py nor
voicehub/training/specs.py needs a model entry. A richer training claim must
use an explicit profile, while simultaneous manifest and legacy central
declarations fail as three actionable duplicate errors. The focused scaffold
suite reported 19 passes and 35 subtests, and the related registry/training
slice reported 116 passes and 330 subtests. The same temporary model and
training profile were discovered without importing PyTorch or the model package
on Python 3.10.19, 3.11.15, and 3.12.12. The current Python 3.12.12 tree then
reported 2,424 passed, 25 skipped, 3,310 subtests, and 35 warnings in 114.23
seconds. The final activation-gate rerun reported the same counts in 111.58
seconds. The first documentation run exposed its obsolete requirement for a
central alias mapping, and the first two selected pre-commit runs applied
formatter changes and exposed one continuation-indent error. The corrected
documentation contract and formatted source pass; none of those failed runs is
counted as passing evidence.
The following CPU-safe evidence slice audited every skip reason. Seven tests in the old mock-Transformers VAD class were permanently skipped because the native Wav2Vec2 provider had replaced that runtime. The redundant mock loader, windowing, training, and serialization fixtures were removed; four still-valid speech-label, checkpoint-stride, and invalid-training-input edge contracts were moved into the executable native provider suite. The two focused native VAD files reported 21 passes and 20 subtests, and the related VAD, Wav2Vec2, registry, task, and inference slice reported 137 passes and 235 subtests. The complete Python 3.12.12 tree then reported 2,428 passed, 18 skipped, 3,310 subtests, and 35 warnings in 112.27 seconds. Every remaining skip names its missing dependency, dedicated CI job, CUDA host, checkpoint, or release asset; none is counted as passing evidence. The changed test sources also parsed on Python 3.10.19, 3.11.15, and 3.12.12; syntax parsing is not reported as runtime coverage on the two interpreters without installed test dependencies.
The next default-runtime evidence slice corrected the active codec import
inventory. Its Higgs entry still pointed at a dormant vendored tokenizer that
required vector_quantize_pytorch, even though the registered higgstts
wrapper executes VoiceHub's native PyTorch-only tokenizer. The gate now imports
the active native Higgs module beside the DAC, FishTTS, and Irodori codec paths
while explicitly rejecting audiotools, loguru, and
vector_quantize_pytorch. It executes under the installed test environment
without a dependency skip. The focused codec file reported six passes; the
related codec, Higgs, FishTTS, Llasa, dependency-policy, and optimization slice
reported 130 passes, 52 subtests, and four warnings. The complete Python
3.12.12 tree then reported 2,429 passed, 17 skipped, 3,310 subtests, and 35
warnings in 114.45 seconds. The changed test source parsed on Python 3.10.19,
3.11.15, and 3.12.12; parsing alone is not runtime evidence on the two
interpreters without installed PyTorch.
The following default-runtime slice removed the last two optional-dependency
skips. They exercised dormant MeloTTS Japanese and OuteTTS GGUF provider files,
while the registered built-ins use VoiceHub's native MeloTTS and OuteTTS
architectures. Their replacements import each native frontend, runtime, and
public wrapper in fresh processes while rejecting MeloTTS's legacy MeCab,
pykakasi, unidic_lite, and Transformers frontends and OuteTTS's legacy
llama_cpp, loguru, polars, and Transformers backends. The formatted
focused compatibility file reported seven passes. The related native provider,
inference, lifecycle, compile-target, and dependency-policy slice reported 144
passes and 61 subtests. The complete Python 3.12.12 tree then reported 2,431
passed, 15 skipped, 3,310 subtests, and 35 warnings in 114.57 seconds. Every
remaining skip now names a dedicated CI job, CUDA or toolkit requirement,
checkpoint, or release asset; none is counted as passing evidence. The first
selected pre-commit run let YAPF rewrite the new helper and exited nonzero; the
formatted focused suite and second hook run passed, so the first run is not
counted. The test source parsed on Python 3.10.19, 3.11.15, and 3.12.12;
parsing alone is not runtime evidence on interpreters without installed
dependencies.
The next release-asset slice exercised the remaining ESPNet token-list gate
against the official Hugging Face repository at immutable revision
bc6bbd771cec698f070640ee677a66719181f0a2. The downloaded configuration was
82,131 bytes and matched SHA-256
16351b9bf79631d1df0a4645a858dc330c40434cf03470408c9c8fd446b6ea19; its
extracted token list matched SHA-256
48ec6eedbee6a22e2a9b51adeb425af3c39db23128086c015240f591601a3ea3. The
opt-in test passed through VoiceHub's dependency-free Hub transport, while the
same test remained explicitly skipped in the default offline run. Package CI
and the tagged release build now require this online gate. The related ESPNet,
Hub transport, release-readiness, and packaging slice reported 56 passes, one
offline skip, and 81 subtests. An earlier unqualified python invocation could
not start pytest in the local shell and is not counted as a pass. The first
selected pre-commit run let YAPF format the changed test and exited nonzero;
the formatted tests and second hook run passed. The complete current Python
3.12.12 tree then reported 2,431 passed, 15 skipped, 3,310 subtests, and 35
warnings in 112.86 seconds. The online ESPNet pass remains separate from those
offline suite counts.
The following tagged-runtime slice closed a release-workflow discrepancy. Main
CI already ran the three opt-in default-runtime tests on Ubuntu and in macOS
and Windows smoke jobs, but both full-suite steps in the tagged release
workflow left them skipped. The tagged nine-job Python/platform matrix and the
dependent build job now set VOICEHUB_FULL_RUNTIME_TEST=1; the workflow source
contract requires both declarations. The focused file reported five passes and
138 subtests. The release-equivalent complete Python 3.12.12 macOS run then
reported 2,434 passed, 12 skipped, 3,448 subtests, and 35 warnings in 110.63
seconds. Those three default-runtime paths are locally verified, while remote
execution of the changed tagged matrix is still pending. The separate ESPNet
online gate accounts for one of the 12 remaining default-run skips, leaving 11
hardware, checkpoint, tokenizer, or ONNX paths unverified.
The next release-asset slice added the official SenseVoiceSmall tokenizer at
immutable revision 3847d57b6bdf2dd8875cb1508d2af43d80a16bf7 to the same
opt-in online gate as ESPNet. VoiceHub's Hub transport downloaded the
377,341-byte file, which matched SHA-256
aa87f86064c3730d799ddf7af3c04659151102cba548bce325cf06ba4da4e6a8.
The native tokenizer reproduced the pinned English text IDs, control-token
labels, and semantic language, emotion, and event values. Package CI and the
tagged build now run both release-asset tests through one plural gate. Their
focused online run reported two passes; the same SenseVoice test remained an
explicit skip offline. The related SenseVoice, ESPNet, Hub, release, and
packaging slice reported 71 passes, two offline skips, and 81 subtests. The
first selected pre-commit run let YAPF format the SenseVoice test and exited
nonzero; the formatted online tests and second hook run passed. With the
default-runtime and both release-asset gates enabled, the complete Python
3.12.12 macOS suite reported 2,436 passed, 10 skipped, 3,448 subtests, and 35
warnings in 112.97 seconds.
The following real-checkpoint slice exercised the official TEN-VAD ONNX graph
from immutable source revision
22a3bcd4509d0faaa8eef4881e8af5f39c178950. The 315,449-byte source matched
SHA-256 e10b98a0cab1c98e847fbdda14cb3d45a38336d47535a3f63a0fb6c4e0f4cdf4
before VoiceHub's standard-library ONNX reader converted it to native
Safetensors. The differential oracle used pinned ONNX Runtime 1.22.1 for 25
deterministic recurrent feature steps; native speech probability and four LSTM
states stayed within the existing 2e-7 and 2e-6 absolute-error thresholds.
The test now passes the expected official source digest into conversion and
requires the exported metadata to report an official source. Package CI and
the tagged build download the exact raw file, install ONNX Runtime only for
this isolated development gate, and leave the wheel runtime dependency-free.
The focused oracle passed and remained explicitly skipped without its source
environment variable. The related VAD, checkpoint, release, and packaging
slice reported 64 passes, one offline skip, and 115 subtests. With every local
opt-in gate enabled, the complete Python 3.12.12 macOS suite reported 2,437
passed, 9 skipped, 3,448 subtests, and 35 warnings in 112.68 seconds.
The next real-checkpoint slice exercised NVIDIA's official
stt_en_quartznet15x5 archive from NGC release 1.0.0rc1. The 70,993,538-byte
source matched SHA-256
1b9b7b87a9277e6fef164d8f99d1226f0511af154423bbf919b920421ac9602f.
VoiceHub's restricted, weights_only converter then verified the embedded
configuration and weight digests, all 639 tensor names and shapes, the
19,018,554-value state count, and the native Safetensors strict reload. Package
CI and the tagged build now download the exact NGC version and run only this
isolated conversion gate; the NVIDIA-governed artifact remains outside the
distribution. The focused oracle passed, and the related NeMo, release,
packaging, and distribution slice reported 32 passes and 76 subtests. The
first all-opt-in run reported 2,437 passes and 9 skips because its temporary
TEN-VAD source was no longer present; that run is not evidence for an eight-skip
state. After redownloading and fingerprinting the pinned TEN-VAD graph, the
complete Python 3.12.12 macOS suite reported 2,438 passed, 8 skipped, 3,448
subtests, and 35 warnings in 114.03 seconds. The remaining paths are five
CUDA/Triton or CUDA-toolkit checks, one SpeechBrain tokenizer gate, and the
WeNet checkpoint and tokenizer gates.
The following documentation-provenance slice removed a false negative from the
model-page generator. It previously searched a registry architecture alias as
if it were a package directory and therefore claimed that 38 integrations had
no bundled source record. Source discovery now follows the lazy module paths
already declared by each native ArchitectureSpec, checks both package-root
and source/ layouts without importing an implementation, and preserves
model-local precedence. Twenty-eight regenerated pages now point to real
manifests; 58 of 68 pages have an existing source link and the remaining 10
honestly report no integration-specific record. The focused documentation
contract reported 3 passes and 142 subtests, including exact TTS, ASR, and VAD
examples, path existence, deterministic 68-page regeneration, and a fresh
process that imports none of NeMo, Safetensors, SentencePiece, PyTorch, or
Transformers. The related
documentation, registry, optimization, scaffold, packaging-metadata, and
distribution-contract suite reported 102 passes and 1,839 subtests; strict
multilingual documentation and release-version alignment also passed. The
first clean distribution run passed the wheel probe but its sdist probe exited
nonzero without reproducible stderr and is not counted as a pass. The exact
sdist install and probe then passed in a preserved clean environment, and a
fresh complete distribution run passed wheel, sdist, and editable installs
with 68 models, 81 provenance manifests, 193 compliance files, zero dependency
violations, and no eager PyTorch import.
The same evidence audit rechecked WeNet before selecting this bounded slice.
The pinned upstream README still lists the 20210728 GigaSpeech U2++ archive,
but the official HTTP artifact endpoint returned 404 on 2026-08-02, its HTTPS
variant failed certificate-hostname validation, and the apparent
wenet/gigaspeech-u2pp-conformer Hugging Face page returned 404. The
503,845,602-byte archive is therefore recorded as currently inaccessible, not
passed; its checkpoint and tokenizer opt-in tests remain explicit unverified
gates.
The next checkpoint-documentation slice removed the resulting false public
claim. A shared CheckpointDocumentation projection now derives provider,
authoritative URL, availability status, quickstart input, and limitation note
from architecture metadata. It is model-independent and preserves the lazy
boundary. The WeNet package declares an external archive, links the immutable
upstream README, records the 2026-08-02 HTTP 404 and certificate-hostname
failure in SOURCE.json, and shows only a local VoiceHub-native artifact in
its quickstart. Its false Hugging Face link, Colab badge, gallery row, and
generator-owned notebook were removed. The same generic path corrected
styletts2 and vad_transformers from "registry default" to "no default".
The focused page/notebook contract reported 4 passes and 127 subtests. The
related WeNet, architecture, registry, optimization, scaffold,
provider-independence, documentation, and packaging suite reported 140 passes,
2 explicitly unverified WeNet skips, and 1,906 subtests. The first selected
pre-commit run applied YAPF and is not counted as passing; the formatted second
run passed. Strict multilingual documentation, release alignment, and fresh
wheel, sdist, and editable probes also passed.
The following release-asset slice exercised SpeechBrain's published
tokenizer.ckpt from immutable model revision
979a53a7a3f6c9291c02c040fd8ebfb2471cf8a3. VoiceHub's dependency-free Hub
transport downloaded 253,217 bytes with SHA-256
37a6cba34cd520b33fd83612d5efc8ba7e351166541eb2726642bb3032234d31.
The native SentencePiece implementation reproduced the pinned HELLO WORLD
encoding and decoding vectors. The common release-asset opt-in now covers this
test beside ESPNet and SenseVoice, and both Package CI and the tagged release
build require the three-test gate. The focused SpeechBrain/workflow contract
reported 3 passes, the combined online release-asset gate reported 3 passes,
and the related SpeechBrain, release, packaging, registry, documentation,
optimization, and scaffold suite reported 129 passes and 1,838 subtests. After
redownloading and fingerprinting the TEN-VAD and QuartzNet artifacts, the full
opt-in Python 3.12.12 macOS suite reported 2,442 passes, 7 skips, 3,521
subtests, and 35 warnings in 115.78 seconds. The remaining skips are five
CUDA/Triton or CUDA-toolkit gates plus the inaccessible WeNet checkpoint and
tokenizer; none is counted as passed. Strict multilingual documentation,
release-version alignment, and fresh wheel, source-distribution, and editable
probes also passed.
The next supported-version evidence slice installed the current working tree
from source into fresh temporary CPU environments with direct uv pip install
commands; the repository lock-file hash remained unchanged. The full
default-offline suite reported 2,434 passes, 15 explicit skips, 3,383 subtests,
and 35 warnings on both Python 3.10.19 in 179.77 seconds and Python 3.11.15 in
166.56 seconds. Together with the current Python 3.12.12 full opt-in result,
the complete tree has now executed on every supported interpreter on macOS.
This does not substitute for Linux or Windows execution of the uncommitted
tree; the latest remote nine-job matrix remains tied to f2d6332.
The following formatting-and-lint evidence slice ran the complete repository pre-commit configuration against the current working tree. End-of-file, trailing-whitespace, case-conflict, private-key, AWS-credential, pyupgrade, isort, YAPF, Markdown formatting, Flake8, and docformatter hooks all passed without modifying a file. This replaces older partial-hook evidence; it does not substitute for the pending Linux and Windows matrix.
The release workflow first repeats the complete test suite on Linux, macOS,
and Windows with Python 3.10, 3.11, and 3.12. Its build job cannot begin unless
all nine tagged-source jobs pass. It then repeats the remaining local gates,
checks that tag v0.3.0 points at the checked-out commit, verifies that 0.3.0
is not already on PyPI, builds one wheel/sdist pair, checks their embedded
metadata and size, and transfers those exact artifacts to a separate publish
job.
The latest clean-install build produced a 57,186,791-byte wheel and a 55,427,312-byte source distribution. Fresh builds passed embedded name/version checks; gzip timestamps can change archive bytes, so release hashes are recorded from the exact workflow artifacts rather than copied from a local build.
The current repository-wide pre-commit gate initially normalized imports in 15
files and applied YAPF and docformatter changes. That first formatter run exited
with failure and is not counted as a pass. The second pre-commit run
--all-files completed every hook successfully. A raw AST fingerprint changed
because docformatter edits docstring constants, so it is not used as behavior
evidence. The formatted Python 3.12 tree instead reran the complete suite and
reported 2,400 passed, 25 skipped, 3,287 subtests, and 35 warnings. The later
diffusion-serving slice passed its selected hooks after formatter changes and
the Python 3.12 full suite reported 2,401 passed with the same 25 skips, 3,287
subtests, and 35 warnings. The task-default slice also required one formatter
pass before its selected hooks succeeded; its full-suite count was 2,405. The
compatibility-default slice also required one isort pass before its selected
hooks succeeded; the second selected run passed and the final full-suite count
was 2,406. The scaffold-catalog checker slice passed its selected hooks without
a formatter rewrite, and its full-suite count was 2,411. The catalog-renderer
slice required one docformatter rewrite before its selected hooks passed; its
final full-suite count is 2,414. The native dependency-boundary slice required
one YAPF/docformatter rewrite before its selected hooks passed; the corrected
focused tests reported 19 passes, and its final full-suite count is 2,416. The
shared provider-independence slice required one docformatter rewrite before its
selected hooks passed; its final full-suite count is 2,420. The manifest
discovery slice required two formatter runs before its selected hooks passed;
its final full-suite count is 2,424. The later VAD skip-audit slice passed its
selected hooks without a rewrite and reduced the current unverified count from
25 to 18; its final full-suite count is 2,428. The default-runtime codec slice
also passed its selected hooks without a rewrite and reduced the current
unverified count to 17; its final full-suite count is 2,429. The native
MeloTTS/OuteTTS dependency slice required one YAPF rewrite before its selected
hooks passed and reduced the current unverified count to 15; its final
full-suite count is 2,431.
The diffusion-serving resolver no longer contains a provider-name allowlist.
Its native and vLLM-Omni verified model snapshots are derived from
diffusion-serving-native and diffusion-serving-vllm-omni features declared
beside each architecture integration. A runtime-registration regression proves
that a new native model can join the resolver without editing shared serving
code; unverified pairings and VibeVoice's incomplete high-level path still fail
closed.
The shared auto factories no longer embed registered TTS, ASR, or VAD model
names. The former AutoInferenceModel Orpheus default is now the TTS registry
declaration, preserving its no-argument behavior while sharing the same policy
with AutoModelForTextToSpeech.
The registry enforces at most one default_for_task declaration per task and
exposes the selection through get_default_model_spec(). A runtime extension
regression proves that the no-argument factory follows replaced registry
metadata without changing voicehub/auto.py; missing and ambiguous defaults
fail explicitly.
PR 68 was merged as main commit 679d5bd before its required matrix was green.
PR 69 head b6de7b5 subsequently repaired its canonical AI skill frontmatter
and normalized materialized root-guidance pointers. CI run 30741892984 then
passed every Linux and macOS Python job, both runtime smokes, default runtime,
training, and lint. Windows 3.10, 3.11, and 3.12 each failed only the same two
scaffold-checker assertions: actionable diagnostics rendered temporary
repository-relative paths with native \ separators while the public
cross-platform contract expected stable / separators. Each Windows job
otherwise reported 2,437 passes, 16 explicit skips, 3,392 subtests, and 35
warnings.
The bounded correction centralizes repository-relative display through
PurePath.as_posix() and includes a dependency-free PureWindowsPath
regression. The focused scaffold file reported 20 passes and 35 subtests; the
related registry, model-page, optimization, release, and AI-guidance slice
reported 113 passes and 1,849 subtests; selected pre-commit hooks, all 68
generated model pages, all 59 notebooks, and release alignment also passed.
The complete Python 3.12.12 suite reported 2,439 passes, 15 explicit skips,
3,394 subtests, and 35 warnings in 115.67 seconds. That correction is now PR 69
head 3a3e224; CI run 30742766090
passed every Linux, macOS, and Windows Python 3.10-3.12 job, both runtime
smokes, default runtime, training, and lint.
The following documentation-parity slices record the official Transformers
main commit and toctree fingerprint, map representative routes, and restore
the left navigation and right table of contents on all eleven localized home
sources. Rendered checks at 1440 x 900, 1024 x 768, and 390 x 844 verified the
desktop shell, mobile collapse, both VoiceHub palettes at all three viewports,
and the absence of horizontal overflow. The tablet slice then matched the
reference region behavior at 1024 x 768: a persistent 270-pixel left
navigation, hidden right table of contents, 739-pixel content region inside the
1,009-pixel main region, and no redundant drawer button. The mobile drawer and
desktop three-column shell remained structurally unchanged. The drawer backdrop now excludes the
242-pixel panel itself, leaving a 133 x 844 pointer target at 390 x 844. A real
backdrop click in both LTR and RTL layouts and Escape in the LTR layout cleared
the drawer checkbox and returned the panel off-canvas with no horizontal
overflow. Initial probes against
the full-width backdrop and the preexisting Escape behavior did not close the
drawer; those failed checks are not counted. The final 30 documentation
contracts reported 1,132 subtests, the related registry and optimization slice
reported 70 passes and 310 subtests, all 68 generated model pages and 59
notebooks were current, and the strict multilingual build completed. Release
alignment, 13 AI-guidance and release-readiness tests with 11
subtests, and selected hooks also passed. Fresh wheel, source-distribution, and
editable probes passed with the inventory recorded above. The earlier shell
slice's first selected hook run let YAPF format its regression and exited
nonzero; the formatted regression and second hook run passed, so the failed run
is not counted as passing evidence.
The distribution gate inventories every SOURCE.json, license, licence,
NOTICE, and COPYING file under the installed package. Each of the 81 source
manifests must contain a pinned revision/release and explicit license metadata;
all 193 compliance files plus the project-level Apache-2.0 license must survive
both wheel and source-distribution builds.
PR 69 exact head 3a3e224 passed every required job in CI run 30742766090.
Current main head 6a75eda subsequently passed Package CI and the strict
documentation build in runs 30745818302
and 30745818292.
The documentation-parity branch derives from 6a75eda. PR 71 exact head
afd1d29 passed all nine platform/version jobs, both runtime smokes, default
runtime, training, lint, strict documentation, package build, and
pre-commit.ci. The documentation deployment job was skipped for the pull
request and is not counted as a pass. This later evidence-only update does not
alter the documentation-shell implementation; the pull request remains the
authoritative source for its current exact-head status.
The next left-navigation state slice maps the Transformers and VoiceHub
Installation routes. Exact rendered checks at 1440 x 900, 1024 x 768, and
390 x 844 now cover one visible active item, the expanded current branch,
visible keyboard focus, and zero horizontal overflow. VoiceHub rendered its
219 x 34-pixel desktop item and 212 x 34-pixel tablet item in both light and
dark themes. Its opened mobile drawer measured 242 pixels with a 133-pixel
backdrop and exposed one 251 x 48-pixel active row in both themes. The mapped
Transformers active item measured about 218 x 31 pixels at desktop and tablet
widths and 323 x 31 pixels in its opened mobile navigation; all three reference
states exposed visible keyboard focus without horizontal overflow. The focused
source regression first failed before the state styles existed. A rendered
keyboard probe then exposed Material's focus-visible compatibility class;
the first selector did not draw an outline, and that failed probe is not
counted. The compatibility selector and focused regression now pass; the exact
viewport rerun's three focused navigation and drawer tests also pass. The
documentation file reported 30
passes and 1,132 subtests, the related registry and universal-optimization
files reported 46 passes and 236 subtests, all 68 model pages and 59 model
notebooks were current, release alignment found all five benchmark files, the
strict multilingual documentation and fresh wheel, source-distribution, and
editable probes passed. The complete Python 3.12.12
suite reported 2,444 passes, 15 explicit skips, 3,406 subtests, and 35 warnings
in 116.03 seconds. The first selected hook run let YAPF format the new
regression and exited nonzero; the formatted second run passed, so the first is
not counted. The reference mobile light state and the remaining representative
page matrix remain pending and are not reported as passed.
One-time publisher configuration¶
Before the first 0.3 publication:
- In PyPI project settings, add a GitHub Trusted Publisher for repository
kadirnar/voicehub, workflowrelease.yml, and environmentpypi. - In GitHub, create the
pypienvironment and require a maintainer reviewer. - Do not add a long-lived PyPI API token. Only the publish job receives
id-token: write.
PyPI's default per-file limit is 100 MB. scripts/check_release.py --dist-dir
rejects oversized or unexpected files before the protected publish job begins.
Publish and post-publish verification¶
After every local and cross-platform gate is green, create the signed tag and
manually dispatch the release workflow with its publish confirmation enabled.
Approve the protected pypi environment only after reviewing the build job and
artifact hashes.
When PyPI finishes indexing the release, verify external parity:
Only then create or finalize the matching GitHub release. If any external gate fails, leave the candidate unpublished and record the exact blocker here.