Changelog
Changelog
Wybrane najważniejsze zmiany z ostatnich wydań. Pełne wersje API i zasady wprowadzania zmian niekompatybilnych wstecz (Breaking-Change-Policy) znajdują się w sekcji Wersjonowanie API i polityka LTS.
Szczegółowe zmiany w poszczególnych punktach końcowych: Specyfikacja OpenAPI oraz interaktywna referencja API.
2026-04 · Analityka dla pojedynczego kodu QR w Dashboardzie
- Dashboard: Przycisk analityki na liście kodów QR otwiera teraz stronę statystyk danego kodu QR pod adresem
/dashboard/codes/{id}. - Routing: Alias
/dashboard/codesnadal przekierowuje na/dashboard, ale nie przechwytuje już tras szczegółowych, takich jak/dashboard/codes/{id}. - API: Strona szczegółów ładuje kod QR bezpośrednio przez
GET /v1/codes/:id; dzięki temu nie zależy już od limitów stronicowania listy. - Testy: Testy regresyjne obejmują przekierowanie aliasu oraz bezpośrednie ładowanie kodu.
2026-04 · Okno dialogowe usuwania kodu QR w Dashboardzie
- Dashboard: Ikona kosza na liście kodów QR otwiera teraz dedykowane okno dialogowe React zamiast natywnego wyskakującego okienka przeglądarki.
- Informacja zwrotna: Po usunięciu pojawia się powiadomienie typu toast informujące o sukcesie lub błędzie.
- Testy: Plik
packages/dashboard/tests/dashboard.test.tszapobiega regresjom związanym zconfirm()w procesie usuwania kodu QR.
2026-04 · Test krótkiego linku dla dynamicznych kodów QR w Dashboardzie
- Dashboard: Krótkie kody (shortcodes) na liście kodów QR można teraz klikać bezpośrednio jako zewnętrzne linki przekierowujące. Ikona linku zewnętrznego obok np.
wu3qaaotwierahttps://qr3.app/{shortCode}w nowej karcie. - i18n: Dodano teksty podpowiedzi (tooltips) dla języka niemieckiego i angielskiego.
- Testy: Plik
packages/dashboard/tests/dashboard.test.tschroni przed regresjami atrybut linku href, zachowanie otwierania w nowej karcie,noopener noreferreroraz ikonę.
2026-04 · Trasa Redirect-Worker dla dynamicznych kodów QR
- Poprawka: Dynamiczne kody QR pod adresem
https://qr3.app/{shortCode}są ponownie przetwarzane przez Redirect-Worker. Trasa produkcyjna używa terazqr3.app/*, ponieważ trasy Cloudflare Workers nie obsługują parametrów ścieżki:code. - Zabezpieczenie: Niedopasowane ścieżki są przekazywane do landing origin, aby standardowe strony, takie jak
/de/pricing, nie były blokowane przez Redirect-Worker. - Testy: Plik
packages/redirect/tests/unit/redirect.test.tsweryfikuje trasę wieloznaczną (wildcard), przetwarzanie krótkich kodów oraz przekazywanie do origin.
2026-04 · Przegląd skanowań DPP w przestrzeni roboczej (Q3.4.2)
- Nowość:
GET /v1/workspace/stats/dpp?days=30— agreguje wszystkiedpp_scansdla przestrzeni roboczej klucza API (active_dpps,scans_by_day,top_dppsz nazwą produktu/kategorią). - Dashboard: Karta na stronie głównej (
/dashboard) z 30-dniowym wykresem słupkowym + listami najpopularniejszych — równolegle do kart kodów QR. - Publiczne: Krótki link marketingowy
GET /dpp/dpp_<id>(jeden segment) do prezentacji na żywo, równolegle do/dpp/{gtin}/{serial}.
2026-04 · Analityka skanowań DPP (Q3.4.1)
- Nowość:
GET /v1/dpp/:id/stats?days=30— zagregowane skanowania publicznego resolvera GS1 dla każdego DPP. Pola:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Nowość: Tabela
dpp_scans(migracja0011) — oddzielona odscans(Redirect-Worker). Adresy IP są haszowane przy użyciu codziennie rotowanej soli (salt), surowe adresy IP nigdy nie trafiają do D1. - Dashboard: Karta z miniwykresem (SVG, bez zewnętrznej biblioteki wykresów) pod adresem
/dashboard/dpp/:dppIdz 30-dniowymi słupkami + zestawieniem top 3. Stan pusty (empty state), gdy DPP jest aktywny, ale nie ma jeszcze skanowań.
2026-04 · Symulator zgodności z przepisami UE na żywo (Q3.3.7)
- Nowość:
POST /v1/dpp/:id/validate-update— symuluje częściowe aktualizacje w sposób bezstanowy (stateless) (status, lista rynków itp.) bez zapisywania danych. Odpowiedź zawieraeu_compliance+preview.changed_fields. - Dashboard: Karta symulatora w szczegółach DPP (
/dashboard/dpp/:dppId) — znaczniki (chips) dlaDE/AT/FR/IT/ES/NL+ niestandardowe, lista rozwijana statusu, Preview EU impact / Save changes / Reset. Bez blokowania interfejsu dzięki RemixuseFetcher. - Zabezpieczenie: Wydzielone funkcje pomocnicze symulatora (
readUpdatePatchFromForm,marketCountriesKey) + 18 nowych testów jednostkowych; poprawka błędu: pojedyncza wartość wejściowa spoza standardu ISO nie powoduje już wyczyszczenia listy rynków.
2026-04 · Podgląd zgodności z przepisami UE na żywo w formularzu tworzenia (Q3.3.6)
- Zmieniono:
POST /v1/dpp/validatezwraca dodatkowoeu_compliance— ten sam walidator coGET /v1/dpp/:id/eu-compliance, działający bezstanowo przed zapisaniem. - Dashboard: Podgląd pod istniejącym panelem walidacji + nowy baner ostrzegawczy (Save-Guard-Banner) przed przyciskami zapisu, jeśli występują błędy/ostrzeżenia (pluralizacja i18n DE/EN).
EU-Validator + Textil-UI (Q3.3.4 + Q3.3.5)
- Nowość: Walidator zgodności z przepisami UE z 5 regułami dla tekstyliów (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Nowość:
GET /v1/dpp/:id/eu-compliancez polamicompliant/espr_ready/issues[]/summary. - Dashboard: Sekcja zgodności z przepisami UE w szczegółach DPP (kafelki podsumowania, pogrupowane karty problemów, plakietka ESPR-Ready w nagłówku).
Textil-DPP-Schema (Q3.3.1–Q3.3.3)
- Nowość: Kategoria
textilez obowiązkowym łańcuchem AGEC (tkanie/dzianie → barwienie/drukowanie → konfekcjonowanie), dla każdego włóknaorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, żywotność, Recyclability). - Nowość: Podstawowe pole
market_countries: string[](ISO 3166-1 alpha-2) we wszystkich kategoriach DPP — steruje specyficznymi dla Francji regułami AGEC oraz francuską obowiązkową notą dla konsumentów. - Nowość: Szablon HTML dla konsumenta z ostrzeżeniem AGEC o mikroplastiku, 3-stopniowym łańcuchem pochodzenia (pigułki z flagami), listą SVHC oraz sekcjami Durability i Recyclability.
- Migracja:
0010_dpp_market_countries(D1).
DPP-Bulk-Import (Q3.2.1–Q3.2.5)
- Nowość:
POST /v1/dpp/importakceptuje pliki CSV i XLSX (kompatybilne z Workers dzięki SheetJSxlsx, paczka gzip o rozmiarze ok. 283 KB). - Skalowanie: limit zależny od planu (Free 100 → Enterprise 10k) + wsadowe
db.batch()po 100 + limit rozmiaru żądania (body) 5 MB. - Nowość: Raport o błędach jako CSV w polu
errors_csvodpowiedzi 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxdostarcza gotowe szablony dla baterii i tekstyliów. - Dashboard: Przesyłanie metodą przeciągnij i upuść (drag-and-drop) pod adresem
/dashboard/dpp/importz proxy szablonów i pobieraniem CSV inline.
Zmiany nie-breaking — rozszerzenia LTS
Wszystkie wyżej wymienione zmiany mają charakter addytywny:
- Istniejący klienci
POST /v1/dpp/validateignorują nowe poleeu_compliancebez konieczności wprowadzania zmian. - Istniejące procesy (
battery-Flows) pozostają bez zmian. - Pole
market_countriesjest opcjonalne i domyślnie przyjmuje wartość[].
Zasady wprowadzania zmian niekompatybilnych wstecz (Breaking-Change-Policy) opisano w sekcji Wersjonowanie API.