Súhrnný balík opráv — feed VAT/ceny, Grandus photo pipeline, multi-tenant walks, custom statusy a paginácia
· Infraštruktúra
Komplexný balík opráv naprieč produktom, ktorý uzatvára niekoľko tried chybových stavov. (1) Feed VAT a ceny — Levelsportkoncept feed posielal hrubé ceny (s DPH) bez VAT poľa; teraz odpočítame DPH cez vendor fallback rate (51b575e). LSK/Davorin/Profibike price mapping prepísaný na deterministický pattern (bb2e4bd). Vavrys MOC mapujeme ako predajnú cenu (b006e26). CTM feed price processing prepracované (90055e8). Vavrys deactivate variants oprava (355b449). (2) Grandus photo pipeline — sRGB konverzia v recompression pipeline (b38c1a6); cap pixel count v sharp aby sa zatvorili OOM/DoS vektory (1badfb9); MIME pass-through blob alignovaný s príponou súboru (da734db); magic-byte sniff zatvára medzeru „vendor klame v MIME aj v prípone" (1c40666); konverzia vynútená keď sniff nesúhlasí s finálnou príponou (e035ca8); non-jpeg/png/gif/webp konvertované na JPEG pred uploadom (15264fc); deterministické error tagy na download-time (e458676) a redirect-helper (243d49d) chyby; cancel-aware sleep aby retry backoff rešpektoval cancel (a435738); Grandus compression semaphore process-wide (07b4cf6); wake queued compression waiters pri cancel (beaa704). (3) Grandus payload — long description mapovaný na type 0 nie 2 (030fff9); JSON field names opravené + position-based display_order (00d16e7); admin renderuje absolute icon URL + edge-case testy (49b7282); /100x100.png append na suffix-less category icon URL (96bba4c). (4) Grandus stability — pre-flight validátori, utf8mb3 sanitization, safe flush wrapper (20dba91); credential decrypt failure persistuje validation badge namiesto tichého „OK" (c891ceb); ERP transfer auto-resync hardening + force-push (ea173171); audit-log gate pokrýva aj legacy /move endpoint (2146665). (5) Custom statusy + paginácia — custom status filtering hardened (b7c257e), pagination limit clamped na backend @Max(200) cap (89d340f), order statuses presunuté do ecommerce module (d64bd36). (6) Multi-tenant DB — všetky 1-arg recursive category walks (get_effective_template, get_category_descendants, get_category_ancestors, get_category_descendant_ids) cez ktoré bolo možné cross-tenant traverse pri injektnutom korupnom parent_id boli prepísané na povinne tenant-scoped 2-arg varianty (293, 294, 296, 300). Migrácia 295 odstránila legacy 1-arg variant aby sa to nedalo spustiť ani omylom. (7) Multi-template compliance — trigger správne agreguje cez všetky templates produktu (297), legacy single-template UNIQUE odstránený (289), stale trigger statement-level cez transition tables (290), filter porovnáva iba sumár-relevant stĺpce (288). (8) Subvendor matching perf cleanup + atomický upload guard (76736a4). (9) ERP transfer config jeden aktívny log per (config, type) cez partial unique index (280); last_progress_at liveness signál aby legitímne dlhé push-y neboli falošne flagnuté ako stuck (281); backfill grandus_vendor_id na tracking riadkoch z pred iter 40 aby echo-skip query fungovala (283).