Przejdź do głównej zawartości

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/codes nadal 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.ts zapobiega regresjom związanym z confirm() 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. wu3qaa otwiera https://qr3.app/{shortCode} w nowej karcie.
  • i18n: Dodano teksty podpowiedzi (tooltips) dla języka niemieckiego i angielskiego.
  • Testy: Plik packages/dashboard/tests/dashboard.test.ts chroni przed regresjami atrybut linku href, zachowanie otwierania w nowej karcie, noopener noreferrer oraz 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 teraz qr3.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.ts weryfikuje 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 wszystkie dpp_scans dla przestrzeni roboczej klucza API (active_dpps, scans_by_day, top_dpps z 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 (migracja 0011) — oddzielona od scans (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/:dppId z 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ź zawiera eu_compliance + preview.changed_fields.
  • Dashboard: Karta symulatora w szczegółach DPP (/dashboard/dpp/:dppId) — znaczniki (chips) dla DE/AT/FR/IT/ES/NL + niestandardowe, lista rozwijana statusu, Preview EU impact / Save changes / Reset. Bez blokowania interfejsu dzięki Remix useFetcher.
  • 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/validate zwraca dodatkowo eu_compliance — ten sam walidator co GET /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-compliance z polami compliant / 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 textile z obowiązkowym łańcuchem AGEC (tkanie/dzianie → barwienie/drukowanie → konfekcjonowanie), dla każdego włókna origin_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/import akceptuje pliki CSV i XLSX (kompatybilne z Workers dzięki SheetJS xlsx, 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_csv odpowiedzi 201; GET /v1/dpp/import/templates/:category?format=csv|xlsx dostarcza gotowe szablony dla baterii i tekstyliów.
  • Dashboard: Przesyłanie metodą przeciągnij i upuść (drag-and-drop) pod adresem /dashboard/dpp/import z 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/validate ignorują nowe pole eu_compliance bez konieczności wprowadzania zmian.
  • Istniejące procesy (battery-Flows) pozostają bez zmian.
  • Pole market_countries jest opcjonalne i domyślnie przyjmuje wartość [].

Zasady wprowadzania zmian niekompatybilnych wstecz (Breaking-Change-Policy) opisano w sekcji Wersjonowanie API.