<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>782</buildNumber><marked><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</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/782/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/782/</displayUrl><testsUrl>https://jenkins.younex.de/job/build-logship-frontend/782/testReport</testsUrl></action><building>false</building><displayName>#782</displayName><duration>67059</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #782</fullDisplayName><id>782</id><inProgress>false</inProgress><keepLog>false</keepLog><number>782</number><queueId>5920</queueId><result>SUCCESS</result><timestamp>1793235600194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/782/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>app/composables/useShippingPerformancePdf.ts</affectedPath><affectedPath>.claude/rules/bi/shipping-performance.md</affectedPath><commitId>17347f6d0640c6ce40944d6afe25d4a7e94090d4</commitId><timestamp>1793176195000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)
</comment><date>2026-10-28 09:29:55 +0100</date><id>17347f6d0640c6ce40944d6afe25d4a7e94090d4</id><msg>BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)</msg><path><editType>edit</editType><file>app/pages/bi/shipping-performance.vue</file></path><path><editType>add</editType><file>app/composables/useShippingPerformancePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/bi/shipping-performance.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/leads/latest.get.ts</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>server/api/admin/users/store.post.ts</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>server/api/admin/users/update.put.ts</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/pages/users/users/create.vue</affectedPath><affectedPath>app/components/admin/UserForm.vue</affectedPath><affectedPath>app/components/leads/ChatConsoleModal.vue</affectedPath><affectedPath>app/components/leads/MailComposeModal.vue</affectedPath><affectedPath>server/utils/trimCookieData.ts</affectedPath><affectedPath>.claude/rules/idempiere/write-casing-and-flags.md</affectedPath><affectedPath>app/pages/users/leads/create.vue</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/mail/staffMail.ts</affectedPath><commitId>62585d99e20d86d93cbcc6116a61055f63e7793d</commitId><timestamp>1793177401000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes

- KI-Konsole: explicit bubble text colours (global `*` colour rule made the user bubble unreadable); new
  "Als E-Mail senden" on assistant turns extracts subject/body and opens the lead mail composer on top,
  pre-filled and editable (composer `draft` prop, templateKey 'ai-chat', signature/footer as usual)
- AD_User.FullName: used for the staff mail signature (fallback Name), carried in the logship_user cookie,
  written by store/update (update only when the key is sent), field on /create/user and /edit/user-:id
- User pages rebuilt on Nuxt UI (hero with avatar/badges, UTabs, card groups, USwitch with track fix);
  edit page now reads/writes IsAddMailTextAutomatically correctly
- Dashboard "Neueste Leads": expired leads (LeadStatus E) no longer listed
- /create/lead: company name, website and AiScore were dropped on the initial save (client + store route)
- Recipes: console hand-off, REST cache reset for new columns, USwitch gap
</comment><date>2026-10-28 09:50:01 +0100</date><id>62585d99e20d86d93cbcc6116a61055f63e7793d</id><msg>Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes</msg><path><editType>edit</editType><file>app/components/leads/ChatConsoleModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/create.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/leads/latest.get.ts</file></path><path><editType>edit</editType><file>app/components/leads/MailComposeModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>edit</editType><file>server/api/admin/users/update.put.ts</file></path><path><editType>edit</editType><file>server/api/admin/users/store.post.ts</file></path><path><editType>edit</editType><file>server/utils/mail/staffMail.ts</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/admin/UserForm.vue</file></path><path><editType>edit</editType><file>server/utils/trimCookieData.ts</file></path><path><editType>edit</editType><file>.claude/rules/idempiere/write-casing-and-flags.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/admin/UserForm.vue</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>public/css/styles.css</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/users/users/create.vue</affectedPath><commitId>bdb551d64cbbacbf95b0663f213ecd7d9ed711ed</commitId><timestamp>1793179770000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide

The universal `* { color: var(--theme-text-primary) }` in public/css/styles.css painted every element
without its own colour dark, so text inside navy hero cards, chat bubbles and dark badges was unreadable.
Colour now cascades from html/body; form controls keep the explicit theme colour, buttons inherit.
User page: ext. badge and card titles get explicit colours (Bulma strong colour on dark cards).
</comment><date>2026-10-28 10:29:30 +0100</date><id>bdb551d64cbbacbf95b0663f213ecd7d9ed711ed</id><msg>Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide</msg><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/admin/UserForm.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/users/users/create.vue</file></path><path><editType>edit</editType><file>public/css/styles.css</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/orders/summaryQuery.ts</affectedPath><affectedPath>.claude/rules/sales/orders-grid.md</affectedPath><affectedPath>server/api/orders/ag-grid/summary.post.ts</affectedPath><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/components/AgGridServer.vue</affectedPath><affectedPath>reference/sql/backup-view.cjs</affectedPath><affectedPath>server/api/orders/ag-grid/summary-totals.post.ts</affectedPath><affectedPath>server/api/orders/sales/stream.get.ts</affectedPath><affectedPath>reference/sql/backups/v_orders_summary.20261027-210422.sql</affectedPath><affectedPath>reference/sql/restore-view.cjs</affectedPath><affectedPath>reference/sql/_db.cjs</affectedPath><affectedPath>reference/sql/apply-view.cjs</affectedPath><affectedPath>reference/sql/v_orders_summary.rollback.sql</affectedPath><affectedPath>reference/sql/v_orders_summary.sql</affectedPath><affectedPath>reference/README.md</affectedPath><commitId>52e3abbc96b47192b0d0076a03136dc9e4cd2041</commitId><timestamp>1793186468000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces

- v_orders_summary rewritten as LEFT JOIN LATERAL (applied on prod 2026-10-27); DDL now versioned in
  reference/sql with backup/apply/restore scripts (node + pg, .env PG_* keys, PG tunnel on dev)
- summary.post.ts: step 1 ids-only page (cheap deep $skip), step 2 rows by id in step-1 order; shared query
  builder server/utils/orders/summaryQuery.ts; single-flight per identical block, no row cache
- totals moved to orders/ag-grid/summary-totals.post.ts (60 s cache + single-flight), page calls it debounced
  on grid ready / switch / column filter / card reload; blocks never wait for it
- AgGridServer: cacheBlockSize / maxBlocksInCache props + filterChanged emit (orders page uses 100/20)
- SSE stream seeds globalLastOrderId from the newest order on a fresh process (no replay of old orders
  + push notifications after a PM2 restart)
- fix: external reference links for Shopware, Shopify, Amazon and JTL were dead on the list — $select on the
  view only carried plentyone_order_id; all marketplace id columns AgMarketplaceLink.vue uses are selected now
</comment><date>2026-10-28 12:21:08 +0100</date><id>52e3abbc96b47192b0d0076a03136dc9e4cd2041</id><msg>Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces</msg><path><editType>add</editType><file>reference/sql/backup-view.cjs</file></path><path><editType>add</editType><file>reference/sql/apply-view.cjs</file></path><path><editType>add</editType><file>reference/sql/restore-view.cjs</file></path><path><editType>add</editType><file>reference/sql/backups/v_orders_summary.20261027-210422.sql</file></path><path><editType>add</editType><file>reference/sql/v_orders_summary.sql</file></path><path><editType>edit</editType><file>server/api/orders/sales/stream.get.ts</file></path><path><editType>add</editType><file>reference/sql/_db.cjs</file></path><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path><path><editType>edit</editType><file>reference/README.md</file></path><path><editType>add</editType><file>reference/sql/v_orders_summary.rollback.sql</file></path><path><editType>edit</editType><file>.claude/rules/sales/orders-grid.md</file></path><path><editType>add</editType><file>server/utils/orders/summaryQuery.ts</file></path><path><editType>edit</editType><file>server/api/orders/ag-grid/summary.post.ts</file></path><path><editType>add</editType><file>server/api/orders/ag-grid/summary-totals.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/composables/useCustomsTaxNote.ts</affectedPath><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/components/sales/CustomsTaxNoteFields.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>7fb15e7a47701993350ea564bb4661290393654b</commitId><timestamp>1793187043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Orders: manual customs (CN23) tax note on the order popup and the order edit form

- "Zoll (CN23): Steuer bereits abgeführt (IOSS/OSS)" block (paid via / amount / currency / scheme / code) writes the
  same sentence the eBay import writes as the FIRST line of C_Order.Description —
  "Tax of {amount} {currency} has been paid via {paidVia} ({scheme}) with Code: {code}" — which the DHL customs
  routes forward as CN23 exportDescription; other Description text is kept below it
- composables/useCustomsTaxNote.ts (build/parse/apply, tolerant to codes with spaces and the " | ** Voided" suffix)
  + components/sales/CustomsTaxNoteFields.vue (floating-label layout, preview with 80-char counter)
- shown only for DHL-Paket shippers (isCustomsTaxNoteShipper — single place to extend for DPD); popup strips the
  note when the shipper leaves DHL, edit form hides without touching the Description; editable on completed orders
- quick-add.post.ts now sends description; DHL customs routes collapse whitespace before the 80-char cut
- translations en/de/es/ne, recipe in .claude/rules/fulfillment/commissioning.md
</comment><date>2026-10-28 12:30:43 +0100</date><id>7fb15e7a47701993350ea564bb4661290393654b</id><msg>Orders: manual customs (CN23) tax note on the order popup and the order edit form</msg><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>add</editType><file>app/composables/useCustomsTaxNote.ts</file></path><path><editType>add</editType><file>app/components/sales/CustomsTaxNoteFields.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>.gitignore</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c73bfd66b65d8d789541d831ef337c8ee84fbf20</commitId><timestamp>1793187043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: editable article name + description for the monthly fee line in the quote PDF

- pricing.monthlyFeeLabel (default "Start") and pricing.monthlyFeeNote (default "Der komplette Fulfillment-Kern
  für Ihren Einstieg.") — two text inputs next to the €/M. field in QuoteModal.vue
- quotePdf.ts prints them in the "Monatliche Kosten" row; empty label falls back to "Servicepauschale", legacy
  offers without the keys keep the old "inkl. …" subtext, an explicitly emptied note prints nothing
- applySavedQuoteConditions keeps both strings verbatim (fillNonEmpty would re-apply the default)
- translations en/de/es, recipe note in .claude/rules/offers/pdf-generation.md
</comment><date>2026-10-28 12:30:43 +0100</date><id>c73bfd66b65d8d789541d831ef337c8ee84fbf20</id><msg>Offers: editable article name + description for the monthly fee line in the quote PDF</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>nuxt.config.ts</affectedPath><commitId>5e95cb27bf54fe21ea4b340b17ab76d813217af4</commitId><timestamp>1793188905000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)

Left external, the amcharts "exporting" plugin's bare `import 'tslib'` survived into .output, Nitro's tracer
copied only tslib.js / tslib.es6.mjs, and Node resolved the ESM import to the missing modules/index.js
(package exports "import" → "node"): "Cannot find module …/node_modules/tslib/modules/index.js" on every
SSR render of the page, while client-side navigation worked. nitro.externals.inline: ['tslib'] bundles it;
verified by importing the built chunk in Node. vite.ssr.noExternal has no effect on this builder.
Recipe note incl. the custom-buildDir gotcha (Nitro esbuild "symbol R already declared").
</comment><date>2026-10-28 13:01:45 +0100</date><id>5e95cb27bf54fe21ea4b340b17ab76d813217af4</id><msg>Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)</msg><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><commitId>da5f7325bc63f0e5483258ac03f79b29d83a1424</commitId><timestamp>1793191954000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: monthly fee €/M. + article name on one row, description as a larger textarea below
</comment><date>2026-10-28 13:52:34 +0100</date><id>da5f7325bc63f0e5483258ac03f79b29d83a1424</id><msg>Offers: monthly fee €/M. + article name on one row, description as a larger textarea below</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>f6a5ec04ead3d57d656e01ca2e89626a12576f25</commitId><timestamp>1793192061000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type

The hero "Angebot" button reopened the last-used offer type (per-lead localStorage) and the second button
flipped its meaning accordingly, so "Angebot" opened the LogShip Cloud offer once that had been used on the
lead. Each button now names its type and always opens exactly that modal; the in-modal type switch stays.
</comment><date>2026-10-28 13:54:21 +0100</date><id>f6a5ec04ead3d57d656e01ca2e89626a12576f25</id><msg>Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/agbDefault.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerAttachments.ts</affectedPath><affectedPath>server/utils/offers/flyerTexts.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><commitId>306bcb3fa81860440fb70ee4af5514c8e6b10e7d</commitId><timestamp>1793193280000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses

Contract (contractTexts DE+EN, contractPdf):
- term: contract starts with signature, operational start = first goods receipt, integration/setup free,
  running fees only from the operational start (was: integration could start billing while pricing said
  "no costs until first goods receipt")
- pricing: "Basispreis pro Versandauftrag", shipment counts at status "versendet", explicit pick inclusion
  ({pickInclusion} = quote.pricing.qtyPickfree) and a definition of "Pick" (base unit or packaging unit with
  own barcode), NEW "Wareneingang" item driven by the offer ({inboundPricing} = quote.inbound.mode:
  included / hourly / custom) with the included scope and the on-request count check, returns scope
  defined once (SLA item now refers to it; blocked stock + photos, customer decides refunds),
  carrier tariff pass-through, no packaging costs for pre-packed goods, nominal storage dimensions,
  service fee named like the offer, annex 1 validity note
- NEW clause "Barcodes &amp; Artikelkennzeichnung": scannable code per sales unit, relabelling by time +
  material, no liability / no 13.6 tolerance when the customer waives relabelling
- {noticeAgbNote} whenever noticeMonths differs from the AGB's 3-month fallback
- ContractModal: "Angebot vom (Anlage 1)" mirrors the attached offer's date, select "Wareneingang (lt. Angebot)"
- Annex 1: a newer saved quote wins over a stale sent PDF; regenerated offer keeps cut-off + validity

Offer PDF (quotePdf DE+EN): base price per Versandauftrag with "Picks nicht enthalten / inkl. n Picks",
pick definition footnote, goods receipt = Packstückkontrolle (count per SKU on request), returns scope
subtext, storage nominal dimensions, packaging only by consumption; flyer + modal hint aligned.

AGB seed (agbDefault.ts): Pick / Versandauftrag definitions, B2C limit 31,5 kg + Sperrgut, barcode rule +
pallet 120×80×150 = offer pallet space, shrinkage only in 13.6, returns scope, payment = contract, notice
period follows the contract. Recipe section "Offer ↔ contract ↔ AGB consistency".
</comment><date>2026-10-28 14:14:40 +0100</date><id>306bcb3fa81860440fb70ee4af5514c8e6b10e7d</id><msg>Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>server/utils/offers/flyerTexts.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerAttachments.ts</file></path><path><editType>edit</editType><file>server/utils/offers/agbDefault.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/plugins/ticket-auto-close.ts</affectedPath><affectedPath>server/utils/pushNotifier.ts</affectedPath><affectedPath>app/pages/mobile/digital-picking.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>app/pages/mobile/fix-locator-owner.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>server/api/requests/requests/[id]/push-task-status.post.ts</affectedPath><affectedPath>app/components/mobile/StepGuide.vue</affectedPath><affectedPath>app/components/fulfillment/DigitalPicklist.vue</affectedPath><affectedPath>app/components/rmas/ReturnLabelPrinterPicker.vue</affectedPath><affectedPath>app/components/mobile/Header.vue</affectedPath><affectedPath>reference/scanner.png</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/action-notification.post.ts</affectedPath><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/api/requests/requests/auto-close.post.ts</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/notifications/stream.get.ts</affectedPath><affectedPath>app/pages/mobile/commission.vue</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>reference/Monkatech x Hive - 20240701 - Vertrag.pdf</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>app/pages/mobile/locator-articles.vue</affectedPath><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>server/utils/orgRoleAccessCache.ts</affectedPath><affectedPath>app/assets/css/mobile-theme.css</affectedPath><affectedPath>app/pages/mobile/print-labels.vue</affectedPath><affectedPath>server/utils/ticketAutoClose.ts</affectedPath><affectedPath>app/pages/mobile/locator-labels.vue</affectedPath><affectedPath>server/utils/notificationBus.ts</affectedPath><commitId>72dc026b8156bfcc49bc672a524bd52b114bef9b</commitId><timestamp>1793193798000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery

- app/components/mobile/Header.vue + StepGuide.vue: every /mobile/* page now starts with a sticky Nuxt UI
  header and a Zebra-style pictogram step guide driven by one `stepGuide` computed per page (commission,
  digital-picking, fix-locator-owner, generate-shipments, inventory, locator-articles/-labels, movement,
  picklist, print-labels, product, receive, reconditioning, return, tasks); shared DigitalPicklist overlay
  gets the compact `.dp-guide` variant; mobile-theme.css + ReturnLabelPrinterPicker adjusted
- android: versionCode 73 / 1.0.72 ("Enhance Styling and new Icon Explanation")
- server/utils/ticketAutoClose.ts + plugins/ticket-auto-close.ts + requests/[id]/auto-close.post.ts:
  merchant-action tickets idle for TICKET_AUTOCLOSE_DAYS (10) are completed with an [Auto-Close] note and
  a merchant mail (6 h timer on PM2 instance 0, off on nuxt dev, dry-run endpoint for staff)
- notifications: action-notification / push-task-status pass the acting user; stream.get.ts and
  pushNotifier skip the actor; orgRoleAccessCache fix for roles with org 0; notificationBus tweaks
- recipes: mobile/capacitor-app-build.md (page skeleton), requests/tickets.md (auto-close, who gets
  toast/push/mail); reference: Hive contract PDF (template ancestor), scanner.png
</comment><date>2026-10-28 14:23:18 +0100</date><id>72dc026b8156bfcc49bc672a524bd52b114bef9b</id><msg>Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery</msg><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>add</editType><file>reference/Monkatech x Hive - 20240701 - Vertrag.pdf</file></path><path><editType>edit</editType><file>server/utils/notificationBus.ts</file></path><path><editType>edit</editType><file>.claude/rules/requests/tickets.md</file></path><path><editType>edit</editType><file>app/components/fulfillment/DigitalPicklist.vue</file></path><path><editType>edit</editType><file>app/assets/css/mobile-theme.css</file></path><path><editType>add</editType><file>reference/scanner.png</file></path><path><editType>add</editType><file>app/components/mobile/Header.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</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>app/pages/mobile/inventory.vue</file></path><path><editType>edit</editType><file>app/components/rmas/ReturnLabelPrinterPicker.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/commission.vue</file></path><path><editType>add</editType><file>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/action-notification.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>add</editType><file>server/utils/ticketAutoClose.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/locator-labels.vue</file></path><path><editType>add</editType><file>server/plugins/ticket-auto-close.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/fix-locator-owner.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>app/pages/mobile/locator-articles.vue</file></path><path><editType>add</editType><file>app/components/mobile/StepGuide.vue</file></path><path><editType>edit</editType><file>server/utils/orgRoleAccessCache.ts</file></path><path><editType>edit</editType><file>server/utils/pushNotifier.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/digital-picking.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/print-labels.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/push-task-status.post.ts</file></path><path><editType>edit</editType><file>server/api/notifications/stream.get.ts</file></path><path><editType>add</editType><file>server/api/requests/requests/auto-close.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/utils/productDimensions.ts</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/pages/materials/storage-usage.vue</affectedPath><affectedPath>server/api/materials/storage-usage/dimension-check.get.ts</affectedPath><affectedPath>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>.claude/rules/materials/product-dimensions-storage-volume.md</affectedPath><commitId>ba7235d029e64c3409f637f0baaea71c239ae7c5</commitId><timestamp>1793199331000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card

Storage rent (m³) is billed from L×W×H×stock; cm/m entries were billed 1 000× too little (wonderhome 2026-10).
analyzeDimensions() is the single check used by ProductForm, the products grid (highlighted cells + warning
toast with a convert action after an inline edit) and the new dimension-check route/card on /materials/storage-usage.
</comment><date>2026-10-28 15:55:31 +0100</date><id>ba7235d029e64c3409f637f0baaea71c239ae7c5</id><msg>Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card</msg><path><editType>delete</editType><file>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path><path><editType>add</editType><file>.claude/rules/materials/product-dimensions-storage-volume.md</file></path><path><editType>edit</editType><file>app/pages/materials/storage-usage.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>add</editType><file>app/utils/productDimensions.ts</file></path><path><editType>add</editType><file>server/api/materials/storage-usage/dimension-check.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>add</editType><file>reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><commitId>5393f1afd6314b3afb837a46594b99cd9c0161a8</commitId><timestamp>1793199359000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products: label weight fields as kg (same unit policy as the mm dimensions)
</comment><date>2026-10-28 15:55:59 +0100</date><id>5393f1afd6314b3afb837a46594b99cd9c0161a8</id><msg>Products: label weight fields as kg (same unit policy as the mm dimensions)</msg><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/composables/useOfferVisuals.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>server/api/leads/[id]/visuals.put.ts</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><commitId>94dc5392a4ff32103efafda16511c83bb057a74d</commitId><timestamp>1793199846000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer

Lead hero: upload/replace/remove logo, capture the website screenshot; quote modals (fulfillment + LogShip
Cloud) take both from the prefill, persist what they capture/upload on the lead and show 'am Lead gespeichert'.
</comment><date>2026-10-28 16:04:06 +0100</date><id>94dc5392a4ff32103efafda16511c83bb057a74d</id><msg>Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/visuals.put.ts</file></path><path><editType>add</editType><file>app/composables/useOfferVisuals.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>app/components/settings/CarrierRateImportModal.vue</affectedPath><affectedPath>app/utils/shippingCountryMap.ts</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf</affectedPath><affectedPath>app/components/settings/ShippingRateFilterBar.vue</affectedPath><affectedPath>server/api/settings/carrier-rates/[id].get.ts</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx</affectedPath><affectedPath>app/pages/settings/commission-tables/index.vue</affectedPath><affectedPath>server/api/settings/price-sheet/resolve.post.ts</affectedPath><affectedPath>app/composables/useShippingRateFilter.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/fixtures.get.ts</affectedPath><affectedPath>app/pages/settings/carrier-rates/[id]/edit.vue</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>server/api/settings/price-sheet/pdf.post.ts</affectedPath><affectedPath>app/components/settings/CarrierRateAction.vue</affectedPath><affectedPath>server/assets/shipping/dhl-contract-2025-07.json</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><affectedPath>server/api/settings/carrier-rates/import.post.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/update.put.ts</affectedPath><affectedPath>server/utils/shipping/priceSheetTexts.ts</affectedPath><affectedPath>server/api/settings/price-sheet/row-persist.post.ts</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>reference/test-scripts/price-sheet-pdf-smoke.mts</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>server/api/settings/carrier-rates/index.get.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/destroy.delete.ts</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetCellEditor.vue</affectedPath><affectedPath>app/components/settings/CarrierRateForm.vue</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf</affectedPath><affectedPath>app/pages/settings/carrier-rates/index.vue</affectedPath><affectedPath>server/utils/shipping/priceSheet.ts</affectedPath><affectedPath>app/pages/settings/shipping-cost-overrides/index.vue</affectedPath><affectedPath>server/utils/shipping/carrierRates.ts</affectedPath><affectedPath>app/pages/settings/shipping-costs/index.vue</affectedPath><affectedPath>app/pages/settings/carrier-rates/create.vue</affectedPath><affectedPath>server/utils/shipping/withIdempiere.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/store.post.ts</affectedPath><affectedPath>reference/test-scripts/dhl-contract-parse.mts</affectedPath><affectedPath>server/utils/shipping/carrierRateImport.ts</affectedPath><affectedPath>server/api/settings/price-sheet/cell.post.ts</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf</affectedPath><commitId>bfd587797b626ffcb8189cafc41d8f773094976b</commitId><timestamp>1793201047000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar
</comment><date>2026-10-28 16:24:07 +0100</date><id>bfd587797b626ffcb8189cafc41d8f773094976b</id><msg>Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar</msg><path><editType>add</editType><file>server/utils/shipping/priceSheet.ts</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/index.get.ts</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</file></path><path><editType>add</editType><file>reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx</file></path><path><editType>add</editType><file>app/components/settings/ShippingRateFilterBar.vue</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>add</editType><file>app/composables/useShippingRateFilter.ts</file></path><path><editType>add</editType><file>server/utils/shipping/withIdempiere.ts</file></path><path><editType>add</editType><file>reference/test-scripts/dhl-contract-parse.mts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/import.post.ts</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/pdf.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/fixtures.get.ts</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf</file></path><path><editType>add</editType><file>server/utils/shipping/carrierRateImport.ts</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/index.vue</file></path><path><editType>edit</editType><file>app/pages/settings/shipping-costs/index.vue</file></path><path><editType>add</editType><file>app/utils/shippingCountryMap.ts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/store.post.ts</file></path><path><editType>add</editType><file>server/utils/shipping/carrierRates.ts</file></path><path><editType>add</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetCellEditor.vue</file></path><path><editType>add</editType><file>reference/test-scripts/price-sheet-pdf-smoke.mts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/[id].get.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>add</editType><file>server/assets/shipping/dhl-contract-2025-07.json</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateImportModal.vue</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/cell.post.ts</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/create.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/update.put.ts</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/resolve.post.ts</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateForm.vue</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>add</editType><file>server/utils/shipping/priceSheetTexts.ts</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/index.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/destroy.delete.ts</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateAction.vue</file></path><path><editType>add</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf</file></path><path><editType>edit</editType><file>app/pages/settings/shipping-cost-overrides/index.vue</file></path><path><editType>add</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/row-persist.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>server/api/materials/products/[id]/capture-image.post.ts</affectedPath><affectedPath>app/pages/materials/storage-usage.vue</affectedPath><commitId>ee4a8f43944460d843d740f23a266aa194d1c73c</commitId><timestamp>1793201047000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time
</comment><date>2026-10-28 16:24:07 +0100</date><id>ee4a8f43944460d843d740f23a266aa194d1c73c</id><msg>Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/capture-image.post.ts</file></path><path><editType>edit</editType><file>app/pages/materials/storage-usage.vue</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>88cc51e42c41b52b0ef6a2a50044bf3e47e00da5</commitId><timestamp>1793201845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.73 (versionCode 74): photo capture on the product page
</comment><date>2026-10-28 16:37:25 +0100</date><id>88cc51e42c41b52b0ef6a2a50044bf3e47e00da5</id><msg>Android app 1.0.73 (versionCode 74): photo capture on the product page</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8</commitId><timestamp>1793202371000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons
</comment><date>2026-10-28 16:46:11 +0100</date><id>a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8</id><msg>Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>f507276e33a2a2b4e602c4f169152302ee3a632a</commitId><timestamp>1793203151000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper
</comment><date>2026-10-28 16:59:11 +0100</date><id>f507276e33a2a2b4e602c4f169152302ee3a632a</id><msg>Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>516568ccc124baa6cb47f97aa42e11df10f8fc2c</commitId><timestamp>1793203165000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app version bump (release script)
</comment><date>2026-10-28 16:59:25 +0100</date><id>516568ccc124baa6cb47f97aa42e11df10f8fc2c</id><msg>Android app version bump (release script)</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><commitId>6114d50ab9e4bbe374d82c3b520e6199a8208f1f</commitId><timestamp>1793204876000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)
</comment><date>2026-10-28 17:27:56 +0100</date><id>6114d50ab9e4bbe374d82c3b520e6199a8208f1f</id><msg>Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/shipping/flagImages.ts</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>reference/test-scripts/price-sheet-pdf-smoke.mts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><commitId>216f0bd0224bbc8f4b06813093be696bebd6e2fc</commitId><timestamp>1793210966000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows

public/flags SVGs bundled as Nitro server asset assets:flags, rasterised once per process with sharp
(flagImages.ts, 36 px PNG, 1 px border, fixed-width flag column so names align); smoke script mocks the
flags storage; recipe note in carrier-rates.md.
</comment><date>2026-10-28 19:09:26 +0100</date><id>216f0bd0224bbc8f4b06813093be696bebd6e2fc</id><msg>Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows</msg><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>add</editType><file>server/utils/shipping/flagImages.ts</file></path><path><editType>edit</editType><file>reference/test-scripts/price-sheet-pdf-smoke.mts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><commitId>15f8fe46047dba042a4911aa0b769540a9be9bcf</commitId><timestamp>1793211292000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images
</comment><date>2026-10-28 19:14:52 +0100</date><id>15f8fe46047dba042a4911aa0b769540a9be9bcf</id><msg>Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images</msg><path><editType>edit</editType><file>app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue</file></path><path><editType>edit</editType><file>app/components/MarketplaceIcon.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>server/utils/shipping/priceSheet.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><commitId>a5bd7fc3a443fb233b9f7fcadd66769573b13c53</commitId><timestamp>1793217290000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF
</comment><date>2026-10-28 20:54:50 +0100</date><id>a5bd7fc3a443fb233b9f7fcadd66769573b13c53</id><msg>Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF</msg><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheet.ts</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/vonroc/build-catalog.py</affectedPath><affectedPath>reference/demo-instance/seed-orders-returns.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/masters.json</affectedPath><affectedPath>reference/demo-instance/vonroc/zero-open-order-stock.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/return-reasons.txt</affectedPath><affectedPath>reference/demo-instance/vonroc/topup-stock.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/catalog.json</affectedPath><affectedPath>reference/demo-instance/README.md</affectedPath><commitId>e1c8a33447062451463ed92771ea36c16c30cf2c</commitId><timestamp>1793217290000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README
</comment><date>2026-10-28 20:54:50 +0100</date><id>e1c8a33447062451463ed92771ea36c16c30cf2c</id><msg>Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README</msg><path><editType>add</editType><file>reference/demo-instance/vonroc/build-catalog.py</file></path><path><editType>edit</editType><file>reference/demo-instance/seed-orders-returns.sh</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/return-reasons.txt</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/zero-open-order-stock.sh</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/catalog.json</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/masters.json</file></path><path><editType>edit</editType><file>reference/demo-instance/README.md</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/topup-stock.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/agbDefault.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><commitId>e9d5d032dbf89df1468a6065886429bd8bda05b4</commitId><timestamp>1793217648000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned)
</comment><date>2026-10-28 21:00:48 +0100</date><id>e9d5d032dbf89df1468a6065886429bd8bda05b4</id><msg>Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned)</msg><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>server/utils/offers/agbDefault.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>36ef84187503ca39d09327215d4b104159004f63</commitId><timestamp>1793218775000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start
</comment><date>2026-10-28 21:19:35 +0100</date><id>36ef84187503ca39d09327215d4b104159004f63</id><msg>Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start</msg><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><commitId>0472dd21e8a930038306cbc34c56bd760b9910b9</commitId><timestamp>1793218999000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling
</comment><date>2026-10-28 21:23:19 +0100</date><id>0472dd21e8a930038306cbc34c56bd760b9910b9</id><msg>Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><commitId>149ef56dcf85a8d99be10f4bd3104da5d9792ebf</commitId><timestamp>1793219270000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'
</comment><date>2026-10-28 21:27:50 +0100</date><id>149ef56dcf85a8d99be10f4bd3104da5d9792ebf</id><msg>Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>bd25164b7c24d06932995a04f1fff305d56fa18d</commitId><timestamp>1793219469000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight
</comment><date>2026-10-28 21:31:09 +0100</date><id>bd25164b7c24d06932995a04f1fff305d56fa18d</id><msg>Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight</msg><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><commitId>6ab80acd4a821be044b75056685275663a51b831</commitId><timestamp>1793219638000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below
</comment><date>2026-10-28 21:33:58 +0100</date><id>6ab80acd4a821be044b75056685275663a51b831</id><msg>Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below</msg><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>133b0c683d401045311c049876d4218a418398cf</commitId><timestamp>1793219769000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)
</comment><date>2026-10-28 21:36:09 +0100</date><id>133b0c683d401045311c049876d4218a418398cf</id><msg>Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>f8511bdf3ea0936dda5be78c565f74da1a31bd1c</commitId><timestamp>1793220247000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger
</comment><date>2026-10-28 21:44:07 +0100</date><id>f8511bdf3ea0936dda5be78c565f74da1a31bd1c</id><msg>Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>72d31977548a17161c0350bef51f8c59487ce9ca</commitId><timestamp>1793220263000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: narrower buttons (tighter padding, smaller font)
</comment><date>2026-10-28 21:44:23 +0100</date><id>72d31977548a17161c0350bef51f8c59487ce9ca</id><msg>Lead page offer group: narrower buttons (tighter padding, smaller font)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>5641d417aaf99cd8d9ccc47a2611055544ba49c5</commitId><timestamp>1793220322000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)
</comment><date>2026-10-28 21:45:22 +0100</date><id>5641d417aaf99cd8d9ccc47a2611055544ba49c5</id><msg>Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>7554b436e68e1b7a580814ed8efbbf56612eab8c</commitId><timestamp>1793220345000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width
</comment><date>2026-10-28 21:45:45 +0100</date><id>7554b436e68e1b7a580814ed8efbbf56612eab8c</id><msg>Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78</commitId><timestamp>1793220385000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group
</comment><date>2026-10-28 21:46:25 +0100</date><id>bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78</id><msg>Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>85d1c963b6992c503910a04fee161e1c25070db4</commitId><timestamp>1793220417000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height
</comment><date>2026-10-28 21:46:57 +0100</date><id>85d1c963b6992c503910a04fee161e1c25070db4</id><msg>Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>220e6c3bb9740e9d1f142a9a9654c937fba6a0ca</commitId><timestamp>1793220447000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above
</comment><date>2026-10-28 21:47:27 +0100</date><id>220e6c3bb9740e9d1f142a9a9654c937fba6a0ca</id><msg>Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>fcb4ba6d7801d359d7f1993e109d7df3bb05d367</commitId><timestamp>1793220475000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline
</comment><date>2026-10-28 21:47:55 +0100</date><id>fcb4ba6d7801d359d7f1993e109d7df3bb05d367</id><msg>Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>61b2a9fa700dd32b7fe2e145948060e4a6dc335b</commitId><timestamp>1793220508000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.75 (versionCode 76): release-script version bump
</comment><date>2026-10-28 21:48:28 +0100</date><id>61b2a9fa700dd32b7fe2e145948060e4a6dc335b</id><msg>Android app 1.0.75 (versionCode 76): release-script version bump</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>fda427288fed8d5a34d1c745e37c23ca041c9a3d</commitId><timestamp>1793221515000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)
</comment><date>2026-10-28 22:05:15 +0100</date><id>fda427288fed8d5a34d1c745e37c23ca041c9a3d</id><msg>Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)</msg><path><editType>edit</editType><file>app/pages/mobile/product.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>