P4 Stage 1: zunifikuj parsowanie błędów PBN przez ErrorRecord#611
Open
mpasternak wants to merge 1 commit into
Open
P4 Stage 1: zunifikuj parsowanie błędów PBN przez ErrorRecord#611mpasternak wants to merge 1 commit into
mpasternak wants to merge 1 commit into
Conversation
Cztery rozproszone, kruche parsery błędów wysyłki do PBN (format_pbn_error,
parse_pbn_api_error, parse_error_details, admin exception_details) stają się
cienkimi adapterami nad jednym, wspólnym kontraktem ErrorRecord.
Rdzeń (ErrorRecord + totalne parse() + serialize() do formatu v1) mieszka w
pakiecie pbn-client (0.2.1) jako czysta, framework-niezależna wiedza o
protokole PBN. W BPP zostają wyłącznie Django-owe adaptery display. Do czasu
publikacji pbn-client 0.2.1 na PyPI, zależność jest pinowana git-source w
[tool.uv.sources] (do usunięcia po release).
Rollout reader-first (Stage 1): readery rozumieją legacy ORAZ format v1;
writery bez zmian. serialize() istnieje, ale nie jest podpięty (Stage 2).
Byte-identyczność realistycznego legacy pinowana golden testami
charakteryzacyjnymi (zdjętymi sprzed unifikacji). Świadome ulepszenia:
format_pbn_error nie rzuca już TypeError na payloadzie-liczbie; admin
exception_details porzuca hack split('"details":')[1][:-3].
Naprawy z 2× adwersaryjnej recenzji Fable: (1) readery poprawnie obsługują
blob v1 (pole `wire`; guard >512 tylko dla legacy) — bez tego Stage 1 nie
kupował ochrony przed deploy-race; (2) parse() jest totalne także na
RecursionError/OverflowError/MemoryError z wrogiego body; (3) content_json_valid
odróżnia JSON null od niepoprawnego body; (4) serialize() capuje wszystkie pola
(blob dowodliwie < 65535). Szczegóły: docs/deweloper/p4-error-record-unifikacja-spec.md §9.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Cel
Cztery rozproszone, kruche parsery błędów wysyłki do PBN (
format_pbn_error,parse_pbn_api_error,parse_error_details, adminexception_details) →cienkie adaptery nad jednym kontraktem
ErrorRecord.Rdzeń (
ErrorRecord+parse+serialize) mieszka w pakiecie pbn-client(0.2.1) jako czysta wiedza o protokole — patrz iplweb/pbn-client#7. W BPP
zostają tylko Django-owe adaptery display.
Rollout reader-first (Stage 1)
Readery rozumieją legacy ORAZ format v1; writery bez zmian.
serialize()istnieje, ale nie jest podpięty (Stage 2 — dopiero po wdrożeniuStage 1 na całej flocie). To eliminuje deploy-race przy przełączaniu writerów.
Byte-identyczność
Golden testy charakteryzacyjne (
test_error_record_golden.py+ fixturedata/error_record_golden.json) zdjęte z outputu sprzed unifikacji pinująbyte-identyczność realistycznego legacy (per-funkcja, na jej realnej domenie
wejścia). Świadome ulepszenia: koniec crasha
TypeErrorna payloadzie-liczbie;koniec hacka
split('"details":')[1][:-3]w adminie.Recenzje adwersaryjne (2× Fable) — naprawione
wirereadery klasyfikowały blob v1 jako„nie-PBN" / renderowały surowy JSON → Stage 1 nie kupował ochrony. Naprawione
test_error_record_v1_reader.py.parse():RecursionError/OverflowError/MemoryError.null↔ niepoprawny body: polecontent_json_valid.Rozliczenie findingów:
docs/deweloper/p4-error-record-unifikacja-spec.md§9.Zależność / merge order
[tool.uv.sources]pinujepbn-clientgit-source do commita gałęzifeat/error-record(pakiet PUBLIC, CI go pobierze). Po wydaniu pbn-client0.2.1 na PyPI usunąć wpis z
[tool.uv.sources]— pin>=0.2.1,<0.3wystarczy. Merge dopiero po iplweb/pbn-client#7.
Testy
Pełne
pbn_export_queue+pbn_api: 601 passed (w tym playwright adminchangelist renderujący
exception_details). ruff +manage.py checkczyste.Stack: na
feat/pbn-shims(#609).🤖 Generated with Claude Code