<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Started by timer</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>781</buildNumber><marked><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><name>refs/remotes/origin/dev</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/erp-nuxt-frontend.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/job/build-logship-frontend/781/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/781/</displayUrl><testsUrl>https://jenkins.younex.de/job/build-logship-frontend/781/testReport</testsUrl></action><building>false</building><displayName>#781</displayName><duration>58892</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #781</fullDisplayName><id>781</id><inProgress>false</inProgress><keepLog>false</keepLog><number>781</number><queueId>5902</queueId><result>SUCCESS</result><timestamp>1793149200194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/781/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/amazon.ts</affectedPath><affectedPath>server/utils/listings/adapters/ebay.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/link-product.put.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import.post.ts</affectedPath><affectedPath>server/api/sales/sis/status.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/remote.get.ts</affectedPath><affectedPath>app/components/sales/sis/LinkProductModal.vue</affectedPath><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import-preview.post.ts</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/pages/fulfillment/amazon-stocks/index.vue</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/delist.post.ts</affectedPath><affectedPath>server/utils/listings/adapters/shopify.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id].put.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><affectedPath>server/utils/listings/rateLimiter.ts</affectedPath><affectedPath>server/utils/listings/routeHelper.ts</affectedPath><affectedPath>server/api/materials/products/search.get.ts</affectedPath><affectedPath>app/components/sales/sis/ChangeHistoryDrawer.vue</affectedPath><affectedPath>server/api/sales/sis/changes/[id]/cancel.post.ts</affectedPath><affectedPath>reference/test-scripts/listing-outbox-smoke.mts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>server/api/sales/sis/price-update.post.ts</affectedPath><affectedPath>server/api/sales/sis/changes.get.ts</affectedPath><affectedPath>app/components/sales/sis/ListProductsModal.vue</affectedPath><affectedPath>server/api/sales/sis/listings.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>server/api/sales/sis/products-defaults.get.ts</affectedPath><affectedPath>server/utils/listings/outbox.ts</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/api/sales/sis/flush.post.ts</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><commitId>95c2ad2c895302268130313dea4eebf6b66b730a</commitId><timestamp>1793098595000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: persisted marketplace listings with outbox delivery to Amazon

Replaces the report-per-page-load Amazon pricing page with listings managed
in iDempiere (CUST_MarketplaceListing + CUST_MarketplaceListingChange).

- server/utils/listings: listing store (REST, caller/service token), adapter
  contract (Amazon implemented, eBay/Shopify stubs), outbox (claim → coalesce
  → push → settle, stale-claim recovery, feed polling, 5-min spot-check),
  token-bucket rate limiter, importer (report → product match → upsert)
- amazonSpApi: LWA token cache, PUT/DELETE, merge-patch builders for
  purchasable_offer (price, min/max, sale) + fulfillment_availability,
  offer-only PUT, Feeds API (JSON_LISTINGS_FEED), catalog productType,
  competitiveSummary batch
- Nitro plugin: timer flush every 60 s (debounce 20 s, PM2 instance 0 only)
- routes sales/sis: listings (list/edit/delist/relist/link/create/import),
  flush, changes (+cancel), status, products-defaults; old price-update
  removed, report view moved to listings/remote (amazon-stocks page)
- page rewritten on the table + import wizard, list-products modal, change
  history drawer, link-product modal
- template cleanup: both tables in the truncate list; recipe + smoke script
</comment><date>2026-10-27 11:56:35 +0100</date><id>95c2ad2c895302268130313dea4eebf6b66b730a</id><msg>SIS: persisted marketplace listings with outbox delivery to Amazon</msg><path><editType>add</editType><file>app/components/sales/sis/ListProductsModal.vue</file></path><path><editType>add</editType><file>server/utils/listings/listingStore.ts</file></path><path><editType>edit</editType><file>app/pages/fulfillment/amazon-stocks/index.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/import.post.ts</file></path><path><editType>add</editType><file>app/components/sales/sis/LinkProductModal.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>delete</editType><file>server/api/sales/sis/listings.get.ts</file></path><path><editType>add</editType><file>server/utils/listings/outbox.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/index.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/changes/[id]/cancel.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/import-preview.post.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/products-defaults.get.ts</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>add</editType><file>app/components/sales/sis/ChangeHistoryDrawer.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/search.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/delist.post.ts</file></path><path><editType>add</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>add</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>add</editType><file>server/utils/listings/routeHelper.ts</file></path><path><editType>add</editType><file>server/plugins/listing-outbox-flush.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/flush.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/remote.get.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/amazon.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id].put.ts</file></path><path><editType>add</editType><file>reference/test-scripts/listing-outbox-smoke.mts</file></path><path><editType>add</editType><file>server/utils/listings/importer.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/status.get.ts</file></path><path><editType>delete</editType><file>server/api/sales/sis/price-update.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/changes.get.ts</file></path><path><editType>add</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>add</editType><file>server/utils/listings/rateLimiter.ts</file></path><path><editType>edit</editType><file>server/utils/sisMatching.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/link-product.put.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/shopify.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/ebay.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/productCreator.ts</affectedPath><affectedPath>server/utils/listings/adapters/amazon.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import.post.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id].delete.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><commitId>5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a</commitId><timestamp>1793106229000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix

- Import wizard: "Create missing products" (minimal M_Product, Value = SKU, asin, Amazon price,
  Strapi record) and "Import images from Amazon" (ASIN MAIN catalog picture, only when the product
  has no picture); result counters, pages of 40 with side effects
- Per-row links to the Amazon offer page and the Seller Central offer editor (marketplace domain
  from the order source), "listed on Amazon" date label
- DELETE listings/[id]: remove the SIS record + change history (409 while sending); row + bulk buttons
- BOM rows: components with stock from pp_product_bom; internal qty = first component's on-hand,
  hover popover with all components
- Relist reopens a "Closed" Amazon offer (purchasable_offer replace without end_at + qty) and is
  allowed for inactive listings; VALID preview results are non-blocking
- Outbox: iDempiere Created/Updated are server-local with a literal Z -&gt; serverLocalToIso()
  (IDEMPIERE_TZ); the debounce held every change for one UTC-offset hour before. Timer first run 10 s
- Page layout: wider product column with fixed-width name, tighter numeric columns, toolbar and
  selection-bar buttons styled, lighter link icons
</comment><date>2026-10-27 14:03:49 +0100</date><id>5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a</id><msg>SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix</msg><path><editType>add</editType><file>server/utils/listings/productCreator.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>edit</editType><file>server/utils/sisMatching.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id].delete.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/import.post.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/amazon.ts</file></path><path><editType>edit</editType><file>server/utils/listings/listingStore.ts</file></path><path><editType>edit</editType><file>server/plugins/listing-outbox-flush.ts</file></path><path><editType>edit</editType><file>server/utils/listings/importer.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/productCreator.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>app/components/sales/sis/ListProductsModal.vue</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/order-sources.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>server/utils/listings/outbox.ts</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/utils/listings/adapters/shopify.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><commitId>5e251ffa9442317ebfb0a3d42838497529cb0b06</commitId><timestamp>1793107731000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons

- adapters/shopify.ts: GraphQL Admin API 2025-10 for `shopify` (token) and `shopify-new`
  (client credentials) sources; one row per variant (variant / product / inventoryItem GIDs),
  import with available qty at the configured or first location, price via
  productVariantsBulkUpdate, qty via inventorySetQuantities (+ inventoryActivate), delist/relist
  as qty, create via productCreate + variant sku/price + publish; synchronous results settle as
  confirmed (PushResult.confirmed) and carry the assigned ids (PushResult.remote)
- order-sources lists every source with a listings adapter (marketplace key + label); listings
  route returns marketplace + shop link data; create route handles Shopify (no ASIN, SKU key)
- importer: index-aligned preview rows, external ids / meta / image URL per row, image import
  from the marketplace picture for non-Amazon sources (importImageFromUrlIfMissing)
- page: order-source picker with marketplace icons, generic "Import listings", labels/columns/
  links per marketplace (Buy Box, FBA, ASIN, min/max = Amazon only), BOM stat tile + filter
- wizard: source picker with icon, BOM tag/filter/count, fixed-width name column, styled buttons;
  list-products modal: Shopify mode without ASIN/min/max, styled buttons
</comment><date>2026-10-27 14:28:51 +0100</date><id>5e251ffa9442317ebfb0a3d42838497529cb0b06</id><msg>SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons</msg><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>edit</editType><file>server/utils/listings/productCreator.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/shopify.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ListProductsModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>server/utils/listings/listingStore.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/order-sources.get.ts</file></path><path><editType>edit</editType><file>server/utils/listings/importer.ts</file></path><path><editType>edit</editType><file>server/utils/listings/outbox.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>app/components/sales/sis/ChangeHistoryDrawer.vue</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/utils/listings/adapters/shopware.ts</affectedPath><affectedPath>app/utils/sisDate.ts</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><commitId>621500391179e3a8a1c9f549d0d647c3b17b3916</commitId><timestamp>1793109326000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons

- adapters/shopware.ts: Admin API (integration client credentials against {marketplace_url}/oauth/token),
  one row per sellable product (variants inherit name/price/cover/tax from the parent), price patch replaces
  only the default-currency entry (net from the product tax rate), qty = stock, create via POST /product with
  storefront visibilities; synchronous confirm; registry maps Marketplace `shopware6`
- GET listings accepts orderSourceId=a,b,c or all=1, enriches per org and returns per-source marketplace /
  link data; page: checkbox picker with "All order sources", Source column, per-row marketplace for labels,
  links, Buy Box cells, Send now across the selection; wizard keeps its own switchable source
- Import wizard: "Only with ERP stock" (+ ERP qty column) and "Only active" filters, fixed-width name column
- German date/time formatting (app/utils/sisDate.ts) on the page, wizard and history drawer
- Brand-coloured MDI marketplace icons (Tabler 2.21 has no Shopify glyph) in picker, rows and wizard
- Thumbnail @error fallback to the placeholder (a broken picture no longer stretches the row)
- Styled modal buttons, aligned BOM tag in the wizard
</comment><date>2026-10-27 14:55:26 +0100</date><id>621500391179e3a8a1c9f549d0d647c3b17b3916</id><msg>SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons</msg><path><editType>add</editType><file>server/utils/listings/adapters/shopware.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ChangeHistoryDrawer.vue</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>add</editType><file>app/utils/sisDate.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/transactions.get.ts</affectedPath><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>server/utils/berlinTime.ts</affectedPath><affectedPath>app/pages/materials/transactions-by-org.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>.claude/rules/idempiere/timestamps-timezone.md</affectedPath><affectedPath>app/composables/useTransactionReportPdf.ts</affectedPath><affectedPath>app/composables/menu/admin/bi.ts</affectedPath><affectedPath>server/api/materials/transactions-by-org.get.ts</affectedPath><affectedPath>server/utils/transactionEnrichHelper.ts</affectedPath><affectedPath>server/api/bi/shipping-performance.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5748e244b3fff29b0345ca95c39db05423196555</commitId><timestamp>1793112953000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI: Transactions by Org page + Shipping Performance (cut-off SLA) page

- /materials/transactions-by-org: all M_Transaction rows of one org/warehouse in a date window,
  shared enrichment helper (transactionEnrichHelper) now also used by the product history route,
  inventory/movement document links, warehouse column, Excel/CSV/PDF export
- /bi/shipping-performance: cut-off SLA per merchant (c_bpartner.CutOffTime, default 14:00,
  override), working days minus CUST_NonWorkingDays, Berlin timezone handling (berlinTime.ts),
  KPIs, month/day/hour/weekday/lateness charts, source table, order grid
- sidebar + BI mega menu entries, en/de/es translations
- recipe: iDempiere REST timestamp semantics (Created = Berlin local with fake Z)
</comment><date>2026-10-27 15:55:53 +0100</date><id>5748e244b3fff29b0345ca95c39db05423196555</id><msg>BI: Transactions by Org page + Shipping Performance (cut-off SLA) page</msg><path><editType>add</editType><file>app/pages/bi/shipping-performance.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/bi/shipping-performance.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/transactions.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>.claude/rules/idempiere/timestamps-timezone.md</file></path><path><editType>add</editType><file>app/pages/materials/transactions-by-org.vue</file></path><path><editType>add</editType><file>server/api/materials/transactions-by-org.get.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/bi.ts</file></path><path><editType>add</editType><file>server/utils/transactionEnrichHelper.ts</file></path><path><editType>add</editType><file>server/utils/berlinTime.ts</file></path><path><editType>edit</editType><file>app/composables/useTransactionReportPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/utils/scanCode.ts</affectedPath><affectedPath>server/api/idempiere-auth/user.get.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>fc75bdef0da02ce98b346ca350f375b5b536b6fd</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line

- shipmentScanCandidates/shipmentScanFilter (app/utils/scanCode.ts): a DPD label scan is the
  28-char routing code (% + postcode + 14-digit parcel no + service + country) while M_InOut
  stores only the parcel number; parcels 2..n live in trackingnoarray. Used by the mobile return
  page, the dashboard scan dispatcher and the desktop returns page.
- Return page: external-RMA hit without InOut_ID offers the customer's shipments instead of
  'not found' (standalone RMAs from the Amazon import); selection list shows positions
  (qty, name, SKU); detail shows all product identifiers, 2-line names, back-to-selection
  button; e-mail notification on by default.
- /api/idempiere-auth/user was missing (profile modal showed no user data); cookie-based route
  added; 'Angemeldet als …' shown next to the app-update check.
</comment><date>2026-10-27 17:46:47 +0100</date><id>fc75bdef0da02ce98b346ca350f375b5b536b6fd</id><msg>Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/utils/scanCode.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path><path><editType>add</editType><file>server/api/idempiere-auth/user.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><commitId>cc223c5bf47e0e748adee95b2141f4969b1dfb76</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)
</comment><date>2026-10-27 17:46:47 +0100</date><id>cc223c5bf47e0e748adee95b2141f4969b1dfb76</id><msg>SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)</msg><path><editType>add</editType><file>app/components/MarketplaceIcon.vue</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher.png</affectedPath><affectedPath>reference/SVG/Artboard 7.svg</affectedPath><affectedPath>public/assets/brand/logship-mark-white.svg</affectedPath><affectedPath>reference/SVG/Artboard 8.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-port-hdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/drawable/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>reference/SVG/Artboard 6.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png</affectedPath><affectedPath>reference/SVG/Artboard 10.svg</affectedPath><affectedPath>reference/SVG/Artboard 9.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>public/assets/brand/logship-logo-black.svg</affectedPath><affectedPath>public/assets/brand/logship-logo.svg</affectedPath><affectedPath>reference/SVG/Artboard 5.svg</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>android/app/src/main/res/drawable-land-hdpi/splash.png</affectedPath><affectedPath>public/assets/brand/logship-mark.svg</affectedPath><affectedPath>public/icon-maskable-512x512.png</affectedPath><affectedPath>public/assets/brand/logship-mark-black.svg</affectedPath><affectedPath>reference/SVG/Artboard 4.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xxhdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png</affectedPath><affectedPath>public/icon-152x152.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xhdpi/splash.png</affectedPath><affectedPath>public/icon.png</affectedPath><affectedPath>reference/SVG/Artboard 3.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xxxhdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-mdpi/splash.png</affectedPath><affectedPath>public/favicon-32x32.png</affectedPath><affectedPath>public/assets/brand/logship-logo-mark-blue.svg</affectedPath><affectedPath>android/app/src/main/res/values/ic_launcher_background.xml</affectedPath><affectedPath>public/icon-384x384.png</affectedPath><affectedPath>public/assets/brand/logship-logo-white-text.svg</affectedPath><affectedPath>public/favicon-16x16.png</affectedPath><affectedPath>public/icon-72x72.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png</affectedPath><affectedPath>reference/SVG/Artboard 2.svg</affectedPath><affectedPath>public/icon-192x192.png</affectedPath><affectedPath>public/icon-144x144.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xhdpi/splash.png</affectedPath><affectedPath>reference/SVG/Artboard 1.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png</affectedPath><affectedPath>android/app/src/main/res/drawable-land-mdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xxhdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>public/icon-96x96.png</affectedPath><affectedPath>public/icon-512x512.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher.png</affectedPath><affectedPath>public/apple-touch-icon.png</affectedPath><affectedPath>scripts/generate-icons.js</affectedPath><affectedPath>public/assets/brand/logship-logo-on-dark.svg</affectedPath><affectedPath>public/icon-128x128.png</affectedPath><affectedPath>public/assets/brand/logship-logo-white.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher.png</affectedPath><affectedPath>public/icon-maskable-192x192.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xxxhdpi/splash.png</affectedPath><commitId>1166bdce969eebf8235c6f7fca08a6fe6456dbdb</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens

public/assets/brand/*.svg cropped from reference/SVG (official artwork); scripts/generate-icons.js
now renders PWA icons (+maskable), apple-touch-icon, favicons, Android mipmaps (legacy, round,
adaptive foreground, background #1E5BFF) and all splash sizes from them.
</comment><date>2026-10-27 17:46:47 +0100</date><id>1166bdce969eebf8235c6f7fca08a6fe6456dbdb</id><msg>Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens</msg><path><editType>add</editType><file>public/assets/brand/logship-mark-black.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-mark.svg</file></path><path><editType>edit</editType><file>public/icon-maskable-512x512.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 7.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-mark-white.svg</file></path><path><editType>add</editType><file>reference/SVG/Artboard 3.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-mdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xxxhdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon-72x72.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-mark-blue.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-hdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon-144x144.png</file></path><path><editType>edit</editType><file>public/icon-512x512.png</file></path><path><editType>edit</editType><file>public/favicon-32x32.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 4.svg</file></path><path><editType>edit</editType><file>public/icon-152x152.png</file></path><path><editType>edit</editType><file>public/icon.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 10.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xhdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/values/ic_launcher_background.xml</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 6.svg</file></path><path><editType>edit</editType><file>public/icon-96x96.png</file></path><path><editType>edit</editType><file>public/apple-touch-icon.png</file></path><path><editType>edit</editType><file>public/icon-128x128.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-white-text.svg</file></path><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xxxhdpi/splash.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 2.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>public/favicon-16x16.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 8.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xxhdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 5.svg</file></path><path><editType>edit</editType><file>public/icon-384x384.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-mdpi/splash.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 1.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-hdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xhdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xxhdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon-192x192.png</file></path><path><editType>edit</editType><file>public/icon-maskable-192x192.png</file></path><path><editType>edit</editType><file>scripts/generate-icons.js</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-black.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-white.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-on-dark.svg</file></path><path><editType>add</editType><file>reference/SVG/Artboard 9.svg</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/security-keys/index.vue</affectedPath><affectedPath>server/utils/webauthnIndex.ts</affectedPath><affectedPath>server/api/admin/webauthn/keys.get.ts</affectedPath><affectedPath>app/components/users/SecurityKeyEnrolModal.vue</affectedPath><commitId>340ac5c6da72203f50c359a2edf02ba14012419a</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)
</comment><date>2026-10-27 17:46:47 +0100</date><id>340ac5c6da72203f50c359a2edf02ba14012419a</id><msg>Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)</msg><path><editType>edit</editType><file>server/api/admin/webauthn/keys.get.ts</file></path><path><editType>edit</editType><file>server/utils/webauthnIndex.ts</file></path><path><editType>edit</editType><file>app/components/users/SecurityKeyEnrolModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/security-keys/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>server/api/partners/partners/update.put.ts</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>.claude/rules/partners/partner-edit-form.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e6ab90c18030fb404309ed33b6908017e1725a27</commitId><timestamp>1793119608000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'
</comment><date>2026-10-27 17:46:48 +0100</date><id>e6ab90c18030fb404309ed33b6908017e1725a27</id><msg>Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/partners/partner-edit-form.md</file></path><path><editType>edit</editType><file>server/api/partners/partners/update.put.ts</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/ci/jenkins-job-deploy-instance.xml</affectedPath><affectedPath>reference/demo-instance/seed-orders-returns.sh</affectedPath><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>.claude/rules/materials/bom-bundle-image.md</affectedPath><affectedPath>reference/demo-instance/seed-demo-data.sh</affectedPath><affectedPath>server/utils/products/bundleImage.ts</affectedPath><affectedPath>reference/demo-instance/make-demo-photo.py</affectedPath><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><affectedPath>reference/demo-instance/kazaar/consignees.json</affectedPath><affectedPath>reference/demo-instance/kazaar/catalog.json</affectedPath><affectedPath>app/components/materials/ProductStockActionModal.vue</affectedPath><affectedPath>reference/ci/deploy-instance.sh</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>reference/demo-instance/kazaar/consignees-v1.json</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>server/utils/products/bundleImageCompose.ts</affectedPath><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>.claude/rules/nuxt/dependency-upgrades.md</affectedPath><affectedPath>reference/template-cleanup/05-apply-env-overrides.sh</affectedPath><affectedPath>reference/demo-instance/hess/masters.json</affectedPath><affectedPath>reference/template-cleanup/README.md</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>reference/test-scripts/bundle-image-compose.mts</affectedPath><affectedPath>reference/demo-instance/rename-consignees.sh</affectedPath><affectedPath>reference/template-cleanup/sync-from-prod.sh</affectedPath><affectedPath>.claude/rules/materials/product-stock-actions.md</affectedPath><affectedPath>reference/template-cleanup/04-set-instance-identity.sh</affectedPath><affectedPath>reference/demo-instance/kazaar/catalog-raw.json</affectedPath><affectedPath>.nvmrc</affectedPath><affectedPath>reference/demo-instance/import-merchant-catalog.sh</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>reference/edge-proxy/README.md</affectedPath><affectedPath>app/components/materials/ProductBomModal.vue</affectedPath><affectedPath>reference/demo-instance/kazaar/build-catalog.py</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><affectedPath>server/api/materials/products/[id]/bom/bundle-image.post.ts</affectedPath><affectedPath>app/components/SelectBox.vue</affectedPath><affectedPath>reference/template-cleanup/REFRESH-QUICKSTART.md</affectedPath><affectedPath>reference/demo-instance/build-consignees.py</affectedPath><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><commitId>b68726395c832b56c7de441025404da6e090d34b</commitId><timestamp>1793119608000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><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
</comment><date>2026-10-27 17:46:48 +0100</date><id>b68726395c832b56c7de441025404da6e090d34b</id><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</msg><path><editType>add</editType><file>reference/demo-instance/build-consignees.py</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/build-catalog.py</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/bundle-image.post.ts</file></path><path><editType>add</editType><file>server/utils/products/bundleImageCompose.ts</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/consignees-v1.json</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/dependency-upgrades.md</file></path><path><editType>edit</editType><file>.nvmrc</file></path><path><editType>edit</editType><file>reference/demo-instance/hess/masters.json</file></path><path><editType>add</editType><file>.claude/rules/materials/bom-bundle-image.md</file></path><path><editType>add</editType><file>reference/demo-instance/seed-orders-returns.sh</file></path><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/consignees.json</file></path><path><editType>add</editType><file>reference/test-scripts/bundle-image-compose.mts</file></path><path><editType>edit</editType><file>reference/template-cleanup/REFRESH-QUICKSTART.md</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/catalog.json</file></path><path><editType>edit</editType><file>reference/template-cleanup/04-set-instance-identity.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/05-apply-env-overrides.sh</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>add</editType><file>reference/demo-instance/rename-consignees.sh</file></path><path><editType>add</editType><file>reference/ci/deploy-instance.sh</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockActionModal.vue</file></path><path><editType>add</editType><file>reference/demo-instance/make-demo-photo.py</file></path><path><editType>edit</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>add</editType><file>reference/template-cleanup/sync-from-prod.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/README.md</file></path><path><editType>edit</editType><file>.claude/rules/materials/product-stock-actions.md</file></path><path><editType>add</editType><file>reference/demo-instance/import-merchant-catalog.sh</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/catalog-raw.json</file></path><path><editType>edit</editType><file>reference/edge-proxy/README.md</file></path><path><editType>edit</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>reference/demo-instance/seed-demo-data.sh</file></path><path><editType>add</editType><file>server/utils/products/bundleImage.ts</file></path><path><editType>add</editType><file>reference/ci/jenkins-job-deploy-instance.xml</file></path><path><editType>edit</editType><file>app/components/materials/ProductBomModal.vue</file></path><path><editType>edit</editType><file>app/components/SelectBox.vue</file></path><path><editType>edit</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/idempiere/timestamps-timezone.md</affectedPath><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e70cfa443fd9179caca9afadffd10083522d0c8d</commitId><timestamp>1793121833000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)

prime-due-today computes each SameDay merchant's deadline from its own cut-off; the header
counts down to the nearest upcoming deadline, org chips show the cut-off when merchants
differ, tooltip lists all. Texts no longer hard-code 14:03.
</comment><date>2026-10-27 18:23:53 +0100</date><id>e70cfa443fd9179caca9afadffd10083522d0c8d</id><msg>Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/idempiere/timestamps-timezone.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><commitId>f20f4767fb2421e81c1c909f6b3458cdd4a8e20d</commitId><timestamp>1793122251000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers

nuxt generate boots Nitro in-process, so the listing-outbox plugin armed its
setTimeout/setInterval inside the build and kept the process alive ("still
running: 2 timers"); it would also have flushed the prod outbox from a dev
machine. Gate on import.meta.prerender, unref the timers, recipe note in
mobile/capacitor-app-build.md. Includes the app version bump 1.0.71 (code 72)
left by the aborted release runs.
</comment><date>2026-10-27 18:30:51 +0100</date><id>f20f4767fb2421e81c1c909f6b3458cdd4a8e20d</id><msg>Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/plugins/listing-outbox-flush.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/ebay.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>public/assets/brand/amazon-icon.png</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/order-sources.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/delist.post.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id].put.ts</affectedPath><affectedPath>server/utils/listings/immediate.ts</affectedPath><commitId>56c5268fa1921d65191c36cc8be77a3fa91f7c5e</commitId><timestamp>1793134754000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards

- adapters/ebay.ts: Sell Inventory API (inventory item → offer → listing; ListingKey = offerId,
  ExternalProductId = listingId, SKU as inventory id) + Trading API for listings never migrated to
  the Inventory API (GetMyeBaySelling with variations, ReviseInventoryStatus / EndFixedPriceItem /
  RelistFixedPriceItem); token JSON like the Laravel EbayTokenRepository, refreshed and written back
  to the order source; create via inventory item + offer + publish
- immediate delivery: adapters flagged `immediate` (eBay, Shopify, Shopware) are flushed right after
  queueing from the put / delist / relist / create routes; Amazon keeps the batched outbox
- page: "Details" toggle (internal price, marketplace qty, listed-on date hidden by default), internal
  qty right of the Qty field, copy buttons hidden, thumbnail click → centred medium-size popup,
  card layout ≤ 768 px with the same inputs and actions
- MarketplaceIcon: Amazon from public/assets/brand/amazon-icon.png on a white tile
</comment><date>2026-10-27 21:59:14 +0100</date><id>56c5268fa1921d65191c36cc8be77a3fa91f7c5e</id><msg>SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards</msg><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/order-sources.get.ts</file></path><path><editType>add</editType><file>server/utils/listings/immediate.ts</file></path><path><editType>edit</editType><file>app/components/MarketplaceIcon.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/delist.post.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/ebay.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path><path><editType>add</editType><file>public/assets/brand/amazon-icon.png</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id].put.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>.claude/rules/bi/shipping-performance.md</affectedPath><affectedPath>server/utils/bi/stockAtDeadline.ts</affectedPath><affectedPath>server/api/bi/shipping-performance.get.ts</affectedPath><commitId>3dbbeedfa45b9ace1df7a02122d5407091b8e992</commitId><timestamp>1793136801000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI shipping performance: exclude stock-blocked orders (status 'No stock')

Orders that are not on time are checked against the historic stock of their
item lines in the order's warehouse at the end of the deadline day
(m_storage minus later m_transaction movements, direct Postgres,
server/utils/bi/stockAtDeadline.ts). At least one short line -&gt; status
'nostock', excluded from on-time/SLA/lateness/lead-time rates; ?nostock=include
keeps the SLA status and only flags the row. Page: checkbox, grey chart series,
filter button, 'Missing stock' column/CSV, warning tag when PG is unavailable.
Measured on prod: 0.1-0.9 s per request for the stock check.
</comment><date>2026-10-27 22:33:21 +0100</date><id>3dbbeedfa45b9ace1df7a02122d5407091b8e992</id><msg>BI shipping performance: exclude stock-blocked orders (status 'No stock')</msg><path><editType>add</editType><file>.claude/rules/bi/shipping-performance.md</file></path><path><editType>edit</editType><file>server/api/bi/shipping-performance.get.ts</file></path><path><editType>add</editType><file>server/utils/bi/stockAtDeadline.ts</file></path><path><editType>edit</editType><file>app/pages/bi/shipping-performance.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit></freeStyleBuild>