{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 781,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
            "branch" : [
              {
                "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
            "branch" : [
              {
                "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
        "branch" : [
          {
            "SHA1" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
            "name" : "refs/remotes/origin/dev"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/younex1/erp-nuxt-frontend.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#781",
  "duration" : 58892,
  "estimatedDuration" : 61562,
  "executor" : None,
  "fullDisplayName" : "build-logship-frontend #781",
  "id" : "781",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 781,
  "queueId" : 5902,
  "result" : "SUCCESS",
  "timestamp" : 1793149200194,
  "url" : "https://jenkins.younex.de/job/build-logship-frontend/781/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/listings/adapters/amazon.ts",
          "server/utils/listings/adapters/ebay.ts",
          "server/utils/listings/adapters/types.ts",
          "server/api/sales/sis/listings/[id]/link-product.put.ts",
          "server/api/sales/sis/listings/import.post.ts",
          "server/utils/listings/listingStore.ts",
          "server/api/sales/sis/status.get.ts",
          "server/api/sales/sis/listings/remote.get.ts",
          "app/components/sales/sis/LinkProductModal.vue",
          "server/plugins/listing-outbox-flush.ts",
          "server/api/sales/sis/listings/import-preview.post.ts",
          "reference/template-cleanup/01-idempiere-truncate.sql",
          "server/utils/listings/adapters/index.ts",
          ".claude/rules/marketplaces/marketplace-listings.md",
          "server/api/sales/sis/listings/index.get.ts",
          "server/api/sales/sis/listings/[id]/delist.post.ts",
          "app/pages/fulfillment/amazon-stocks/index.vue",
          "server/utils/listings/adapters/shopify.ts",
          "server/api/sales/sis/listings/[id].put.ts",
          "server/utils/listings/importer.ts",
          "server/utils/listings/rateLimiter.ts",
          "server/utils/listings/routeHelper.ts",
          "server/api/materials/products/search.get.ts",
          "app/components/sales/sis/ChangeHistoryDrawer.vue",
          "server/api/sales/sis/changes/[id]/cancel.post.ts",
          "reference/test-scripts/listing-outbox-smoke.mts",
          "server/utils/amazonSpApi.ts",
          "server/api/sales/sis/changes.get.ts",
          "server/api/sales/sis/listings/[id]/relist.post.ts",
          "server/api/sales/sis/price-update.post.ts",
          "app/components/sales/sis/ListProductsModal.vue",
          "server/api/sales/sis/listings.get.ts",
          "server/api/sales/sis/listings/create.post.ts",
          "server/api/sales/sis/products-defaults.get.ts",
          "server/utils/listings/outbox.ts",
          "app/pages/sales/sis/index.vue",
          "app/components/sales/sis/ImportWizard.vue",
          "server/api/sales/sis/flush.post.ts",
          "server/utils/sisMatching.ts"
        ],
        "commitId" : "95c2ad2c895302268130313dea4eebf6b66b730a",
        "timestamp" : 1793098595000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: persisted marketplace listings with outbox delivery to Amazon\u000a\u000aReplaces the report-per-page-load Amazon pricing page with listings managed\u000ain iDempiere (CUST_MarketplaceListing + CUST_MarketplaceListingChange).\u000a\u000a- server/utils/listings: listing store (REST, caller/service token), adapter\u000a  contract (Amazon implemented, eBay/Shopify stubs), outbox (claim → coalesce\u000a  → push → settle, stale-claim recovery, feed polling, 5-min spot-check),\u000a  token-bucket rate limiter, importer (report → product match → upsert)\u000a- amazonSpApi: LWA token cache, PUT/DELETE, merge-patch builders for\u000a  purchasable_offer (price, min/max, sale) + fulfillment_availability,\u000a  offer-only PUT, Feeds API (JSON_LISTINGS_FEED), catalog productType,\u000a  competitiveSummary batch\u000a- Nitro plugin: timer flush every 60 s (debounce 20 s, PM2 instance 0 only)\u000a- routes sales/sis: listings (list/edit/delist/relist/link/create/import),\u000a  flush, changes (+cancel), status, products-defaults; old price-update\u000a  removed, report view moved to listings/remote (amazon-stocks page)\u000a- page rewritten on the table + import wizard, list-products modal, change\u000a  history drawer, link-product modal\u000a- template cleanup: both tables in the truncate list; recipe + smoke script\u000a",
        "date" : "2026-10-27 11:56:35 +0100",
        "id" : "95c2ad2c895302268130313dea4eebf6b66b730a",
        "msg" : "SIS: persisted marketplace listings with outbox delivery to Amazon",
        "paths" : [
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/[id]/link-product.put.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/create.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/[id].put.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/flush.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/changes.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/amazonSpApi.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/marketplaces/marketplace-listings.md"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/[id]/relist.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/01-idempiere-truncate.sql"
          },
          {
            "editType" : "add",
            "file" : "server/plugins/listing-outbox-flush.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/routeHelper.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/outbox.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/types.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/changes/[id]/cancel.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/[id]/delist.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/import.post.ts"
          },
          {
            "editType" : "delete",
            "file" : "server/api/sales/sis/price-update.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/sisMatching.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/listingStore.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/importer.ts"
          },
          {
            "editType" : "delete",
            "file" : "server/api/sales/sis/listings.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/materials/products/search.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/index.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/amazon.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/ebay.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/listing-outbox-smoke.mts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/products-defaults.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/status.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/fulfillment/amazon-stocks/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/remote.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/index.get.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/sis/ChangeHistoryDrawer.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/sis/ListProductsModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/shopify.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/import-preview.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/sis/ImportWizard.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/sis/LinkProductModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/rateLimiter.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/listings/productCreator.ts",
          "server/utils/listings/adapters/amazon.ts",
          "server/api/sales/sis/listings/import.post.ts",
          "server/utils/listings/listingStore.ts",
          "server/api/sales/sis/listings/[id].delete.ts",
          "server/utils/amazonSpApi.ts",
          "server/api/sales/sis/listings/[id]/relist.post.ts",
          "server/plugins/listing-outbox-flush.ts",
          ".claude/rules/marketplaces/marketplace-listings.md",
          "server/api/sales/sis/listings/index.get.ts",
          "app/components/sales/sis/ImportWizard.vue",
          "app/pages/sales/sis/index.vue",
          "server/utils/sisMatching.ts",
          "server/utils/listings/importer.ts"
        ],
        "commitId" : "5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a",
        "timestamp" : 1793106229000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix\u000a\u000a- Import wizard: \"Create missing products\" (minimal M_Product, Value = SKU, asin, Amazon price,\u000a  Strapi record) and \"Import images from Amazon\" (ASIN MAIN catalog picture, only when the product\u000a  has no picture); result counters, pages of 40 with side effects\u000a- Per-row links to the Amazon offer page and the Seller Central offer editor (marketplace domain\u000a  from the order source), \"listed on Amazon\" date label\u000a- DELETE listings/[id]: remove the SIS record + change history (409 while sending); row + bulk buttons\u000a- BOM rows: components with stock from pp_product_bom; internal qty = first component's on-hand,\u000a  hover popover with all components\u000a- Relist reopens a \"Closed\" Amazon offer (purchasable_offer replace without end_at + qty) and is\u000a  allowed for inactive listings; VALID preview results are non-blocking\u000a- Outbox: iDempiere Created/Updated are server-local with a literal Z -> serverLocalToIso()\u000a  (IDEMPIERE_TZ); the debounce held every change for one UTC-offset hour before. Timer first run 10 s\u000a- Page layout: wider product column with fixed-width name, tighter numeric columns, toolbar and\u000a  selection-bar buttons styled, lighter link icons\u000a",
        "date" : "2026-10-27 14:03:49 +0100",
        "id" : "5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a",
        "msg" : "SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/import.post.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/marketplaces/marketplace-listings.md"
          },
          {
            "editType" : "edit",
            "file" : "server/plugins/listing-outbox-flush.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/sisMatching.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/amazonSpApi.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/productCreator.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/listingStore.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/sis/ImportWizard.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/sales/sis/listings/[id].delete.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/[id]/relist.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/amazon.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/importer.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/listings/productCreator.ts",
          "server/utils/listings/adapters/types.ts",
          "server/utils/listings/listingStore.ts",
          "server/utils/listings/adapters/index.ts",
          "app/components/sales/sis/ListProductsModal.vue",
          ".claude/rules/marketplaces/marketplace-listings.md",
          "server/api/sales/sis/order-sources.get.ts",
          "server/api/sales/sis/listings/create.post.ts",
          "server/utils/listings/outbox.ts",
          "server/api/sales/sis/listings/index.get.ts",
          "app/components/sales/sis/ImportWizard.vue",
          "app/pages/sales/sis/index.vue",
          "server/utils/listings/adapters/shopify.ts",
          "server/utils/listings/importer.ts"
        ],
        "commitId" : "5e251ffa9442317ebfb0a3d42838497529cb0b06",
        "timestamp" : 1793107731000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons\u000a\u000a- adapters/shopify.ts: GraphQL Admin API 2025-10 for `shopify` (token) and `shopify-new`\u000a  (client credentials) sources; one row per variant (variant / product / inventoryItem GIDs),\u000a  import with available qty at the configured or first location, price via\u000a  productVariantsBulkUpdate, qty via inventorySetQuantities (+ inventoryActivate), delist/relist\u000a  as qty, create via productCreate + variant sku/price + publish; synchronous results settle as\u000a  confirmed (PushResult.confirmed) and carry the assigned ids (PushResult.remote)\u000a- order-sources lists every source with a listings adapter (marketplace key + label); listings\u000a  route returns marketplace + shop link data; create route handles Shopify (no ASIN, SKU key)\u000a- importer: index-aligned preview rows, external ids / meta / image URL per row, image import\u000a  from the marketplace picture for non-Amazon sources (importImageFromUrlIfMissing)\u000a- page: order-source picker with marketplace icons, generic \"Import listings\", labels/columns/\u000a  links per marketplace (Buy Box, FBA, ASIN, min/max = Amazon only), BOM stat tile + filter\u000a- wizard: source picker with icon, BOM tag/filter/count, fixed-width name column, styled buttons;\u000a  list-products modal: Shopify mode without ASIN/min/max, styled buttons\u000a",
        "date" : "2026-10-27 14:28:51 +0100",
        "id" : "5e251ffa9442317ebfb0a3d42838497529cb0b06",
        "msg" : "SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/sales/sis/ImportWizard.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/productCreator.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/index.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/marketplaces/marketplace-listings.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/shopify.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/listingStore.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/sis/ListProductsModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/importer.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/types.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/create.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/order-sources.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/outbox.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/listings/adapters/index.ts",
          ".claude/rules/marketplaces/marketplace-listings.md",
          "app/components/sales/sis/ChangeHistoryDrawer.vue",
          "server/utils/listings/adapters/shopware.ts",
          "server/api/sales/sis/listings/index.get.ts",
          "app/utils/sisDate.ts",
          "app/pages/sales/sis/index.vue",
          "app/components/sales/sis/ImportWizard.vue"
        ],
        "commitId" : "621500391179e3a8a1c9f549d0d647c3b17b3916",
        "timestamp" : 1793109326000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons\u000a\u000a- adapters/shopware.ts: Admin API (integration client credentials against {marketplace_url}/oauth/token),\u000a  one row per sellable product (variants inherit name/price/cover/tax from the parent), price patch replaces\u000a  only the default-currency entry (net from the product tax rate), qty = stock, create via POST /product with\u000a  storefront visibilities; synchronous confirm; registry maps Marketplace `shopware6`\u000a- GET listings accepts orderSourceId=a,b,c or all=1, enriches per org and returns per-source marketplace /\u000a  link data; page: checkbox picker with \"All order sources\", Source column, per-row marketplace for labels,\u000a  links, Buy Box cells, Send now across the selection; wizard keeps its own switchable source\u000a- Import wizard: \"Only with ERP stock\" (+ ERP qty column) and \"Only active\" filters, fixed-width name column\u000a- German date/time formatting (app/utils/sisDate.ts) on the page, wizard and history drawer\u000a- Brand-coloured MDI marketplace icons (Tabler 2.21 has no Shopify glyph) in picker, rows and wizard\u000a- Thumbnail @error fallback to the placeholder (a broken picture no longer stretches the row)\u000a- Styled modal buttons, aligned BOM tag in the wizard\u000a",
        "date" : "2026-10-27 14:55:26 +0100",
        "id" : "621500391179e3a8a1c9f549d0d647c3b17b3916",
        "msg" : "SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/marketplaces/marketplace-listings.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/index.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/adapters/shopware.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/sis/ChangeHistoryDrawer.vue"
          },
          {
            "editType" : "add",
            "file" : "app/utils/sisDate.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/sis/ImportWizard.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/materials/transactions.get.ts",
          "app/pages/bi/shipping-performance.vue",
          "server/utils/berlinTime.ts",
          "app/pages/materials/transactions-by-org.vue",
          "app/components/MainNavigationMenu.vue",
          ".claude/rules/idempiere/timestamps-timezone.md",
          "app/composables/useTransactionReportPdf.ts",
          "app/composables/menu/admin/bi.ts",
          "server/api/materials/transactions-by-org.get.ts",
          "server/utils/transactionEnrichHelper.ts",
          "server/api/bi/shipping-performance.get.ts",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "5748e244b3fff29b0345ca95c39db05423196555",
        "timestamp" : 1793112953000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "BI: Transactions by Org page + Shipping Performance (cut-off SLA) page\u000a\u000a- /materials/transactions-by-org: all M_Transaction rows of one org/warehouse in a date window,\u000a  shared enrichment helper (transactionEnrichHelper) now also used by the product history route,\u000a  inventory/movement document links, warehouse column, Excel/CSV/PDF export\u000a- /bi/shipping-performance: cut-off SLA per merchant (c_bpartner.CutOffTime, default 14:00,\u000a  override), working days minus CUST_NonWorkingDays, Berlin timezone handling (berlinTime.ts),\u000a  KPIs, month/day/hour/weekday/lateness charts, source table, order grid\u000a- sidebar + BI mega menu entries, en/de/es translations\u000a- recipe: iDempiere REST timestamp semantics (Created = Berlin local with fake Z)\u000a",
        "date" : "2026-10-27 15:55:53 +0100",
        "id" : "5748e244b3fff29b0345ca95c39db05423196555",
        "msg" : "BI: Transactions by Org page + Shipping Performance (cut-off SLA) page",
        "paths" : [
          {
            "editType" : "add",
            "file" : ".claude/rules/idempiere/timestamps-timezone.md"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useTransactionReportPdf.ts"
          },
          {
            "editType" : "add",
            "file" : "app/pages/bi/shipping-performance.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/transactions-by-org.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/transactionEnrichHelper.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "add",
            "file" : "app/pages/materials/transactions-by-org.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/bi/shipping-performance.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "server/utils/berlinTime.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/bi.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/materials/transactions.get.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/utils/scanCode.ts",
          "server/api/idempiere-auth/user.get.ts",
          "app/pages/mobile/return.vue",
          "app/pages/integrations/returns-desktop.vue",
          "app/pages/mobile/index.vue"
        ],
        "commitId" : "fc75bdef0da02ce98b346ca350f375b5b536b6fd",
        "timestamp" : 1793119607000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line\u000a\u000a- shipmentScanCandidates/shipmentScanFilter (app/utils/scanCode.ts): a DPD label scan is the\u000a  28-char routing code (% + postcode + 14-digit parcel no + service + country) while M_InOut\u000a  stores only the parcel number; parcels 2..n live in trackingnoarray. Used by the mobile return\u000a  page, the dashboard scan dispatcher and the desktop returns page.\u000a- Return page: external-RMA hit without InOut_ID offers the customer's shipments instead of\u000a  'not found' (standalone RMAs from the Amazon import); selection list shows positions\u000a  (qty, name, SKU); detail shows all product identifiers, 2-line names, back-to-selection\u000a  button; e-mail notification on by default.\u000a- /api/idempiere-auth/user was missing (profile modal showed no user data); cookie-based route\u000a  added; 'Angemeldet als …' shown next to the app-update check.\u000a",
        "date" : "2026-10-27 17:46:47 +0100",
        "id" : "fc75bdef0da02ce98b346ca350f375b5b536b6fd",
        "msg" : "Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/returns-desktop.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/utils/scanCode.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/return.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/idempiere-auth/user.get.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/sales/sis/index.vue",
          ".claude/rules/nuxt/ui-components.md",
          "app/components/MarketplaceIcon.vue"
        ],
        "commitId" : "cc223c5bf47e0e748adee95b2141f4969b1dfb76",
        "timestamp" : 1793119607000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)\u000a",
        "date" : "2026-10-27 17:46:47 +0100",
        "id" : "cc223c5bf47e0e748adee95b2141f4969b1dfb76",
        "msg" : "SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/components/MarketplaceIcon.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/ui-components.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png",
          "reference/SVG/Artboard 7.svg",
          "reference/SVG/Artboard 8.svg",
          "public/assets/brand/logship-mark-white.svg",
          "android/app/src/main/res/drawable-port-hdpi/splash.png",
          "android/app/src/main/res/drawable/splash.png",
          "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png",
          "reference/SVG/Artboard 6.svg",
          "reference/SVG/Artboard 10.svg",
          "android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png",
          "reference/SVG/Artboard 9.svg",
          "android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png",
          "public/assets/brand/logship-logo-black.svg",
          "reference/SVG/Artboard 5.svg",
          "public/assets/brand/logship-logo.svg",
          ".claude/rules/mobile/capacitor-app-build.md",
          "android/app/src/main/res/drawable-land-hdpi/splash.png",
          "public/assets/brand/logship-mark.svg",
          "public/icon-maskable-512x512.png",
          "public/assets/brand/logship-mark-black.svg",
          "reference/SVG/Artboard 4.svg",
          "android/app/src/main/res/drawable-land-xxhdpi/splash.png",
          "android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png",
          "public/icon-152x152.png",
          "android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png",
          "android/app/src/main/res/drawable-land-xhdpi/splash.png",
          "public/icon.png",
          "reference/SVG/Artboard 3.svg",
          "android/app/src/main/res/drawable-land-xxxhdpi/splash.png",
          "android/app/src/main/res/drawable-port-mdpi/splash.png",
          "public/favicon-32x32.png",
          "android/app/src/main/res/values/ic_launcher_background.xml",
          "public/icon-384x384.png",
          "public/assets/brand/logship-logo-mark-blue.svg",
          "public/assets/brand/logship-logo-white-text.svg",
          "public/favicon-16x16.png",
          "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png",
          "public/icon-72x72.png",
          "reference/SVG/Artboard 2.svg",
          "public/icon-192x192.png",
          "public/icon-144x144.png",
          "android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png",
          "android/app/src/main/res/drawable-port-xhdpi/splash.png",
          "reference/SVG/Artboard 1.svg",
          "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png",
          "android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png",
          "android/app/src/main/res/drawable-port-xxhdpi/splash.png",
          "android/app/src/main/res/drawable-land-mdpi/splash.png",
          "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png",
          "android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png",
          "android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png",
          "public/icon-96x96.png",
          "public/icon-512x512.png",
          "android/app/src/main/res/mipmap-mdpi/ic_launcher.png",
          "public/apple-touch-icon.png",
          "scripts/generate-icons.js",
          "public/assets/brand/logship-logo-on-dark.svg",
          "public/icon-128x128.png",
          "public/assets/brand/logship-logo-white.svg",
          "android/app/src/main/res/mipmap-hdpi/ic_launcher.png",
          "public/icon-maskable-192x192.png",
          "android/app/src/main/res/drawable-port-xxxhdpi/splash.png"
        ],
        "commitId" : "1166bdce969eebf8235c6f7fca08a6fe6456dbdb",
        "timestamp" : 1793119607000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens\u000a\u000apublic/assets/brand/*.svg cropped from reference/SVG (official artwork); scripts/generate-icons.js\u000anow renders PWA icons (+maskable), apple-touch-icon, favicons, Android mipmaps (legacy, round,\u000aadaptive foreground, background #1E5BFF) and all splash sizes from them.\u000a",
        "date" : "2026-10-27 17:46:47 +0100",
        "id" : "1166bdce969eebf8235c6f7fca08a6fe6456dbdb",
        "msg" : "Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-port-xxhdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-128x128.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 7.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-land-mdpi/splash.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 5.svg"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/mobile/capacitor-app-build.md"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-192x192.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/values/ic_launcher_background.xml"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-mark-black.svg"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 8.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-land-xxhdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "public/favicon-32x32.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-maskable-512x512.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-384x384.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-mdpi/ic_launcher.png"
          },
          {
            "editType" : "edit",
            "file" : "public/apple-touch-icon.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 9.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-hdpi/ic_launcher.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 6.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-port-xhdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-512x512.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo-black.svg"
          },
          {
            "editType" : "edit",
            "file" : "scripts/generate-icons.js"
          },
          {
            "editType" : "edit",
            "file" : "public/favicon-16x16.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-96x96.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-port-xxxhdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 3.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-land-xhdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-mark.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-land-hdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-maskable-192x192.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xhdpi/ic_launcher.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo-on-dark.svg"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo-white.svg"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-152x152.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo-white-text.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-land-xxxhdpi/splash.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 2.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-port-hdpi/splash.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo.svg"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-144x144.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 1.svg"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-mark-white.svg"
          },
          {
            "editType" : "edit",
            "file" : "public/icon-72x72.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/drawable-port-mdpi/splash.png"
          },
          {
            "editType" : "add",
            "file" : "public/assets/brand/logship-logo-mark-blue.svg"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 10.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png"
          },
          {
            "editType" : "add",
            "file" : "reference/SVG/Artboard 4.svg"
          },
          {
            "editType" : "edit",
            "file" : "android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/security-keys/index.vue",
          "server/utils/webauthnIndex.ts",
          "app/components/users/SecurityKeyEnrolModal.vue",
          "server/api/admin/webauthn/keys.get.ts"
        ],
        "commitId" : "340ac5c6da72203f50c359a2edf02ba14012419a",
        "timestamp" : 1793119607000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)\u000a",
        "date" : "2026-10-27 17:46:47 +0100",
        "id" : "340ac5c6da72203f50c359a2edf02ba14012419a",
        "msg" : "Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/security-keys/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/webauthnIndex.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/users/SecurityKeyEnrolModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/admin/webauthn/keys.get.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/partners/partners/update.put.ts",
          "app/pages/partners/partners/[id]/edit.vue",
          "app/components/partners/PartnerForm.vue",
          ".claude/rules/partners/partner-edit-form.md",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "e6ab90c18030fb404309ed33b6908017e1725a27",
        "timestamp" : 1793119608000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'\u000a",
        "date" : "2026-10-27 17:46:48 +0100",
        "id" : "e6ab90c18030fb404309ed33b6908017e1725a27",
        "msg" : "Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/partners/partner-edit-form.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/partners/partners/update.put.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/partners/partners/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/components/partners/PartnerForm.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/ci/jenkins-job-deploy-instance.xml",
          "reference/demo-instance/seed-orders-returns.sh",
          "reference/template-cleanup/TEMPLATE-README.md",
          "app/pages/mobile/tasks.vue",
          ".claude/rules/materials/bom-bundle-image.md",
          "server/utils/products/bundleImage.ts",
          "reference/demo-instance/seed-demo-data.sh",
          "reference/demo-instance/make-demo-photo.py",
          "reference/demo-instance/kazaar/consignees.json",
          "reference/demo-instance/kazaar/catalog.json",
          "app/components/materials/ProductStockLocatorsCard.vue",
          "app/components/materials/ProductStockActionModal.vue",
          "reference/ci/deploy-instance.sh",
          "android/update-files/version.json",
          "app/components/materials/ProductForm.vue",
          "reference/demo-instance/kazaar/consignees-v1.json",
          "app/pages/materials/products/[id]/edit.vue",
          "reference/template-cleanup/03-neutralize-env.sh",
          "server/utils/products/bundleImageCompose.ts",
          ".claude/rules/nuxt/dependency-upgrades.md",
          "reference/template-cleanup/05-apply-env-overrides.sh",
          "reference/demo-instance/hess/masters.json",
          "reference/template-cleanup/README.md",
          "reference/ci/deploy-production.sh",
          "reference/test-scripts/bundle-image-compose.mts",
          "reference/demo-instance/rename-consignees.sh",
          "reference/template-cleanup/sync-from-prod.sh",
          ".claude/rules/materials/product-stock-actions.md",
          "reference/demo-instance/kazaar/catalog-raw.json",
          "reference/template-cleanup/04-set-instance-identity.sh",
          "reference/demo-instance/import-merchant-catalog.sh",
          ".nvmrc",
          "android/app/build.gradle",
          "reference/edge-proxy/README.md",
          "app/components/materials/ProductBomModal.vue",
          "reference/demo-instance/kazaar/build-catalog.py",
          "reference/template-cleanup/clone-logship-instance.sh",
          "server/api/materials/products/[id]/bom/bundle-image.post.ts",
          "app/components/SelectBox.vue",
          "reference/template-cleanup/REFRESH-QUICKSTART.md",
          "reference/demo-instance/build-consignees.py",
          "server/api/mobile/product-lookup.post.ts"
        ],
        "commitId" : "b68726395c832b56c7de441025404da6e090d34b",
        "timestamp" : 1793119608000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump\u000a",
        "date" : "2026-10-27 17:46:48 +0100",
        "id" : "b68726395c832b56c7de441025404da6e090d34b",
        "msg" : "WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/demo-instance/kazaar/build-catalog.py"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/build-consignees.py"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/clone-logship-instance.sh"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/bom/bundle-image.post.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/materials/bom-bundle-image.md"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/kazaar/catalog-raw.json"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/04-set-instance-identity.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/kazaar/consignees.json"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/03-neutralize-env.sh"
          },
          {
            "editType" : "add",
            "file" : "server/utils/products/bundleImageCompose.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/import-merchant-catalog.sh"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/TEMPLATE-README.md"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/dependency-upgrades.md"
          },
          {
            "editType" : "add",
            "file" : "reference/template-cleanup/sync-from-prod.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/rename-consignees.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/kazaar/catalog.json"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/REFRESH-QUICKSTART.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductStockLocatorsCard.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/product-lookup.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/README.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductForm.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/make-demo-photo.py"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/materials/product-stock-actions.md"
          },
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          },
          {
            "editType" : "add",
            "file" : "server/utils/products/bundleImage.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/SelectBox.vue"
          },
          {
            "editType" : "edit",
            "file" : "reference/ci/deploy-production.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/kazaar/consignees-v1.json"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductStockActionModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductBomModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/tasks.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/ci/deploy-instance.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/seed-demo-data.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/seed-orders-returns.sh"
          },
          {
            "editType" : "edit",
            "file" : "reference/edge-proxy/README.md"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/bundle-image-compose.mts"
          },
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/hess/masters.json"
          },
          {
            "editType" : "add",
            "file" : "reference/ci/jenkins-job-deploy-instance.xml"
          },
          {
            "editType" : "add",
            "file" : "reference/template-cleanup/05-apply-env-overrides.sh"
          },
          {
            "editType" : "edit",
            "file" : ".nvmrc"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/idempiere/timestamps-timezone.md",
          "server/api/dashboard/prime-due-today.get.ts",
          "app/components/partners/PartnerForm.vue",
          "app/pages/index.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "e70cfa443fd9179caca9afadffd10083522d0c8d",
        "timestamp" : 1793121833000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)\u000a\u000aprime-due-today computes each SameDay merchant's deadline from its own cut-off; the header\u000acounts down to the nearest upcoming deadline, org chips show the cut-off when merchants\u000adiffer, tooltip lists all. Texts no longer hard-code 14:03.\u000a",
        "date" : "2026-10-27 18:23:53 +0100",
        "id" : "e70cfa443fd9179caca9afadffd10083522d0c8d",
        "msg" : "Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/partners/PartnerForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/index.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/idempiere/timestamps-timezone.md"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/api/dashboard/prime-due-today.get.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/update-files/version.json",
          "server/plugins/listing-outbox-flush.ts",
          "android/app/build.gradle",
          ".claude/rules/mobile/capacitor-app-build.md"
        ],
        "commitId" : "f20f4767fb2421e81c1c909f6b3458cdd4a8e20d",
        "timestamp" : 1793122251000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers\u000a\u000anuxt generate boots Nitro in-process, so the listing-outbox plugin armed its\u000asetTimeout/setInterval inside the build and kept the process alive (\"still\u000arunning: 2 timers\"); it would also have flushed the prod outbox from a dev\u000amachine. Gate on import.meta.prerender, unref the timers, recipe note in\u000amobile/capacitor-app-build.md. Includes the app version bump 1.0.71 (code 72)\u000aleft by the aborted release runs.\u000a",
        "date" : "2026-10-27 18:30:51 +0100",
        "id" : "f20f4767fb2421e81c1c909f6b3458cdd4a8e20d",
        "msg" : "Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          },
          {
            "editType" : "edit",
            "file" : "server/plugins/listing-outbox-flush.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/mobile/capacitor-app-build.md"
          },
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/listings/adapters/ebay.ts",
          "server/utils/listings/adapters/types.ts",
          "server/api/sales/sis/listings/[id]/relist.post.ts",
          "public/assets/brand/amazon-icon.png",
          "server/utils/listings/adapters/index.ts",
          ".claude/rules/marketplaces/marketplace-listings.md",
          "server/api/sales/sis/order-sources.get.ts",
          "server/api/sales/sis/listings/create.post.ts",
          "app/components/MarketplaceIcon.vue",
          "server/api/sales/sis/listings/[id]/delist.post.ts",
          "app/pages/sales/sis/index.vue",
          "server/api/sales/sis/listings/[id].put.ts",
          "server/utils/listings/immediate.ts"
        ],
        "commitId" : "56c5268fa1921d65191c36cc8be77a3fa91f7c5e",
        "timestamp" : 1793134754000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards\u000a\u000a- adapters/ebay.ts: Sell Inventory API (inventory item → offer → listing; ListingKey = offerId,\u000a  ExternalProductId = listingId, SKU as inventory id) + Trading API for listings never migrated to\u000a  the Inventory API (GetMyeBaySelling with variations, ReviseInventoryStatus / EndFixedPriceItem /\u000a  RelistFixedPriceItem); token JSON like the Laravel EbayTokenRepository, refreshed and written back\u000a  to the order source; create via inventory item + offer + publish\u000a- immediate delivery: adapters flagged `immediate` (eBay, Shopify, Shopware) are flushed right after\u000a  queueing from the put / delist / relist / create routes; Amazon keeps the batched outbox\u000a- page: \"Details\" toggle (internal price, marketplace qty, listed-on date hidden by default), internal\u000a  qty right of the Qty field, copy buttons hidden, thumbnail click → centred medium-size popup,\u000a  card layout ≤ 768 px with the same inputs and actions\u000a- MarketplaceIcon: Amazon from public/assets/brand/amazon-icon.png on a white tile\u000a",
        "date" : "2026-10-27 21:59:14 +0100",
        "id" : "56c5268fa1921d65191c36cc8be77a3fa91f7c5e",
        "msg" : "SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards",
        "paths" : [
          {
            "editType" : "add",
            "file" : "public/assets/brand/amazon-icon.png"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/[id]/delist.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/[id]/relist.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/create.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MarketplaceIcon.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/order-sources.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/types.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/listings/immediate.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/sales/sis/listings/[id].put.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/index.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/sis/index.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/marketplaces/marketplace-listings.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/listings/adapters/ebay.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/bi/shipping-performance.vue",
          ".claude/rules/bi/shipping-performance.md",
          "server/utils/bi/stockAtDeadline.ts",
          "server/api/bi/shipping-performance.get.ts"
        ],
        "commitId" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
        "timestamp" : 1793136801000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "BI shipping performance: exclude stock-blocked orders (status 'No stock')\u000a\u000aOrders that are not on time are checked against the historic stock of their\u000aitem lines in the order's warehouse at the end of the deadline day\u000a(m_storage minus later m_transaction movements, direct Postgres,\u000aserver/utils/bi/stockAtDeadline.ts). At least one short line -> status\u000a'nostock', excluded from on-time/SLA/lateness/lead-time rates; ?nostock=include\u000akeeps the SLA status and only flags the row. Page: checkbox, grey chart series,\u000afilter button, 'Missing stock' column/CSV, warning tag when PG is unavailable.\u000aMeasured on prod: 0.1-0.9 s per request for the stock check.\u000a",
        "date" : "2026-10-27 22:33:21 +0100",
        "id" : "3dbbeedfa45b9ace1df7a02122d5407091b8e992",
        "msg" : "BI shipping performance: exclude stock-blocked orders (status 'No stock')",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/bi/shipping-performance.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/bi/stockAtDeadline.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/bi/shipping-performance.vue"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/bi/shipping-performance.md"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}