# Maszynowo wykonywalna wersja notatki migracyjnej acme-sdk-2.x-migration.md. # # Zasada architektoniczna: co da się zmigrować deterministycznie, migrujemy regułą, # a nie modelem. LLM jest od reszty - od przypadków, których reguła nie obejmuje, # i od oceny, czy wynik ma sens. Reguły są częścią pakietu APM, więc podlegają # temu samemu wersjonowaniu i przeglądowi co skill. package: acme-sdk applies_to: ">=2.0.0,<3.0.0" file_glob: "*.py" rules: - id: import-client description: "Client -> AcmeClient w imporcie" pattern: '\bfrom acme import Client\b' replacement: 'from acme import AcmeClient' - id: constructor description: "Konstruktor: nowa nazwa klasy, endpoint -> base_url" pattern: '\bClient\(\s*api_key=(?P[^,]+),\s*endpoint=(?P[^)]+)\)' replacement: 'AcmeClient(api_key=\g, base_url=\g)' - id: send-message description: "send() -> messages.create() z nowymi nazwami parametrów" pattern: '\.send\(\s*to=(?P[^,]+),\s*body=(?P[^)]+)\)' replacement: '.messages.create(recipient=\g, content=\g)' - id: drop-close description: "Klient 2.x zwalnia zasoby automatycznie - close() usunięte z API" pattern: '^[ \t]*[A-Za-z_][A-Za-z0-9_]*\.close\(\)[ \t]*\n' replacement: '' multiline: true - id: response-attribute description: "Odpowiedź jest obiektem Message, nie słownikiem" pattern: '(?P\b[a-z_][a-z0-9_]*)\[[''"]id[''"]\]' replacement: '\g.id'