refactor(recorder): render.py → pakiet render/ (faza 1c)#65
Merged
Conversation
Ostatni i najtrudniejszy z trzech podziałów fazy 1. render.py 3016 → 15 modułów, 73 symbole, 2723 linie przeniesione, 34 zmienione. _run.py MA 941 LINII I TO JEST CELOWE. Faza 1 dzieliła PLIK, nie dekomponowała funkcji. run_render ma nadal CC 97 i 829 linii — to zadanie fazy 3. Zapisane w docstringu modułu, żeby struktura katalogów nie wyglądała na skończoną, zanim jest. SZWY: 20 nazw, 70 miejsc podmiany. 10 z 19 zdefiniowanych POZA pakietem, czyli tryb ustalony dopiero przy compile (1b). Fasada wstrzymuje wszystkie 19 i nigdy nie wiąże `replace`. Recorder i probe_frame_count mają konsumentów w DWÓCH modułach, więc jedna linia podmiany przestała wystarczać — strażnik to teraz egzekwuje (assert_multi_consumer_coverage), a testy podmieniają oba miejsca. TRZY RZECZY, KTÓRYCH POPRZEDNIE PODZIAŁY NIE MOGŁY PRZYNIEŚĆ 1. Szwy używane wyłącznie w ADNOTACJACH TYPÓW. Overlay jest wołany w jednym miejscu, a anotowany w siedmiu, w czterech modułach. Przez `from __future__ import annotations` te adnotacje są stringami i nic nie wiążą — ale skan AST nie odróżnia importu do adnotacji od importu do wartości. TYPE_CHECKING też by nie pomogło. Rozwiązane anotowaniem przez obiekt modułu, co jest zgodne z regułą szwów. 8 z 13 przecelowań. 2. `timeline` jest zmienną LOKALNĄ w run_render. Wywołanie timeline._apply_timeline_edits(...) rozwiązałoby się do obiektu Timeline zbudowanego cztery linie wcześniej i wywaliło AttributeError na OSTATNIM kroku pełnego renderu — po kilkunastu minutach pracy. Alias timeline_module. 3. os.replace podmieniane ścieżką w stringu przez moduł render wymagało ROZSZERZENIA WSPÓLNEGO STRAŻNIKA, nie lokalnej łatki: odrzucał każdego właściciela z kropką. Dodany _module_chain_offender — łańcuch akceptowany tylko wtedy, gdy głowa jest submodułem pakietu i każdy krok rozwiązuje się do prawdziwego ModuleType mającego dany atrybut. Oba istniejące strażniki przechodzą bez zmian. Dwa odstępstwa od układu ze specu, oba udokumentowane w docstringach: sonda content-box poszła do popup_crop (jest poziomem 2 łańcucha cropu, a spec sam mówi, że trzy poziomy to jedna opowieść), a _prepare_main_after_popup_close do visuals (zamyka cykl importów i jest dokładnym odwróceniem _hand_cursor_to_popup). 34 zmienione linie: 13 przecelowań szwów + 21 requalifikacji odwołań w komentarzach, które podział uczynił fałszywymi (plus 8 poza pakietem — mux/crop.py miał odwołanie do render._recording_scale). DOWÓD: 6 mutacji, wszystkie czerwone, po jednej na tryb — name-import szwu wewnętrznego, brak name-importu szwu zewnętrznego, patch w fasadę, nazwa dwukonsumencka podmieniona raz, fasada re-eksportująca szew, łańcuch na złym submodule. Suite: 1542 passed (1491 unit + 51 integration), 1 skipped. Zweryfikowane niezależnie, nie tylko raportem wykonawcy. ruff czysto, preview blank-lines czysto, C901 zbiory identyczne — wyłącznie zmiana ścieżek. 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.
Ostatni i najtrudniejszy z trzech podziałów fazy 1.
render.py3016 → 15 modułów, 73 symbole, 2723 linie przeniesione, 34 zmienione._run.pyma 941 linii i to jest celoweFaza 1 dzieliła plik, nie dekomponowała funkcji.
run_renderma nadal CC 97 i 829 linii — to zadanie Fazy 3. Zapisane wprost w docstringu modułu, żeby struktura katalogów nie wyglądała na skończoną, zanim jest.errors.pyconstants.pytasks.pypages.pytimeline.py__init__.pynarration.pyreuse.pypopup_session.pyaudio.pypopup_detect.py_step.pyvisuals.pypopup_crop.py_run.pySzwy: 20 nazw, 70 miejsc podmiany
10 z 19 zdefiniowanych poza pakietem — tryb ustalony dopiero przy
compile(1b) i nieznany przymux(1a). Fasada wstrzymuje wszystkie 19 i nigdy nie wiążereplace.Recorderiprobe_frame_countmają konsumentów w dwóch modułach, więc jedna linia podmiany przestała wystarczać. Strażnik to egzekwuje (assert_multi_consumer_coverage), testy podmieniają oba miejsca.Trzy rzeczy, których poprzednie podziały nie mogły przynieść
1. Szwy używane wyłącznie w adnotacjach typów.
Overlayjest wołany w jednym miejscu, a anotowany w siedmiu, w czterech modułach. Przezfrom __future__ import annotationste adnotacje są stringami i nic nie wiążą w czasie wykonania — ale skan AST nie odróżnia importu do adnotacji od importu do wartości i zgłasza wszystkie jako wczesne wiązanie.TYPE_CHECKINGteż by nie pomogło. Rozwiązane anotowaniem przez obiekt modułu, co jest zgodne z regułą szwów. To 8 z 13 przecelowań.2.
timelinejest zmienną lokalną wrun_render. Wywołanietimeline._apply_timeline_edits(...)rozwiązałoby się do obiektuTimelinezbudowanego cztery linie wcześniej i wywaliłoAttributeErrorna ostatnim kroku pełnego renderu — po kilkunastu minutach pracy. Aliastimeline_module. Ta sama pułapka, którąmux_probejuż dokumentuje.3.
os.replacewymagało rozszerzenia wspólnego strażnika, nie lokalnej łatki. Test podmienia go ścieżką w stringu przez modułrender; po podzialerender.osznika. Ale strażnik odrzucał każdego właściciela z kropką. Dodany_module_chain_offender: łańcuch akceptowany tylko wtedy, gdy głowa jest submodułem pakietu i każdy krok rozwiązuje się do prawdziwegoModuleTypemającego dany atrybut. Oba istniejące strażniki przechodzą bez zmian.Dwa odstępstwa od układu ze specu
Oba udokumentowane w docstringach modułów:
popup_crop, niepopup_detect: jest poziomem 2 łańcucha cropu, a spec sam mówi, że trzy poziomy to jedna opowieść_prepare_main_after_popup_close→visuals, niepopup_session: zamyka cykl importów i jest dokładnym odwróceniem_hand_cursor_to_popup34 zmienione linie, wszystkie rozliczone
13 przecelowań szwów + 21 requalifikacji odwołań w komentarzach, które podział uczynił fałszywymi (plus 8 poza pakietem —
mux/crop.pymiał odwołanie dorender._recording_scale).git diff -Mjest tu bezużyteczny, więc rozliczenie pochodzi z porównaniaast.get_source_segmentper symbol wobecgit show HEAD:.Dowód: 6 mutacji, wszystkie czerwone
Po jednej na tryb: name-import szwu wewnętrznego · brak name-importu szwu zewnętrznego · patch w fasadę · nazwa dwukonsumencka podmieniona raz · fasada re-eksportująca szew · łańcuch na złym submodule.
Testy
1542 passed (1491 unit + 51 integration), 1 skipped — zweryfikowane niezależnie, nie tylko raportem wykonawcy.
ruff checkczysto · preview blank-lines czysto · C901 zbiory identyczne, wyłącznie zmiana ścieżek.🤖 Generated with Claude Code
https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A