ci: zamknij limity 600 linii i CC≤10 bramkami (faza 6)#71
Merged
Conversation
Cały refaktor był odwracalny w 2-3 PR-ach — dokładnie tak repo urosło do stanu wyjściowego. Ta faza czyni regresję niemożliwą do zmergowania, a nie tylko niezalecaną. 1. Bramka complexity w ruff: C901 dodane do select, [tool.ruff.lint.mccabe] max-complexity = 10. ignore=["UP040"] i per-file-ignores bez zmian; ZERO wpisów C901 w per-file-ignores. Zweryfikowane: ruff check . przechodzi (jedyny wcześniejszy szum to UP040, już ignorowany), a wstrzyknięcie funkcji o CC 12 jest łapane. 2. Hook 600 linii: scripts/check_file_length.py (tylko stdlib, 68 linii, każda funkcja CC≤10 — sam podlega obu bramkom). Wpięty jako repo:local w pre-commit, files: ^(guidebot_recorder|tests|scripts)/.*\.py$. Zakres .py; komentarz mówi, gdzie dodać \.js$ po fazie 7. Zweryfikowane: przechodzi na obecnym drzewie, łapie plik 700-liniowy (exit=1 z komunikatem). OBIE bramki obejmują tests/, nie tylko guidebot_recorder/ — w połowie tej operacji pomiar skanujący tylko pakiet przeoczył 16. naruszenie C901 w pliku testowym. Narzędzie pomiarowe musi mieć ten sam zakres co bramka. C901 to ruff check . (całe repo, tests/** ignoruje tylko E501); hook ma tests/ w regexie. 3. CLAUDE.md (repo nie miało): zapisuje reguły nieoczywiste, które przyszły współpracownik "uprościłby" i przywrócił usunięte problemy — wzorzec fasada+szew i dlaczego re-eksport wstrzymanej nazwy to cicha regresja; wołanie szwów przez obiekt modułu; strażniki AST, których nie wolno osłabiać; brak conftestu i fabryka zamiast fixture (F811); że match nie obniża CC. Napisane wobec prawdziwych docstringów fasad i _seam_guard. Zero zmian zachowania Pythona. import guidebot_recorder OK. ruff (0.15 i 0.9.2) czysto. Format-drift 12 plików pre-existing, nietknięty. 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.
Cały refaktor był odwracalny w 2–3 PR-ach — dokładnie tak repo urosło do stanu wyjściowego. Ta faza czyni regresję niemożliwą do zmergowania, a nie tylko niezalecaną.
1. Bramka complexity w ruff
per-file-ignoresbez zmian, zero wpisów C901. Zweryfikowane:ruff check .przechodzi (jedyny wcześniejszy szum to UP040, już ignorowany), a wstrzyknięcie funkcji o CC 12 jest łapane (C901 deep is too complex (12 > 10)).2. Hook 600 linii
Ruff nie ma reguły na długość pliku →
scripts/check_file_length.py(tylko stdlib, 68 linii, każda funkcja CC≤10 — sam podlega obu bramkom). Wpięty jakorepo: localw pre-commit,files: ^(guidebot_recorder|tests|scripts)/.*\.py$.Zakres
.py; komentarz w configu mówi, gdzie dodać\.js$po Fazie 7. Zweryfikowane: przechodzi na obecnym drzewie, łapie plik 700-liniowy (exit=1z komunikatem).Obie bramki obejmują
tests/W połowie tej operacji pomiar skanujący tylko
guidebot_recorder/przeoczył szesnaste naruszenie C901 siedzące w pliku testowym. Narzędzie pomiarowe musi mieć ten sam zakres co bramka. C901 toruff check .(całe repo;tests/**ignoruje tylko E501); hook matests/w regexie.3. CLAUDE.md
Repo go nie miało. Zapisuje reguły nieoczywiste, które przyszły współpracownik (człowiek lub AI) „uprościłby" i przywrócił usunięte problemy:
from .x import seamtest_*_seams.py,tests/_seam_guard.py), których nie wolno osłabiaćconftest.pyi fabryka zamiast fixture (dlaczego — F811)matchnie obniża CC w ruffie, a zagnieżdżonydefdolicza swojąNapisane wobec prawdziwych docstringów fasad i
_seam_guard, nie generycznie.Weryfikacja
Zero zmian zachowania Pythona.
import guidebot_recorderOK.ruff check .(0.15 i 0.9.2) czysto. Format-drift 12 plików pre-existing — nietknięty.Po tym PR limity są egzekwowane maszynowo przy każdym push.
🤖 Generated with Claude Code
https://claude.ai/code/session_0134rSCftVxsMVL8sngceT7A