refactor(video): cztery funkcje mux/ pod limit complexity (faza 2b)#67
Merged
Conversation
CC 10 → 6. Wszystkie cztery pozostałe naruszenia w pakiecie mux zniknęły.
compose_popup_video 21 → 3
mux_audio_tracks 17 → 1
_compose_floating 16 → 2
_compose_slide 12 → 3
SIATKA PIERWSZA, PRZED DOTKNIĘCIEM KODU. To budowniczowie filtergraphu
ffmpeg — istniejące 63 testy w większości sprawdzają "renderuje się bez
błędu", a błąd tutaj produkuje plik wideo WŁAŚCIWEJ DŁUGOŚCI z niewłaściwym
obrazem.
test_mux_filtergraph.py 431 21 przypadków, każdy asertuje CAŁY string
";".join(filters) wobec zapisanego wzorca
test_mux_argv.py 294 4 przypadki, pełne argv element po elemencie
_mux_helpers.py 180 wspólne budowanie wejść, jawnie importowane
Dowód nie-pustości siatki przed refaktorem: przestawienie
setsar=1,format=yuv420p w cięciu popupu wywaliło wszystkie 21 przypadków.
Nowy mux/composite.py (135) to wspólny szkielet float/slide i realna
deduplikacja — slide skurczył się ze 172 do 85 linii. Nowy mux/plan.py (241)
niesie PopupPlan liczony i walidowany raz.
CELOWO NIE ZUNIFIKOWANO ramp float i slide. Wyglądają na ten sam kształt
narastanie-podtrzymanie-opadanie i nie są: opadanie slide ma dodatkowe
max(0, ...), którego float nie ma. Ujemne przesunięcie przesunęłoby warstwy
w złą stronę poza koniec. Renderuje się bez błędu; widać dopiero w pikselach.
Powód zapisany w docstringu modułu.
DOWÓD: 7 mutacji. Najostrzejsza to C — wyemitowanie metadanych ścieżek przed
argumentami kodeka: złapały ją wszystkie 4 przypadki argv, podczas gdy
63 POZOSTAŁE TESTY MUX PRZESZŁY, a ffmpeg przyjął argv bez protestu.
To najlepszy dowód, że stary suite był w tym miejscu ślepy.
ZNALEZIONA I ZAŁATANA LUKA W POKRYCIU. Mutacja F (slide podaje komunikat
float) nie została złapana przez NIC — grep pokazał, że żaden test nie
asertował ani jednego z dwóch komunikatów strażnika długości, a refaktor
przenosił obie gałęzie do composite.py. Dopisany test na dokładną treść;
po nim mutacja F pada.
CZEGO ANALIZA NIE PRZEWIDZIAŁA
- _resolve_mode nie jest wart wydzielenia: to ternary, a ruff liczy ternary
jako 0. Wydzielenie byłoby jednolinijkowym pomocnikiem z jednym wywołaniem,
czego reguła 4 zabrania.
- Pokrycie float/slide jest większe niż 65% — po wydzieleniu composite_graph
wspólny jest CAŁY szkielet.
- Przypadek tail_gap > 0 jest nieosiągalny bez cropu: przy teardown_tail == 0
tail_gap jest algebraicznie zawsze zerowy.
- Normalizacja cropu i wykrywanie ogona działają we WSZYSTKICH trzech trybach,
nie tylko float — tylko graf ignoruje crop w cut i slide.
Suite: 1518 unit (+27 nowych) + 51 integration. ruff, format i preview
blank-lines czysto. C901 zbiory: cztery usunięte, nic nie dodane.
test_mux.py 1610 → 1524 — nadal ponad limitem, to zadanie fazy 5.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A
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.
CC 10 → 6. Wszystkie cztery pozostałe naruszenia w pakiecie
muxzniknęły.compose_popup_videomux_audio_tracks_compose_floating_compose_slideSiatka pierwsza, przed dotknięciem kodu
To budowniczowie filtergraphu ffmpeg. Istniejące 63 testy w większości sprawdzają „renderuje się bez błędu" — a błąd tutaj produkuje plik wideo właściwej długości z niewłaściwym obrazem.
test_mux_filtergraph.py";".join(filters)wobec zapisanego wzorcatest_mux_argv.py_mux_helpers.pyDowód nie-pustości siatki przed refaktorem: przestawienie
setsar=1,format=yuv420pw cięciu popupu wywaliło wszystkie 21 przypadków.Realna deduplikacja
Nowy
mux/composite.py(135) to wspólny szkielet float/slide —slide.pyskurczył się ze 172 do 85 linii. Nowymux/plan.py(241) niesiePopupPlanliczony i walidowany raz.Celowo NIE zunifikowano ramp float i slide. Wyglądają na ten sam kształt narastanie–podtrzymanie–opadanie i nie są: opadanie slide ma dodatkowe
max(0, …), którego float nie ma. Ujemne przesunięcie przesunęłoby warstwy w złą stronę poza koniec. Renderuje się bez błędu; widać dopiero w pikselach. Powód zapisany w docstringu modułu.Dowód: 7 mutacji
Najostrzejsza to C — wyemitowanie metadanych ścieżek przed argumentami kodeka:
To najlepszy dowód, że stary suite był w tym miejscu ślepy.
Znaleziona i załatana luka w pokryciu
Mutacja F (slide podaje komunikat float) nie została złapana przez nic.
greppokazał, że żaden test nie asertował ani jednego z dwóch komunikatów strażnika długości — a refaktor przenosił obie gałęzie docomposite.py. Dopisany test na dokładną treść; po nim mutacja F pada.Czego analiza nie przewidziała
_resolve_modenie jest wart wydzielenia — to ternary, a ruff liczy ternary jako 0. Wydzielenie byłoby jednolinijkowym pomocnikiem z jednym wywołaniem, czego reguła 4 zabrania.tail_gap > 0jest nieosiągalny bez cropu: przyteardown_tail == 0jest algebraicznie zawsze zerowy.cutislide.Testy
1518 unit (+27 nowych) + 51 integration
ruff check,ruff format --checki preview blank-lines — czystoC901 zbiory: cztery usunięte, nic nie dodane
test_mux.py1610 → 1524 — nadal ponad limitem, to zadanie Fazy 5.🤖 Generated with Claude Code
https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A