Lekcja 26 · Faza 3 · Zamknięcie — narzędzia jednorazowego użytku
Ostatnia lekcja Fazy 3. W przeciwieństwie do wszystkiego dotąd, te cztery skille nie dzielą wspólnego słownictwa ani przepływu — każdy rozwiązuje jeden, wąski, mechaniczny problem, niezależnie od reszty pakietu. Łączy je tylko jedno: każdy koduje raz sprawdzoną procedurę, żeby nie trzeba było jej tłumaczyć AI (ani nowej osobie w zespole) od nowa za każdym razem — dokładnie ta sama postawa, co przy /wizard z poprzedniej lekcji, tylko skierowana na mechanikę inżynierską zamiast na ręczne procedury dla człowieka.
.agents/skills/{git-guardrails-claude-code,migrate-to-shoehorn,setup-pre-commit,resolving-merge-conflicts}/SKILL.md w tym repo.
| Skill | Komenda | Robi |
|---|---|---|
| git-guardrails-claude-code | /git-guardrails-claude-code | Instaluje hook blokujący niebezpieczne komendy git przed ich wykonaniem |
| setup-pre-commit | /setup-pre-commit | Konfiguruje Husky + lint-staged + Prettier + typecheck/testy w pre-commit |
| migrate-to-shoehorn | /migrate-to-shoehorn | Zamienia asercje as w testach na bezpieczne typowo alternatywy |
| resolving-merge-conflicts | /resolving-merge-conflicts | Dyscyplina rozwiązywania trwającego konfliktu merge'a/rebase'a |
/git-guardrails-claude-code — hook, który już rozpoznajeszTo bezpośredni callback do Lekcji 6: skill instaluje hook typu PreToolUse z matcherem Bash, przechwytujący komendę zanim Claude ją wykona. Domyślnie blokuje: git push (wszystkie warianty, w tym --force), git reset --hard, git clean -f/-fd, git branch -D, git checkout ./git restore .. Zablokowana komenda kończy się kodem wyjścia 2, a Claude widzi komunikat, że nie ma uprawnień do tej komendy.
Proces instalacji: (1) zapytanie o zasięg — projekt (.claude/settings.json) czy globalnie (~/.claude/settings.json), dokładnie te same dwa poziomy z Lekcji 6; (2) skopiowanie skryptu do .claude/hooks/; (3) dopisanie wpisu do hooks.PreToolUse w istniejącym pliku ustawień — scalenie, nie nadpisanie reszty configu; (4) opcjonalna personalizacja listy wzorców; (5) weryfikacja przez spreparowany JSON na wejściu, oczekujący kodu wyjścia 2.
/setup-pre-commit — Husky, lint-staged, PrettierWykrywa menedżera pakietów po obecności pliku blokady (package-lock.json/pnpm-lock.yaml/yarn.lock/bun.lockb), instaluje husky/lint-staged/prettier jako devDependencies, inicjalizuje Husky (npx husky init) i pisze .husky/pre-commit uruchamiający po kolei: lint-staged (szybkie, tylko na zmienionych plikach), potem pełny typecheck, potem test. Jeśli projekt nie ma skryptu typecheck albo test w package.json, te linie są pomijane, a użytkownik dowiaduje się o tym wprost.
Ostatni krok jest jednocześnie testem: skill każe zacommitować zmiany z komunikatem opisującym dodanie hooków — sam ten commit przechodzi przez świeżo zainstalowany pre-commit, więc jeśli coś jest nie tak, widać to natychmiast.
/migrate-to-shoehorn — bezpieczne typowo dane testowe@total-typescript/shoehorn pozwala przekazywać częściowe dane w testach, nie tracąc kontroli typów — wyłącznie w kodzie testowym, nigdy w produkcyjnym.
| Funkcja | Zastępuje | Kiedy |
|---|---|---|
fromPartial() | as Type | Częściowe dane, które mają wciąż przechodzić typecheck |
fromAny() | as unknown as Type | Celowo błędne dane (np. testy przypadków błędu), z zachowanym autocomplete |
fromExact() | — | Wymuszenie pełnego obiektu — łatwo zamienić potem na fromPartial |
Przykład: zamiast fałszować wszystkie 20 pól typu Request, żeby przetestować funkcję, która czyta tylko body.id — fromPartial({ body: { id: "123" } }) podaje tylko to, co potrzebne, i wciąż przechodzi typecheck.
/resolving-merge-conflicts — dyscyplina, nie automatPięć kroków, w tej kolejności:
--abort. Ucieczka z konfliktu przez abort tylko odracza tę samą pracę na później — dyscyplina zakłada, że skoro już wchodzisz w konflikt, kończysz go, uzbrojony w kontekst z oryginalnych źródeł.
W swoim prawdziwym projekcie firmowym wybierz jeden z czterech skilli, który faktycznie rozwiązuje coś, co masz na tapecie:
/setup-pre-commit i sprawdź, czy testowy commit faktycznie przechodzi przez świeży hook.git push --force albo reset --hard — uruchom /git-guardrails-claude-code i zweryfikuj go spreparowanym wejściem z SKILL.md./resolving-merge-conflicts i sprawdź, czy Claude faktycznie sięgnął po commit message'e i PR-y, zanim rozwiązał pierwszy hunk.1. Jaki typ hooka instaluje git-guardrails-claude-code, i kiedy się uruchamia?
2. Po czym setup-pre-commit rozpoznaje, którego menedżera pakietów użyć?
3. Gdzie wolno używać funkcji z @total-typescript/shoehorn, według migrate-to-shoehorn?
4. Czego resolving-merge-conflicts wyraźnie zabrania podczas rozwiązywania konfliktu?
5. Skoro te cztery narzędzia nie dzielą wspólnego słownictwa, co je jednak łączy?