INW008 missing-member¶
Co robi¶
Zgłasza pakiet, w którym brakuje elementu wymienionego w require jego [[tool.inwards.shape]]. Diagnostyka wskazuje __init__.py pakietu, a gdy go nie ma, jego pierwszy plik. require = ["__init__", "router", "service"] oznacza, że każdy pakiet wybrany przez kształt ma __init__.py, moduł albo podpakiet router i taki sam service; service.py oznacza tylko moduł, service/ tylko podpakiet. Drugi kierunek, elementy, których nie powinno być, zgłasza INW007.
Dlaczego to źle¶
Wymagany element to zwykle punkt wejścia, na którym polegają inni: korzeń kompozycji (composition root), router pakietu, jego publiczny serwis. Agent może go usunąć, nie dotykając żadnego importu, scalając go z innym modułem albo kasując przez Bash, i nic innego nie zawiedzie aż do uruchomienia. INW008 wyłapuje to na końcu tury, a w edytorze, gdy tylko plik zniknie.
Przykład¶
Warstwy z INW001, z kształtem, który wymaga modułu place w pakiecie aplikacji:
[tool.inwards]
layers = [
{ name = "domain", modules = ["shop.domain"] },
{ name = "application", modules = ["shop.application"] },
{ name = "infrastructure", modules = ["shop.infrastructure"] },
]
[[tool.inwards.shape]]
packages = ["shop.application"]
allow = ["cancel"]
require = ["place"]
Agent przenosi place.py do nowego cancel.py i usuwa go:
shop/application/cancel.py:1:1: INW008 Package "shop.application" has no "place" member, which its shape requires.
fix: Create shop/application/place.py, or put back the one that was removed.
1. If place.py was moved, renamed or deleted, restore it in shop/application/.
2. Otherwise create shop/application/place.py for this package's place code.
3. Don't edit [tool.inwards] yourself. If the package really doesn't need it, ask the user to change `require` in its [[tool.inwards.shape]].
docs: https://sircypkowskyy.github.io/inwards/rules/INW008/
Po poprawce wymagany moduł wraca.
Jak naprawić¶
- Jeśli element przeniesiono, przemianowano albo usunięto, przywróć go.
- W przeciwnym razie utwórz go, z kodem, który według roli pakietu tam należy.
- Jeśli pakiet naprawdę nie potrzebuje tego elementu, użytkownik zmienia
requirew jego kształcie. Agent pyta; nie edytuje[tool.inwards].
Bezpieczeństwo poprawki¶
Brak automatycznej poprawki (autofix: false). Przywrócenie pliku łatwo zautomatyzować, ale tylko człowiek albo agent, który go usunął, wie, jaka treść jest właściwa.
Konfiguracja¶
Poziom: błąd. require i selektory opisuje Kształt pakietu. [tool.inwards.rules] może wyłączyć regułę albo zmienić ją w ostrzeżenie (Konfiguracja reguł). INW008 nie da się wyciszyć w linii: dotyczy drzewa pakietów, a miejscem na zmianę jest konfiguracja kształtu.
W hookach Claude Code INW008 dla pakietu edytowanego pliku jest zawsze kontekstem, nigdy blokadą: agent tworzący router.py w nowym pakiecie dowiaduje się, że wciąż brakuje service.py, i może go dodać w następnym kroku. Stop gate blokuje na diagnostykach INW008, które pojawiły się od startu sesji, więc usunięcie wymaganego pliku przez Bash zostanie wyłapane. Pakiet, któremu brakowało elementu już na starcie sesji, nie blokuje, chyba że ustawiono stop-gate = "project": wtedy blokuje każda diagnostyka INW008, której nie akceptuje baseline, stara czy nowa.
Znane ograniczenia¶
inwards serverzgłasza INW008 w przebiegu całego projektu, który rusza, gdy edytor go uruchamia, przy każdym zapisie i gdy pliki powstają albo znikają, a nie w trakcie pisania.- Nazwane szablony, warstwy ról i
inwards init --style fastapisą otwarte w #97.