ci: adopt slophammer quality gates#131
Merged
Merged
Conversation
osolmaz
force-pushed
the
slophammer-baseline-adoption
branch
from
June 12, 2026 10:15
d9b6248 to
298df11
Compare
Collaborator
Author
|
Closing this because the current approach is only a baseline adoption gate, not real Slophammer compliance. The green check is misleading for a repo that still lacks typecheck, typed package support, coverage, format, mutation, DRY, dependency audit, and complexity gates. This should be reworked as a real staged cleanup or reopened only with explicit baseline-only framing. |
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.
Opened on behalf of Onur Solmaz (
osolmaz).Summary
Coqui support is removed because it should no longer be advertised as a working speech service.
The quality gates are also stricter now, and the rendered-example test uses the real in-repo
examples/gtts-example.pyinstead of synthetic local examples.The test renders through the Manim CLI and checks that the MP4 has an audio stream, has audible decoded audio, and has enough spectral bandwidth to reject a simple beep-like tone.
What Changed
The dead Coqui integration is gone from the package, docs, examples, optional extras, and tests.
The rendered-example coverage now proves that a real repository example can produce audible speech in a rendered video.
manim_voiceover/services/coqui.py.coquioptional extra.tests/test_examples_render.pycoverage forexamples/gtts-example.py::GTTSExamplethroughpython -m manim.ffprobe,pydub, and a median spectral-bandwidth threshold. The local gTTS render measured about1572 Hz; the previous sine/beep-style fixture measured about132 Hz, below the250 Hzthreshold.pyttsx3.init()when no engine is injected, and updated its tests to patch that factory.uv run mutmut run --max-children 2so timeout results are less host-dependent.Testing
I reran the local gates after replacing the synthetic rendered examples with the actual gTTS example.
The local suite reports
112 passedwith97.37%coverage against an85%threshold.Mutation testing reports
2915/2915mutants handled, with no surviving, timed-out, suspicious, or untested mutants.GitHub Actions build passed on commit
604a955.media/videos/gtts-example/480p15/GTTSExample.mp4locally.media/voiceovers/*.mp3files locally withafplay.uv run pytest tests/test_examples_render.py -vvuv run ruff format --check .uv run ruff check .uv run ty check manim_voiceoveruv run mypy --cache-dir=/dev/null manim_voiceoveruv run pytest --cov=manim_voiceover --cov-fail-under=85rm -rf mutants && uv run mutmut run --max-children 2 && uv run python scripts/check_mutmut_results.py && rm -rf mutantsuv run pip-audituvx slophammer-py@0.3.0 dry .uvx slophammer-py@0.3.0 check .PATH="$PWD/.venv/bin:$PATH" uvx slophammer-py@0.3.0 check . --executerm -rf dist && uv buildRisks
Removing Coqui is a breaking change for users importing
CoquiServiceor installing thecoquiextra.That is intentional because the service should not remain in the public API as if it still works.