40 lines
1.6 KiB
Markdown
40 lines
1.6 KiB
Markdown
# ADR-0002: Deterministycznie tyle, ile się da; model tylko na resztę
|
|
|
|
- Status: przyjęty
|
|
- Data: 2026-08-28
|
|
|
|
## Kontekst
|
|
|
|
Migracja SDK to w większości mechaniczne podmiany. Powierzenie ich modelowi kosztuje tokeny,
|
|
wydłuża przebieg i wprowadza wariancję tam, gdzie wariancja jest czystą stratą -
|
|
nikt nie chce, żeby dwa uruchomienia dawały inny diff dla tej samej zmiany nazwy metody.
|
|
|
|
## Decyzja
|
|
|
|
Dzielimy pracę wzdłuż linii "czy da się to zrobić kodem":
|
|
|
|
1. Wykrycie ekosystemu, plików zależności i komendy testowej - adapter (`adapters/`).
|
|
2. Podbicie deklaracji wersji - adapter.
|
|
3. Migracja objęta regułami - silnik reguł czytający `*.codemod.yaml` z pakietu APM.
|
|
4. Reszta - agent `coder` z LLM.
|
|
5. Ocena wyniku - agent `reviewer` **oraz** niezależna kontrola mechaniczna.
|
|
|
|
Reguły codemod są częścią pakietu APM (leżą obok notatki migracyjnej), więc podlegają
|
|
temu samemu przeglądowi i wersjonowaniu co wiedza dla modelu.
|
|
|
|
## Konsekwencje
|
|
|
|
**Pozytywne**
|
|
|
|
- Powstaje tryb `--offline`: ta sama topologia bez modelu. Smoke test całego pipeline'u
|
|
na każdym MR, bez GPU i bez internetu.
|
|
- Punkt odniesienia: widać, ile przypadków model faktycznie dołożył ponad reguły.
|
|
- Mniejszy koszt i krótszy przebieg dla typowych migracji.
|
|
|
|
**Negatywne**
|
|
|
|
- Dwie ścieżki do utrzymania (`RuleBrain`, `LlmBrain`) i wspólny kontrakt między nimi.
|
|
- Reguły regexowe mają znane ograniczenia (zmiany strukturalne, wieloliniowe konteksty).
|
|
Świadomie nie budujemy własnego silnika AST - od tego są narzędzia dziedzinowe
|
|
(OpenRewrite, jscodeshift), które można podpiąć jako kolejny adapter.
|