Changelog
Changelog
Punti ewlenin ikkurati mill-aħħar rilaxxi. Għal verżjonijiet sħaħ tal-API u l-politika dwar bidliet li jinterrompu s-servizz (breaking changes), ara l-Verżjonar tal-API u Politika LTS.
Bidliet dettaljati fuq endpoints individwali: Speċifikazzjoni OpenAPI u Referenza tal-API interattiva.
2026-10 · Kuluri fid-Dashboard
- Ġdid: il-paġna tad-dettalji ta’ kodiċi għandha l-karta Kuluri: quddiem u sfond bħala valur hex, sfond trasparenti, previżjoni permezz tar-rotta reali tal-immaġni. Il-verifika hija l-istess bħal dik ta’
PATCH /v1/codes/{id}: pari kritiċi jeħtieġu konferma, pari taħt 1.5:1 ma jistgħux jiġu ssejvjati. - Ir-reset għal iswed fuq abjad jerġa’ jagħti fl-erba’ formati kollha l-istess bytes bħal mingħajr kuluri. Kodiċijiet mingħajr kuluri ma jinbidlux.
- Kodiċijiet trasparenti jidhru fuq disinn ta’ kwadri fil-previżjonijiet kollha tad-Dashboard. Dettalji: Kuluri fid-Dashboard.
2026-10 · Kuluri f’PDF u EPS
- Ġdid:
qr.pdfuqr.epsipinġufgubg, bħala parametri u bħala kuluri salvati. L-iswed u kull griż jinkitbu bħala skala ta’ griż (pjanċa sewda biss), u kull kulur ieħor bħala CMYK f’perċentwali sħaħ, bħal1F4E79bħala C74 M36 Y0 K53. - Sfond bħall-SVG: Ladarba jintgħażel kulur, ikun hemm wiċċ opak wara l-kodiċi u ż-żona kwieta tiegħu, abjad jew
bg.bg=transparentma jpinġi xejn. It-titlu jibqa’ iswed, il-pjanċa tal-logo bajda. - L-ebda bidla mingħajr kuluri: Mingħajr
fg/bgu mingħajr kuluri salvati, iż-żewġ formati jipprovdu l-istess bytes bħal qabel. Il-PDF ta’ passaport tal-prodott jibqa’ mingħajr kulur. - Limiti: l-ebda profil ICC, l-ebda PDF/X. Dettalji: Kuluri fl-istampar.
2026-09 · Kodiċijiet statiċi mingħajr cache tar-ridirezzjoni, tħassir simultanju
- Mibdul: Kodiċijiet statiċi mhumiex maħżuna aktar fil-cache tar-ridirezzjoni. Sejħa tal-link qasira tagħhom (
redirect_url) dejjem taqra l-istat attwali. WaraDELETE /v1/account, kodiċi statiku għalhekk ma jidderiġix aktar mas-sejħa li jmiss, filwaqt li qabel dan seta’ jieħu sa 24 siegħa. Bidla fil-pjan taffettwa wkoll il-kodiċijiet statiċi immedjatament. It-tħassir tal-kont ineħħi l-kodiċijiet dinamiċi bħal qabel. Kodiċijiet statiċi stampati fihom id-destinazzjoni tagħhom direttament u mhumiex affettwati. - Irranġat: Żewġ talbiet simultanji ta’
DELETE /v1/codes/:idfuq l-istess kodiċi jagħtu200darba u404darba. Il-webhookqr.deletedjintbagħat eżattament darba, filwaqt li qabel kien jintbagħat darbtejn. - Ġdid:
POSTuDELETE /v1/codes/:id/logoiwieġbu b’409(errors/conflict) jekk talba oħra tkun bidlet il-logo tal-istess kodiċi fl-istess ħin, u f’dak il-każ ma jibdlu xejn. Qabel, logo mtella’ seta’ jibqa’ maħżun mingħajr ma jintuża. Żewġ talbiet simultanji ta’DELETE /v1/codes/:id/logojagħtu200it-tnejn li huma. Dettalji: Logo.
2026-09 · TypeScript-SDK 1.2.0
- Ġdid f’
@qr3/sdk1.2.0:client.codes.update()jaċċettaappearanceu jipprovdi r-riżultati tal-verifika tal-kuntrast bħalaissuesfuq ir-riżultat; mingħajr sejbiet, il-kamp ikun nieqes.client.codes.imageUrl()jaċċettafg,bguecc. Kull kodiċi li l-API tirritorna (get,list,create,update,batchCreate) fihtitleuappearance. - Aġġorna:
npm install @qr3/sdk@latest. Python, Go u PHP se jsegwu. Dettalji: SDKs & CLI u Issejvja l-kuluri fuq il-kodiċi.
2026-09 · Il-ħin tal-iskadenza modifikat japplika fi żmien madwar minuta
- Irranġat:
PATCHfuqexpires_atissa jnaddaf il-cache tar-ridirezzjoni tal-kodiċi. Il-ħin tal-iskadenza l-ġdid b’hekk japplika fi żmien madwar minuta minflok sa 24 siegħa wara. Preċedentement, skadenza mneħħija jew posposta kienet tkompli tirritorna410sa 24 siegħa wara, u skadenza ssettjata għal issa kienet tħalli r-ridirezzjoni tkompli taħdem sa 24 siegħa. - Irranġat: Kodiċi maħluq b’
expires_atjiskadi fil-ħin ukoll jekk l-iskadenza tkun fi żmien l-ewwel 24 siegħa. - Irranġat: Jekk kodiċi jitħassar waqt li l-logo tiegħu jkun qed jittella’ jew jitneħħa,
POSTuDELETE /v1/codes/:id/logoiwieġbu b’404u ma jimmodifikawx il-kodiċi mħassar, bħalma diġà jagħmelPATCH. - Irranġat: Anke kodiċi statiku li l-link qasir tiegħu (
redirect_url) ġie msejjaħ, jinsab fil-cache tar-ridirezzjoni. Il-modifika, il-pawża u t-tħassir issa jnaddfuh ukoll, mhux biss fil-każ ta’ kodiċijiet dinamiċi.
2026-09 · Issejvjar ta’ kuluri mal-kodiċi
- Ġdid:
PATCH /v1/codes/:idjaċċettaappearanceb’foreground_colorubackground_color(#RRGGBB, l-isfond ukolltransparent).qr.svguqr.pngipinġu l-kuluri ffrankati mingħajr ebda parametru; parametru bħal?fg=000000xorta jieħu l-preċedenza. Il-PDF u l-EPS ipinġu l-kuluri biss f’verżjoni aktar tard. - Verifika tal-kuntrast: Par taħt 1,5:1 jagħti
422. Pari b’kuntrast aktar dgħajjef jiġu ssejvjati u rrappurtati f’meta.issuesbħalawarningjewcritical; sfond trasparenti huwa dejjemcritical, qatt mhu mblukkat. - Merġjar: Kampi li jitħallew barra jżommu l-valur ssejvjat tagħhom,
nulliwettaq reset. Bidliet simultanji fuq l-istess kodiċi ma jibqgħux jissostitwixxu lil xulxin. - F’kull rispons tal-kodiċi:
appearancejinsab f’kull rispons tal-kodiċi u fil-webhooksqr.createduqr.updated.POST, il-batch u l-importazzjoni jirrifjutawh b’422. - L-ebda bidla għal kodiċijiet eżistenti: Mingħajr kuluri ssejvjati, kull kodiċi jipprovdi l-istess bytes bħal qabel. Dettalji: Issejvjar ta’ kuluri mal-kodiċi.
2026-09 · Kuluri u korrezzjoni tal-iżbalji bħala parametri tar-rotot tal-immaġni
- Ġdid: L-erba’ rotot tal-immaġni kollha jaċċettaw
fg(kulur ta’ quddiem),bg(kulur tal-isfond jewtransparent) uecc(korrezzjoni tal-iżbaljiL,M,Q,H). SVG u PNG jpinġu l-kuluri; PDF u EPS jaċċettawhom, iżda jpinġuhom biss f’rilaxx futur.eccjaħdem fl-erba’ formati kollha, u logo jibqa’ jimponiH. - Trasparenti:
bg=transparentjipprovdi SVG mingħajr isfond u PNG b’kanal alfa reali. Il-wiċċ ta’ taħt irid ikun ċar u jħalli ż-żona kwieta vojta. - Qatt żball: Valuri invalidi jiġu injorati; l-immaġni mbagħad tiġi ġġenerata eżattament bħal mingħajr parametri.
- Caching: Kull parametru effettiv jipprovdi
Cache-Control: public, max-age=300minflok l-24 siegħa tal-immaġni standard. - L-ebda bidla fl-imġiba mingħajr parametri: Kull kodiċi eżistenti jipprovdi l-istess bytes bħal qabel fl-erba’ formati kollha.
- Disponibbli f’kull pjan. Dettalji: Kuluri u korrezzjoni tal-iżbalji.
2026-09 · Il-PDF u l-EPS issa jinkorporaw ukoll il-logo
- Estensjoni:
qr.pdfuqr.epsissa jinkorporaw logo stabbilit bl-istess mod bħalqr.svguqr.png(ara hawn taħt) — bħala immaġni inkorporata (PDF permezz ta’Image XObject, EPS permezz ta’ dizzjunarju tal-immaġni f’PostScript, hemmhekk biss b’%%LanguageLevel: 3), iċċentrat fuq l-istess żona, bl-istess żieda tal-korrezzjoni tal-iżbalji għalH. S’issa, iż-żewġ formati ma kinux jipprovdu l-logo; dan issa ġie solvut. - Caching: B’logo stabbilit, issa
qr.pdfuqr.epsjipprovdu wkollCache-Control: public, max-age=300minflok l-24 siegħa tas-soltu — eżattament bħal SVG/PNG. - Fallback: Jekk l-immaġni tal-logo nnifisha ma tistax tiġi pproċessata (bħal oġġett maħżun li jkun korrott), il-korrezzjoni tal-iżbalji tibqa’
H, iżda ż-żona rreżervata tibqa’ vojta minflok immaġni — qatt żball tas-server. - L-ebda bidla fl-imġiba mingħajr logo: Kodiċijiet mingħajr logo jibqgħu jipprovdu
qr.pdf/qr.epsb’mod identiku fil-livell ta’ bytes, b’cache mhux mibdul ta’ 24 siegħa. - Dettalji u struzzjonijiet tal-istampar: Logo fil-Kodiċi QR.
2026-09 · Logo fil-kodiċi QR — Dashboard u API
- Ġdid: Kodiċi issa jista’ jkollu logo fin-nofs. Fid-Dashboard, il-paġna tad-dettalji ta’ kodiċi toħloq kard tal-logo ddedikata: Agħżel logo, fl-ewwel żieda jew meta tneħħih ikkonferma twissija b’kaxxa tal-għażla obbligatorja (it-tnejn li huma jibdlu l-mudell tal-punti), imbagħad Tella’ l-logo/Neħħi l-logo. Sostituzzjoni m’għandhiex bżonn konferma — l-immaġni biss tinbidel, mhux il-mudell. Ir-rwol
viewerjara l-istatus u l-preview, iżda l-ebda waħda mit-tliet azzjonijiet. - API:
POST /v1/codes/{id}/logo(kamp multipartfile; PNG, JPEG jew WebP, massimu ta’ 1 MB, SVG jiġi rrifjutat) joħloq logo jew jissostitwih;DELETE /v1/codes/{id}/logoineħħih mill-ġdid u huwa idempotenti. Immaġni kbira wisq tirritorna413, format mhux appoġġjat jirritorna422, u r-rwolviewerjirritorna403. - Dehra:
qr.svguqr.pngjinkorporaw il-logo bħala pixels attwali (512 × 512, normalizzati) u għal dan jgħollu l-korrezzjoni tal-iżbalji għalH. Iż-żieda u t-tneħħija b’hekk jibdlu l-mudell tal-punti (M↔H), filwaqt li s-sostituzzjoni le.qr.pdfuqr.epsma jinkorporaw l-ebda logo u jibqgħu mhux mibdula. Kodiċi li diġà ġie stampat jibqa’ jaħdem fi kwalunkwe kasus, peress li d-destinazzjoni kkodifikata ma tiddependix fuq il-logo — dawk biss li jixtiequ jaraw id-dehra (il-ġdida) tal-logo fuq il-materjal għandhom bżonn jistampaw mill-ġdid, u m’għandhomx iħalltu fajls tal-istampar qodma u ġodda. - Caching: B’logo ssettjat,
qr.svguqr.pngjipprovduCache-Control: public, max-age=300minflok l-24 siegħa tas-soltu. Dettalji, limiti u struzzjonijiet tal-istampar: Logo fil-kodiċi QR.
2026-08 · operationId għall-75 operazzjoni kollha, u gwida dwar meta għall-aġenti
- Żieda: Il-75 operazzjoni kollha tal-ispeċifikazzjoni tal-OpenAPI issa għandhom
operationId—listCodes,createCode,getCodeStats,archiveWorkspaceu l-bqija. S’issa, dan il-qasam kien nieqes b’mod konsistenti, u b’hekk kull ġeneratur kellu jidderiva l-isem tal-metodu mill-metodu HTTP u l-passaġġ (postV1Codes). Ismijiet bħal dawn jiddependu fuq il-passaġġ u jinbidlu ma’ kull bidla fil-passaġġ. Il-format tal-isem huwa l-istess fil-75 post kollha:list/get/create/update/replace/delete, inkella l-verb tal-azzjoni tan-negozju (validateDpp,registerGs1Identifier,pingWebhook). Il-verb isegwi l-loġika tan-negozju, mhux il-metodu HTTP —archiveWorkspacehuwaDELETE,importDppshuwaPOST. - Impatt fuq klijenti ġġenerati minnek innifsek: Dawk li jiġġeneraw l-SDK tagħhom mill-ispeċifikazzjoni se jiksbu metodi msemmija mill-ġdid (
postV1Codes→createCode) fil-ġirja li jmiss. Dan huwa l-għan tal-bidla, iżda huwa tibdil fl-isem f’kodiċi estern — għalhekk huwa msemmi b’mod espliċitu hawnhekk. Il-passaġġi, il-parametri, il-formati tar-rispons u l-kodiċijiet tal-istatus mhumiex mibdula; l-SDKs uffiċjali, is-CLI u s-server tal-MCP mhumiex affettwati. - Bidu għall-aġenti:
https://qr3.app/llms.txtgħandu sezzjoni## When to use qr3.app— sitt kompiti minflok sitt funzjonijiet, flimkien mas-sentenza dwar għal xiex qr3.app mhuwiex l-għodda t-tajba. L-istess informazzjoni issa hija pprovduta mis-server tal-MCP waqt il-handshake:initializekontrahttps://mcp.qr3.app/mcpiwieġeb b’qasaminstructions(qabel: ħdax-il għodda mingħajr ebda klassifikazzjoni). Huwa inkluż ukoll liema sejħiet għandhom bżonn muftieħ tal-API —initializeutools/listle, iżda kulltools/calliva. - Korrezzjonijiet f’
llms.txt: Erba’ dettalji ġew ivverifikati mal-produzzjoni u ma rriżultawx korretti: (1) l-SDK tal-Pythonqr3appmhuwiex ippubblikat fuq PyPI — il-linjapip installtneħħiet mingħajr sostituzzjoni; (2)Accept: text/markdownjapplika għall-paġna ewlenija u l-blog, mhux għal kull paġna ġġenerata min-naħa tas-server; (3) l-indirizz tal-kuntatt huwa[email protected], anke fil-JSON-LD tal-paġna ewlenija; (4)/de/security/huwa rindirizzar għal ankra, mhux paġna separata. Link ġdid:docs.qr3.app/de/skills/. - Assigurazzjoni: Tliet asserzjonijiet f’
openapi-spec.test.ts— kompletezza, uniċità,lowerCamelCase—, kull waħda vverifikata b’mutazzjoni. Disa’ testijiet oħra jinfurzaw l-erba’ dettalji kkoreġuti biex jiżguraw li ma jerġgħux iseħħu. - Limitazzjoni magħrufa: Tnejn mill-75 operazzjoni huma deskritti fl-ispeċifikazzjoni, iżda jwieġbu b’
404(GET /v1/codes/{id}/statsuGET /v1/account). Huma ngħataw isem hawnhekk u jerġgħu jilfuh hekk kif jiġi deċiż jekk humiex se jinbnew jew jitħassru.
2026-08 · Id-downgrades tal-pjanijiet u l-kanċellazzjonijiet issa jaffettwaw ukoll il-limiti
- Fix: Il-webhook ta’ Stripe, f’każ ta’ bidla fil-pjan u kanċellazzjoni, kien qed jikteb biss l-isem tal-pjan u mhux l-erba’ kolonni tal-limiti tal-organizzazzjoni (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Peress li l-infurzar jieħu l-massimu bejn il-valur issejvjat u l-baseline tal-pjan, organizzazzjoni li l-pjan tagħha ġie degradat jew ikkanċellat kienet qed iżżomm il-limiti l-antiki u ogħla tagħha — u b’hekk id-downgrade ma kellu l-ebda effett. Il-webhook issa jissettja dawn il-kolonni għall-baseline tal-pjan il-ġdid ma’ kull bidla reali fil-pjan, u għall-baseline Free f’każ ta’ kanċellazzjoni — eżattament kif diġà tagħmel l-amministrazzjoni tal-admin. - Imġiba: L-aġġornamenti ta’ rutina tas-subscription (tiġdid, metodu ta’ ħlas, proration) xorta waħda ma jaffettwawx il-limiti; limiti ogħla mogħtija individwalment jibqgħu mhux mibdula. Hija biss bidla reali fil-pjan li tirrisettjahom għall-baseline tal-pjan il-ġdid.
- Impatt: L-ebda bidla fl-API jew fil-format tar-rispons. L-organizzazzjonijiet li d-downgrade tagħhom seħħ qabel dan il-fix se jżommu l-valuri l-antiki sakemm tidħol fis-seħħ il-bidla fil-pjan li jmiss u sakemm is-support jaġġustahom.
2026-08 · Keyset cursor issa fuq l-endpoints kollha tal-listi
- Fix: Il-fix tal-cursor għal
GET /v1/codesuGET /v1/dpp(ara hawn taħt) issa ġie estiż għal-listi l-oħra kollha b’paginazzjoni tal-cursor:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersu/v1/webhooks/:id/deliveries. Kollha kienu qed jagħmlu paginazzjoni abbażi ta’created_atbiss; ringieli b’timestamp identiku (daħliet tal-audit log ta’ operazzjoni f’lott, tentattivi mill-ġdid ta’ webhooks, importazzjonijiet ta’ membri) setgħu jintilfu fuq il-paġna li jmiss. Iċ-ċavetta tal-issortjar issa hija t-tuple(created_at, id)kullimkien. - Bidla fl-API: Fuq dawn il-listi,
meta.pagination.next_cursorminn issa ‘l quddiem huwa wkoll valur opak (base64url) minflok timestamp sempliċi; cursors li ma jistgħux jinqraw jirritornaw400, filwaqt li cursors qodma tat-timestamp se jibqgħu jiġu aċċettati b’mod temporanju. EċċezzjoniGET /v1/webhooks/:id/deliveries: hemmhekknext_cursorjibqa’ l-ID tal-aħħar kunsinna (ID mhux magħrufa → l-ewwel paġna). Klijenti li jirritornawnext_cursormingħajr tibdil — Dashboard, CLI, SDKs, MCP — m’għandhomx bżonn ibiddlu xejn. - Impatt: L-ebda migrazzjoni meħtieġa. Jekk f’waħda minn dawn il-listi (eż. l-audit log jew il-log tal-kunsinni fid-Dashboard) innutajt li kienu nieqsa xi daħliet waqt li kont qed tqalleb il-paġni: dawn qatt ma ntilfu — il-listi issa qed juruhom b’mod sħiħ. — il-listi issa qed juruhom b’mod sħiħ.
2026-08 · Timestamps wara l-editjar u t-tħassir jerġgħu jkunu konformi mal-OpenAPI
- Fix: Wara
PATCH /v1/codes/{id},updated_atkien qed jiġi rritornat fil-format ta’ SQLite mingħajr żona tal-ħin (2026-08-17 09:00:00), għalkemm l-ispeċifikazzjoni tal-OpenAPI twiegħedformat: date-timeu l-ħolqien (POST) jipprovdi t-timestamp tal-ISO (2026-08-17T09:00:00.000Z). L-istess kien japplika għaldeleted_at/updated_atwaqt soft-delete kif ukoll għall-mogħdijiet ta’ editjar/tħassir ta’ API-Keys, organizzazzjonijiet, Workspaces, membri, kummenti u webhooks, kif ukoll għallast_used_atta’ API-Keys ulast_triggered_atta’ webhooks. Il-mogħdijiet kollha tal-kitba issa jittimbraw ISO 8601 (UTC,TuZ). - Impatt: Klijenti li janalizzaw
updated_atb’new Date(...)(SDKs, CLI, Dashboard) kienu qed jaqraw il-format bi spazju bħala ħin lokali — is-CLI kienet qed turi l-ħin imċaqlaq bl-offset lokali għal kodiċijiet li ġew editjati darba (Vjenna: −2 h). Dan ġie rranġat. Barra minn hekk, migrazzjoni tad-dejta tinnormalizza valuri diġà ffrankati fil-format il-qadim għal ISO, sabiex l-issortjar u l-paraguni f’rekords imħallta jkunu korretti. L-ebda bidla fl-ismijiet tal-oqsma jew fl-istruttura tar-rispons. - Sfond: L-istess klassi ta’ żball bħaż-żewġ soluzzjonijiet hawn taħt (skadenza tal-API-Key, re-scan-cutoff): id-
datetime('now')ta’ SQLite jiktebYYYY-MM-DD HH:MM:SS, filwaqt li l-kittieba l-oħra kollha jiktbu ISO 8601. Test ta’ protezzjoni tal-kodiċi sors (guard test) se jipprevjeni okkorrenzi ġodda fil-futur.
2026-08 · Il-paginazzjoni tal-listi ma għadhiex titlef kodiċijiet tal-lott
- Fix:
GET /v1/codesuGET /v1/dppkienu qed jagħmlu paginazzjoni biss permezz ta’created_at. Madankollu, il-kodiċijiet minnPOST /v1/codes/batch,POST /v1/dpp/batchu l-importazzjoni ta’ CSV/XLSX jaqsmu timestamp wieħed — malli l-lott ikun akbar minnlimit(default 20), it-tieni paġna ma kinitx għadha tipprovdi l-bqija tal-linji tal-istess timestamp. Il-kodiċijiet kienu jeżistu u kienu aċċessibbli permezz ta’GET /v1/codes/:id, iżda qatt ma kienu jidhru fil-lista (Dashboard, CLIqr3 list, SDKs, MCP). Il-cursor issa huwa keyset fuq(created_at, id). - Bidla fl-API:
meta.pagination.next_cursorminn issa ‘l quddiem huwa valur opak (base64url) minflok timestamp sempliċi. Dawk li jirritornaw il-cursor mhux mibdul bħala?cursor=— kif jagħmlu d-Dashboard, is-CLI, l-SDKs kollha u s-server tal-MCP — m’għandhomx għalfejn ibiddlu xejn. Cursors qodma tat-timestamp se jkomplu jiġu aċċettati b’mod temporanju; cursors li ma jistgħux jinqraw issa se jirritornaw400minflok ma jagħtu l-ewwel paġna b’mod sieket. - Impatt: Għal dawk li wara importazzjoni ta’ lott raw inqas kodiċijiet fil-lista milli fil-fatt inħolqu: Il-kodiċijiet qatt ma ntilfu — il-lista issa qed turihom kollha. L-ebda migrazzjoni mhi meħtieġa.
2026-08 · Ir-re-scans tas-sigurtà qed jerġgħu jsiru kull 24 siegħa
- Fix: Ir-re-scanning perjodiku ta’ URLs tad-destinazzjoni u links tal-landing page (Google Web Risk) kien qed jaqbeż kodiċijiet li l-aħħar scan tagħhom kien fl-istess jum kalendarju bħall-cutoff ta’ 24 siegħa — skont il-ħin, ir-re-scan kien jiġi ttardjat sa jum ieħor. Il-cutoff issa qed jiġi kkalkulat fl-istess format ISO li fih huma ffrankati t-timestamps tal-iscan.
- Impatt: URL tad-destinazzjoni li tiġi kklassifikata bħala mhux sigura wara l-aħħar scan terġa’ twassal għall-pawża awtomatika tal-kodiċi fi ħdan it-tieqa dokumentata ta’ 24 siegħa. L-ebda bidla fl-API jew fil-format tar-rispons.
2026-08 · L-API-Keys jiskadu fil-ħin tal-iskadenza
- Fix: API-Key li l-
expires_attiegħu kien fl-istess jum kien jibqa’ jiġi aċċettat sa nofsillejl UTC. L-iskadenza issa tiġi mqabbla bħala timestamp minflok bħala string — API-Key skadut jagħti immedjatament401. - Sfond:
expires_atjiġi ffrankat bħala ISO timestamp (2026-08-14T09:00:00Z), filwaqt li n-naħa tal-paragun kienet tipprovdi l-format bi spazju (2026-08-14 09:00:00). Il-paragun dirett tal-istring għalhekk kien ikun korrett biss jekk id-data nnifisha kienet diġà differenti. - Impatt: M’hemm bżonn tal-ebda migrazzjoni, il-format tar-rispons ta’
GET /v1/api-keysjibqa’ ma jinbidelx. Valuri tal-iskadenza li ma jistgħux jinqraw issa jitqiesu bħala skaduti minflok validi.
2026-08 · Referenza tal-API: Ġestjoni tat-Tenant dokumentata
- OpenAPI: L-ispeċifikazzjoni — u għalhekk ir-referenza interattiva — issa tiddokumenta Organizzazzjonijiet (inkluż
GET /v1/organizations/usage), Workspaces, Membri u Rwoli u Audit-Logs. - Billing: Il-ħarsa ġenerali tal-pjanijiet (
GET /v1/billing/plans) hija pubblika; Checkout (POST /v1/billing/checkout) u l-portal tal-klijenti ta’ Stripe (GET /v1/billing/portal) huma indikati bħala endpoints għall-amministraturi tal-organizzazzjoni. - Esportazzjoni tal-iskans: L-istatistika tal-iskans (
GET /v1/codes/{id}/scans) u l-esportazzjoni tad-dejta mhux ipproċessata (…/scans.csv,…/scans.xlsx) huma ddokumentati bis-sħiħ — inkluża n-nota tal-GDPR: L-ip_hashqatt ma huwa inkluż fl-esportazzjoni. - Imġiba tal-iżbalji: Id-dokumentazzjoni l-ġdida tinkludi wkoll ir-rispons
400tal-validazzjoni tat-talba: Il-body huwa l-iżball Zod mhux ipproċessat, mhux dokument ta’ problema RFC-7807 — madankollu, xorta jiġi kkonsenjat taħt il-Content-Typeapplication/problem+json.
2026-08 · Ikkopja l-links pubbliċi tal-fajls
- Dashboard: Il-fajls pubbliċi fuq il-paġna tad-dettalji tal-kodiċi issa għandhom buttuna li tikkopja l-link pubbliku tagħhom fil-clipboard – jista’ jintuża direttament bħala l-URL tad-destinazzjoni ta’ QR-Code meta skennjar għandu jiftaħ dokument speċifiku mill-ewwel minflok il-landing page bil-lista tal-fajls.
- API: L-endpoints tal-fajls (
/v1/files) jipprovdu wkollpublic_url. Il-qasam huwa stabbilit biss għal fajls b’visibility: public– il-fajls privati ma jiksbu l-ebda indirizz pubbliku. - Imġiba: Il-link ma jeħtieġx login u jiftaħ il-fajl direttament fil-browser. Is-sostituzzjoni tal-fajl permezz ta’ Issostitwixxi ma tbiddilx il-link, u għalhekk kodiċi stampat bih jibqa’ validu. Dettalji: Fajls u Skedi tad-Dejta.
2026-07 · Rwoli tat-Tim: Kontributur mingħajr tħassir u fatturazzjoni tal-Amministratur
- Ġdid: Ir-rwol ta’ membru Kontributur (mingħajr tħassir) — joħloq u jeditja QR-Codes, fajls u Digital Product Passports, iżda ma jista’ jħassar xejn u lanqas joħloq API-Keys. L-endpoints distruttivi kollha jivverifikaw ir-rwol fuq is-server (
403). - Fatturazzjoni: It-titjib fil-pjanijiet u l-portal tal-klijenti ta’ Stripe (
POST /v1/billing/checkout,GET /v1/billing/portal) issa huma riżervati għall-Amministraturi tal-organizzazzjoni — ir-rwoli l-oħra kollha jaraw ħarsa ġenerali tal-pjan f’modalità li tista’ tinqara biss. - Dashboard: L-azzjonijiet li mhumiex permessi mir-rwol tal-utent stess jiġu moħbija: Osservatur, pereżempju, ma jarax buttuni biex joħloq, jeditja jew iħassar; il-listi, id-downloads u l-istatistika jibqgħu viżibbli. Dettalji: Tim u Rwoli.
2026-06 · Links esterni fuq il-landing page tal-kodiċi
- Landing page: Il-landing page ta’ kodiċi ospitata minn qr3 issa tista’ telenka links esterni self-hosted (
{ label, url }) flimkien mal-fajls imtellgħa jew minflokhom – pereżempju għal data sheets fuq is-sit tiegħek stess. - API:
POST/PATCH /v1/codesjaċċettaw arraylinks(0–20 entrata,http(s), ≤ 2048 karattru). Kull URL jiġi vverifikat b’Google Web Risk; URL mhux sikur jirritorna422. Array vojt iħassar il-links kollha. - Dashboard: Żid, irranġa mill-ġdid u neħħi links fuq il-paġna tad-dettalji tal-kodiċi.
- Sigurtà: Il-links renderjati jibqgħu siguri mill-XSS (escaped,
http(s)biss) u l-paġna żżomm l-headernoindextagħha.
2026-04 · Analitika tad-Dashboard għal kull QR-Code
- Dashboard: Il-buttuna tal-Analitika fil-lista tal-QR-Codes issa tiftaħ il-paġna tal-istatistika tal-QR-Code rispettiv taħt
/dashboard/codes/{id}. - Routing: L-alias
/dashboard/codesikompli jidderieġi mill-ġdid lejn/dashboard, iżda ma jibqax jinterċetta rotot dettaljati bħal/dashboard/codes/{id}. - API: Il-paġna tad-dettalji tgħabbi l-QR-Code direttament permezz ta’
GET /v1/codes/:id; b’hekk m’għadhiex dipendenti fuq il-limiti tal-paginazzjoni tal-lista. - Tests: It-testijiet ta’ rigressjoni jkopru r-redirect tal-alias u t-tagħbija diretta tal-kodiċi.
2026-04 · Djalogu ta’ Tħassir tad-Dashboard għal QR-Codes
- Dashboard: L-ikona tal-kontenitur tal-iskart fil-lista tal-QR-Codes issa tiftaħ djalogu React apposta minflok popup nattiv tal-browser.
- Feedback: Wara t-tħassir, tidher notifika toast ta’ suċċess jew żball.
- Tests:
packages/dashboard/tests/dashboard.test.tsjipprevjeni rigressjonijiet fuqconfirm()fil-fluss tat-tħassir tal-QR-Code.
2026-04 · Test ta’ Link Qasir tad-Dashboard għal QR-Codes Dinamiċi
- Dashboard: Ix-shortcodes fil-lista tal-QR-Codes issa jistgħu jiġu kklikkjati direttament bħala links esterni ta’ redirect. L-ikona tal-link estern ħdejn eż.
wu3qaatiftaħhttps://qr3.app/{shortCode}f’tab ġdida. - i18n: Miżjuda testi tat-tooltip għall-Ġermaniż u l-Ingliż.
- Tests:
packages/dashboard/tests/dashboard.test.tsjipproteġi l-href tal-link, l-imġiba tat-tab il-ġdida,noopener noreferreru l-ikona kontra rigressjonijiet.
2026-04 · Rotta tar-Redirect-Worker għal QR-Codes Dinamiċi
- Fix: QR-Codes dinamiċi taħt
https://qr3.app/{shortCode}qed jerġgħu jiġu pproċessati mir-Redirect-Worker. Ir-rotta tal-produzzjoni issa tużaqr3.app/*, peress li r-rotot tal-Cloudflare Workers ma jappoġġjawx parametri tal-passaġġ:code. - Tisħiħ: Mogħdijiet li ma jaqblux jiġu mgħoddija lill-landing origin, sabiex paġni normali bħal
/de/pricingma jiġux imblukkati mir-Redirect-Worker. - Tests:
packages/redirect/tests/unit/redirect.test.tsjivverifika r-rotta wildcard, l-ipproċessar tax-shortcode u l-pass-through tal-origin.
2026-04 · Ħarsa Ġenerali tal-Iskanjar tad-DPP tal-Workspace (Q3.4.2)
- Ġdid:
GET /v1/workspace/stats/dpp?days=30— jaggrega d-dpp_scanskollha tal-workspace tal-API-Key (active_dpps,scans_by_day,top_dppsb’isem il-prodott/kategorija). - Dashboard: Karta fuq il-paġna ewlenija (
/dashboard) b’bar chart ta’ 30 jum + listi tal-aqwa — b’mod parallel mal-karti tal-QR-Code. - Pubbliku: Shortlink tal-marketing
GET /dpp/dpp_<id>(segment wieħed) għal live demos, b’mod parallel ma’/dpp/{gtin}/{serial}.
2026-04 · Analitika tal-Iskanjar tad-DPP (Q3.4.1)
- Ġdid:
GET /v1/dpp/:id/stats?days=30— skans aggregati tar-resolver pubbliku tal-GS1 għal kull DPP. Oqsma:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Ġdid: Tabella
dpp_scans(migrazzjoni0011) — separata minnscans(Redirect-Worker). L-indirizzi IP jiġu mħaddma b’hash b’salt li jdur kuljum, b’hekk IPs mhux ipproċessati qatt ma jilħqu D1. - Dashboard: Karta b’mini-chart (SVG, l-ebda librerija ta’ charts) fuq
/dashboard/dpp/:dppIdb’bars ta’ 30 jum + analiżi dettaljata tal-aqwa 3. Stat vojt (empty state) malli DPP ikun live iżda jkun għadu ma kellux skans.
2026-04 · Simulatur tal-Konformità tal-UE Live (Q3.3.7)
- Ġdid:
POST /v1/dpp/:id/validate-update— jissimula aġġornamenti parzjali stateless (status, lista tas-suq, …) mingħajr persistenza. Ir-rispons fiheu_compliance+preview.changed_fields. - Dashboard: Karta tas-simulatur fid-dettall tad-DPP (
/dashboard/dpp/:dppId) — chips għalDE/AT/FR/IT/ES/NL+ Custom, dropdown tal-istatus, Preview EU impact / Save changes / Reset. Mhux imblukkanti (non-blocking) permezz ta’ RemixuseFetcher. - Tisħiħ: Helpers tas-simulatur esternalizzati (
readUpdatePatchFromForm,marketCountriesKey) + 18-il unit test ġdid; Bugfix: Input Lone-Non-ISO ma jibqax iħassar il-lista tas-suq.
2026-04 · Preview tal-Konformità tal-UE Live fil-Formola tal-Ħolqien (Q3.3.6)
- Mibdul:
POST /v1/dpp/validatejipprovdi wkolleu_compliance— l-istess validatur bħalGET /v1/dpp/:id/eu-compliance, stateless qabel ma jiġi ffrankat. - Dashboard: Preview taħt il-pannell tal-validazzjoni eżistenti + banner ġdid ta’ protezzjoni tal-iffrankar (Save-Guard-Banner) qabel il-buttuni tal-inviju, jekk ikun hemm żbalji/twissijiet miftuħa (pluralizzazzjoni i18n DE/EN).
2026-04 · Validatur tal-UE + UI tat-Tessuti (Q3.3.4 + Q3.3.5)
- Ġdid: Validatur tal-Konformità tal-UE b’5 regoli tat-tessuti (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Ġdid:
GET /v1/dpp/:id/eu-complianceb’compliant/espr_ready/issues[]/summary. - Dashboard: Sezzjoni tal-Konformità tal-UE fid-dettall tad-DPP (Summary-Tiles, karti tal-kwistjonijiet raggruppati, ESPR-Ready-Badge fl-header).
2026-04 · Skema tad-DPP tat-Tessuti (Q3.3.1–Q3.3.3)
- Ġdid: Kategorija
textileb’katina ta’ obbligu AGEC (Insiġ/Knitting → Żebgħa/Stampar → Konfezzjoni), għal kull fibraorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, ħajja utli, Recyclability). - Ġdid: Qasam bażiku
market_countries: string[](ISO 3166-1 alpha-2) fuq il-kategoriji kollha tad-DPP — jikkontrolla r-regoli AGEC speċifiċi għal Franza u n-nota obbligatorja tal-konsumatur Franċiża. - Ġdid: Mudell HTML tal-konsumatur b’kaxxa ta’ twissija tal-mikroplastiċi AGEC, katina ta’ oriġini bi 3 stadji (pills tal-bnadar), lista SVHC, sezzjoni ta’ Durability u Recyclability.
- Migrazzjoni:
0010_dpp_market_countries(D1).
2026-04 · Importazzjoni bl-Ingrossa (Bulk) tad-DPP (Q3.2.1–Q3.2.5)
- Ġdid:
POST /v1/dpp/importjaċċetta CSV u XLSX (kompatibbli mal-Workers permezz ta’ SheetJSxlsx, ~283 KB gzip Bundle). - Skalat: limitu bbażat fuq il-pjan (Free 100 → Enterprise 10k) + chunked
db.batch()ta’ 100 + limitu tal-body ta’ 5 MB. - Ġdid: Rapport tal-iżbalji bħala CSV fil-qasam
errors_csvtar-rispons 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxjipprovdi mudelli lesti għall-batteriji u t-tessuti. - Dashboard: Upload b’Drag-and-Drop taħt
/dashboard/dpp/importbi proxy tal-mudelli u tniżżil inline ta’ CSV.
Mhux Breaking — Estensjonijiet LTS
Il-bidliet kollha msemmija hawn fuq huma addittivi:
- Klijenti eżistenti ta’
POST /v1/dpp/validatejinjoraw il-qasam il-ġdideu_compliancemingħajr ebda bidla. - Flussi eżistenti ta’
batterymhumiex mibdula. market_countrieshuwa fakultattiv u b’mod awtomatiku huwa[].
Ara l-Verżjonar tal-API għall-politika dwar bidliet li jinterrompu s-servizz (breaking changes).