Release Notes
Current version: v1.2.8
v1.2.8Latest
2026-06-02Slack notifications to #tech_alert when a Liftoff→Helm order sync fails or is skipped — includes store, order number, environment, Helm target, and reason. @-mention a configured on-call user on real failures (skipped alerts stay silent to avoid noise). New Slack Tech Alerts card on the /settings page — toggle, webhook URL, and mention member ID, editable without a redeploy
- addedSlack tech-alert integration: failed syncs post red "HELM: Order Sync Failed"; routing-skipped syncs post amber "HELM: Order Sync Skipped" with store, order number, environment, Helm target, and the error/reason
- added@-mention configured Slack user on failed alerts only (member ID via /settings or SLACK_TECH_ALERT_MENTION_USER_ID); top-level text field fires the push/desktop notification
- addedPer (orderId, environment) dedup window of 1 hour — Liftoff webhook retries can no longer spam the channel; dedup state lives in OrderSyncLog so it survives restarts and PM2 clustering
- addedSuperAdmin /settings → Slack Tech Alerts card: master toggle, webhook URL (masked input), mention member ID (validated against U… format)
- addedSettings precedence DB → env var → default, so admins can update Slack config from the UI without a redeploy; empty DB value wins over env so the kill-switch works either way
- addedSLACK_TECH_ALERT_WEBHOOK_URL, SLACK_ALERTS_ENABLED, SLACK_TECH_ALERT_MENTION_USER_ID env vars (used as fallback when the corresponding Settings row is missing)
- addedscripts/test-slack-alert.js — operational helper: dry-run prints the Slack payload, "failed"/"skipped"/"both" posts real samples to verify the pipeline without a real failed order
- changedLiftoffService.processFulfillmentPO now fires a Slack alert immediately after writing a failed or skipped OrderSyncLog row; alert errors are swallowed so Slack outages never break order processing
- changedSlack alerts now show the Liftoff OrderNumber (e.g. KRA-UK26) as the primary order reference — what reps recognize — instead of the internal numeric OrderId; the internal ID is preserved in the small context line for engineers debugging in DB
- addedSecond optional @-mention member ID on Slack failed alerts — both users get pinged on the same message; configured via /settings → Slack Tech Alerts (Mention #2) or SLACK_TECH_ALERT_MENTION_USER_ID_2 env var
v1.2.7
2026-04-20Multi-target Helm routing: one Liftoff store can now fan orders out to multiple Helm instances (Whitestone Global → UK + DE by ship-to country). Case-insensitive duplicate-SKU guardrail prevents silent inventory overwrites. Import Products from Liftoff to Helm with preview, import, and update workflow. Order retry button and variant SKU fix for cross-store order syncs
- addedMulti-target Helm configuration: stores can register N Helm targets with per-target country allowlists (e.g. UK vs EU-27+EEA+CH)
- addedCountry-based order routing: ship-to country decides which Helm instance receives the FPO; non-routed countries logged as skipped
- addedWhitestone Global store (WHITESTONE-MERCH-SHOP) connected to Helm Whitestone Merch UK (333) and Helm Whitestone DE (336)
- addedConfigure page: editable Helm Targets card with Add/Remove target, region label, and country allowlist per target
- addedActivity log gains Helm / Ship-to / Routing columns with color-coded decision badges; skipped orders remain visible for audit
- addedProduct import preview shows a "Target" column per SKU (UK/EU region badges) for multi-target stores
- addedImport Products toggle (off by default per store) with warning message — prevents accidental Helm inventory changes
- addedOrder Status card split into three honest signals: Liftoff API reachability, Webhook Delivery (based on log history), Integration state
- addedImport Products feature: fetch product catalog from Liftoff and create them in Helm via API
- addedTwo-phase preview + import workflow with SKU-level checkboxes
- addedDetect name/weight changes on existing Helm products and update them from Liftoff
- addedProduct cache with 5-min TTL to avoid API rate limits on repeated previews
- addedForce Refresh button to bypass cache and pull fresh data from both APIs
- addedRetry button on failed orders in activity log to re-process with one click
- addedRelease Notes page with version index
- changedInventory sync now iterates every configured Helm target in parallel and merges results before pushing to Liftoff
- changedInventory sync blocks when either Helm or Liftoff contains case-insensitive duplicate SKUs (uk/UK/Uk treated as same) — returns a clear error listing every offending row
- fixedOrder line items now use ProductVariant SKU instead of Product.Code for correct Helm matching
- fixedOrder retry re-enriches SKUs from Liftoff API to fix previously failed orders
- fixedHelm-only detection now checks both variant SKUs and product codes from Liftoff
- fixedLiftoff pagination stopping early on partial pages due to rate limiting
- fixed504 timeout on product preview — increased nginx proxy timeout and bulk-fetch variants
- fixedExisting Helm products showing as "New" after import due to rate-limited API response
v1.2.6
2026-02-17Editable Helm Store Name for cross-store connections
- addedEditable Helm Store Name field for cross-store connections
- fixedDynamic store name display and prevent wrong store routing
- fixedRefresh user role from DB every 60s so role changes take effect without re-login
- changedOrder Custom Field Mapping for admins, notes visible to all
- fixedSuperAdmins can always sign in even when new user registration is disabled