Gå til indhold

Changelog

Changelog

Kuraterede højdepunkter fra de seneste udgivelser. For fuldstændige API-versioner og breaking change-politik, se API-versionering & LTS-politik.

Detaljerede ændringer for de enkelte endepunkter: OpenAPI-specifikation og interaktiv API-reference.


2026-04 · Dashboard-analyse pr. QR-kode

  • Dashboard: Analyse-knappen i QR-kodelisten åbner nu statistikside for den pågældende QR-kode under /dashboard/codes/{id}.
  • Routing: Aliasset /dashboard/codes viderestiller stadig til /dashboard, men fanger ikke længere detaljerede ruter som /dashboard/codes/{id}.
  • API: Detaljesiden indlæser QR-koden direkte via GET /v1/codes/:id; derved er den ikke længere afhængig af grænser for listepaginering.
  • Tests: Regressionstest dækker alias-viderestillingen og den direkte indlæsning af koden.

2026-04 · Dashboard-slettedialog for QR-koder

  • Dashboard: Skraldespandsikonet i QR-kodelisten åbner nu en dedikeret React-dialog i stedet for en nativ browser-popup.
  • Feedback: Efter sletning vises en toast-besked for succes eller fejl.
  • Tests: packages/dashboard/tests/dashboard.test.ts forhindrer regressioner på confirm() i QR-kode-sletteflowet.
  • Dashboard: Shortcodes i QR-kodelisten er nu direkte klikbare som eksterne viderestillingslinks. Det eksterne link-ikon ved siden af f.eks. wu3qaa åbner https://qr3.app/{shortCode} i en ny fane.
  • i18n: Tooltip-tekster tilføjet for tysk og engelsk.
  • Tests: packages/dashboard/tests/dashboard.test.ts beskytter link-href, ny fane-adfærd, noopener noreferrer og ikon mod regressioner.

2026-04 · Redirect-Worker-rute for dynamiske QR-koder

  • Fix: Dynamiske QR-koder under https://qr3.app/{shortCode} behandles igen af Redirect-Worker. Produktionsruten bruger nu qr3.app/*, fordi Cloudflare Worker-ruter ikke understøtter :code-stiparametre.
  • Hærdning: Ikke-matchende stier sendes videre til landing-origin, så normale sider som /de/pricing ikke blokeres af Redirect-Worker.
  • Tests: packages/redirect/tests/unit/redirect.test.ts tester wildcard-ruten, shortcode-behandling og origin-pass-through.

2026-04 · Workspace-DPP-scannings-oversigt (Q3.4.2)

  • Ny: GET /v1/workspace/stats/dpp?days=30 — aggregerer alle dpp_scans for API-nøgle-workspacet (active_dpps, scans_by_day, top_dpps med produktnavn/kategori).
  • Dashboard: Kort på startside (/dashboard) med 30-dages søjlediagram + toplister — parallelt med QR-kode-kortene.
  • Public: Marketing-kortlink GET /dpp/dpp_<id> (ét segment) til live-demoer, parallelt med /dpp/{gtin}/{serial}.

2026-04 · DPP-scanningsanalyse (Q3.4.1)

  • Ny: GET /v1/dpp/:id/stats?days=30 — aggregerede scanninger fra den offentlige GS1-resolver pr. DPP. Felter: total_scans, period_scans, scans_by_day, top_countries, top_devices, top_representations.
  • Ny: Tabel dpp_scans (migration 0011) — adskilt fra scans (Redirect-Worker). IP-adresser hashes med en dagligt roterende salt, rå IP’er når aldrig D1.
  • Dashboard: Mini-diagramkort (SVG, intet diagrambibliotek) på /dashboard/dpp/:dppId med 30-dages søjler + top 3-opdelinger. Empty-state så snart et DPP er live, men endnu ikke har haft nogen scanninger.

2026-04 · Live EU-overensstemmelsessimulator (Q3.3.7)

  • Ny: POST /v1/dpp/:id/validate-update — simulerer delvise opdateringer stateless (status, markedsliste, …) uden persistens. Svaret indeholder eu_compliance + preview.changed_fields.
  • Dashboard: Simulatorkort i DPP-detaljer (/dashboard/dpp/:dppId) — chips til DE/AT/FR/IT/ES/NL + Custom, status-dropdown, Forhåndsvis EU-indvirkning / Gem ændringer / Nulstil. Non-blocking via Remix useFetcher.
  • Hærdning: Udflyttede simulator-hjælpere (readUpdatePatchFromForm, marketCountriesKey) + 18 nye enhedstest; fejlretning: Enlig ikke-ISO-input sletter ikke længere markedslisten.

2026-04 · Live EU-overensstemmelsesforhåndsvisning i oprettelsesformularen (Q3.3.6)

  • Ændret: POST /v1/dpp/validate leverer yderligere eu_compliance — samme validator som GET /v1/dpp/:id/eu-compliance, stateless før lagring.
  • Dashboard: Forhåndsvisning under det eksisterende valideringspanel + nyt Save-Guard-banner før submit-knapperne, hvis der er udestående fejl/advarsler (i18n-pluralisering DE/EN).

2026-04 · EU-validator + tekstil-UI (Q3.3.4 + Q3.3.5)

  • Ny: EU-overensstemmelsesvalidator med 5 tekstilregler (TEXTILE_AGEC_REQUIRED, TEXTILE_MICROPLASTICS_CONSISTENCY, TEXTILE_SVHC_THRESHOLD, TEXTILE_GREENWASHING, TEXTILE_ESPR_READY).
  • Ny: GET /v1/dpp/:id/eu-compliance med compliant / espr_ready / issues[] / summary.
  • Dashboard: EU-overensstemmelsessektion i DPP-detaljer (oversigtsfliser, grupperede problemkort, ESPR-Ready-badge i headeren).

2026-04 · Tekstil-DPP-skema (Q3.3.1–Q3.3.3)

  • Ny: Kategori textile med obligatorisk AGEC-kæde (vævning/strikning → farvning/trykning → konfektionering), pr. fiber origin_country + recycled_pct, svhc_substances[], ESPR-tilvalg (PEF, levetid, genanvendelighed).
  • Ny: Basisfelt market_countries: string[] (ISO 3166-1 alpha-2) på alle DPP-kategorier — styrer FR-specifikke AGEC-regler og den franske obligatoriske forbrugeroplysning.
  • Ny: Forbruger-HTML-skabelon med AGEC-mikroplastadvarselsboks, 3-trins oprindelseskæde (flag-piller), SVHC-liste, holdbarheds- og genanvendelighedssektion.
  • Migration: 0010_dpp_market_countries (D1).

2026-04 · DPP-masseimport (Q3.2.1–Q3.2.5)

  • Ny: POST /v1/dpp/import accepterer CSV og XLSX (Worker-kompatibel via SheetJS xlsx, ~283 KB gzip bundle).
  • Skaleret: abonnementsbaseret grænse (Free 100 → Enterprise 10k) + chunked db.batch() à 100 + 5 MB body-grænse.
  • Ny: Fejlrapport som CSV i feltet errors_csv i 201-svaret; GET /v1/dpp/import/templates/:category?format=csv|xlsx leverer færdige skabeloner til batteri og tekstil.
  • Dashboard: Drag-and-drop-upload under /dashboard/dpp/import med skabelon-proxy og inline CSV-download.

Ikke-breaking — LTS-udvidelser

Alle ovennævnte ændringer er additive:

  • Eksisterende POST /v1/dpp/validate-klienter ignorerer det nye eu_compliance-felt uden ændringer.
  • Eksisterende battery-flows er uændrede.
  • market_countries er valgfri og har standardværdien [].

Se API-versionering for breaking change-politikken.