{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.TimerTrigger$TimerTriggerCause",
          "shortDescription" : "Started by timer"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 782,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
            "branch" : [
              {
                "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
            "branch" : [
              {
                "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
        "branch" : [
          {
            "SHA1" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
            "name" : "refs/remotes/origin/dev"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/younex1/erp-nuxt-frontend.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#782",
  "duration" : 67059,
  "estimatedDuration" : 61562,
  "executor" : None,
  "fullDisplayName" : "build-logship-frontend #782",
  "id" : "782",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 782,
  "queueId" : 5920,
  "result" : "SUCCESS",
  "timestamp" : 1793235600194,
  "url" : "https://jenkins.younex.de/job/build-logship-frontend/782/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/composables/useShippingPerformancePdf.ts",
          "app/pages/bi/shipping-performance.vue",
          ".claude/rules/bi/shipping-performance.md"
        ],
        "commitId" : "17347f6d0640c6ce40944d6afe25d4a7e94090d4",
        "timestamp" : 1793176195000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)\u000a",
        "date" : "2026-10-28 09:29:55 +0100",
        "id" : "17347f6d0640c6ce40944d6afe25d4a7e94090d4",
        "msg" : "BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/composables/useShippingPerformancePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/bi/shipping-performance.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/bi/shipping-performance.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/admin/users/leads/latest.get.ts",
          "app/pages/users/users/[id]/edit.vue",
          "server/api/admin/users/store.post.ts",
          ".claude/rules/leads/ai-assessment.md",
          ".claude/rules/nuxt/ui-components.md",
          "server/api/admin/users/update.put.ts",
          "app/pages/users/users/create.vue",
          "app/components/admin/UserForm.vue",
          "app/components/leads/MailComposeModal.vue",
          "app/components/leads/ChatConsoleModal.vue",
          "server/utils/trimCookieData.ts",
          ".claude/rules/idempiere/write-casing-and-flags.md",
          "app/pages/users/leads/create.vue",
          "app/pages/users/leads/[id]/edit.vue",
          "server/utils/mail/staffMail.ts"
        ],
        "commitId" : "62585d99e20d86d93cbcc6116a61055f63e7793d",
        "timestamp" : 1793177401000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads + users: KI-Konsole readable bubbles and \"Als E-Mail senden\" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes\u000a\u000a- KI-Konsole: explicit bubble text colours (global `*` colour rule made the user bubble unreadable); new\u000a  \"Als E-Mail senden\" on assistant turns extracts subject/body and opens the lead mail composer on top,\u000a  pre-filled and editable (composer `draft` prop, templateKey 'ai-chat', signature/footer as usual)\u000a- AD_User.FullName: used for the staff mail signature (fallback Name), carried in the logship_user cookie,\u000a  written by store/update (update only when the key is sent), field on /create/user and /edit/user-:id\u000a- User pages rebuilt on Nuxt UI (hero with avatar/badges, UTabs, card groups, USwitch with track fix);\u000a  edit page now reads/writes IsAddMailTextAutomatically correctly\u000a- Dashboard \"Neueste Leads\": expired leads (LeadStatus E) no longer listed\u000a- /create/lead: company name, website and AiScore were dropped on the initial save (client + store route)\u000a- Recipes: console hand-off, REST cache reset for new columns, USwitch gap\u000a",
        "date" : "2026-10-28 09:50:01 +0100",
        "id" : "62585d99e20d86d93cbcc6116a61055f63e7793d",
        "msg" : "Leads + users: KI-Konsole readable bubbles and \"Als E-Mail senden\" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/idempiere/write-casing-and-flags.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/leads/MailComposeModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/mail/staffMail.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/leads/ChatConsoleModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/users/create.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/create.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/users/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/leads/ai-assessment.md"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/ui-components.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/admin/users/update.put.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/admin/users/leads/latest.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/trimCookieData.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/admin/UserForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/admin/users/store.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/admin/UserForm.vue",
          "app/pages/users/users/[id]/edit.vue",
          "public/css/styles.css",
          "app/pages/users/users/create.vue",
          ".claude/rules/nuxt/nuxt4-conventions.md"
        ],
        "commitId" : "bdb551d64cbbacbf95b0663f213ecd7d9ed711ed",
        "timestamp" : 1793179770000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide\u000a\u000aThe universal `* { color: var(--theme-text-primary) }` in public/css/styles.css painted every element\u000awithout its own colour dark, so text inside navy hero cards, chat bubbles and dark badges was unreadable.\u000aColour now cascades from html/body; form controls keep the explicit theme colour, buttons inherit.\u000aUser page: ext. badge and card titles get explicit colours (Bulma strong colour on dark cards).\u000a",
        "date" : "2026-10-28 10:29:30 +0100",
        "id" : "bdb551d64cbbacbf95b0663f213ecd7d9ed711ed",
        "msg" : "Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/users/create.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/nuxt4-conventions.md"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/users/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "public/css/styles.css"
          },
          {
            "editType" : "edit",
            "file" : "app/components/admin/UserForm.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/orders/summaryQuery.ts",
          "server/api/orders/ag-grid/summary.post.ts",
          ".claude/rules/sales/orders-grid.md",
          "app/pages/sales/orders/index.vue",
          "app/components/AgGridServer.vue",
          "reference/sql/backup-view.cjs",
          "server/api/orders/ag-grid/summary-totals.post.ts",
          "server/api/orders/sales/stream.get.ts",
          "reference/sql/backups/v_orders_summary.20261027-210422.sql",
          "reference/sql/_db.cjs",
          "reference/sql/restore-view.cjs",
          "reference/sql/apply-view.cjs",
          "reference/sql/v_orders_summary.rollback.sql",
          "reference/sql/v_orders_summary.sql",
          "reference/README.md"
        ],
        "commitId" : "52e3abbc96b47192b0d0076a03136dc9e4cd2041",
        "timestamp" : 1793186468000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces\u000a\u000a- v_orders_summary rewritten as LEFT JOIN LATERAL (applied on prod 2026-10-27); DDL now versioned in\u000a  reference/sql with backup/apply/restore scripts (node + pg, .env PG_* keys, PG tunnel on dev)\u000a- summary.post.ts: step 1 ids-only page (cheap deep $skip), step 2 rows by id in step-1 order; shared query\u000a  builder server/utils/orders/summaryQuery.ts; single-flight per identical block, no row cache\u000a- totals moved to orders/ag-grid/summary-totals.post.ts (60 s cache + single-flight), page calls it debounced\u000a  on grid ready / switch / column filter / card reload; blocks never wait for it\u000a- AgGridServer: cacheBlockSize / maxBlocksInCache props + filterChanged emit (orders page uses 100/20)\u000a- SSE stream seeds globalLastOrderId from the newest order on a fresh process (no replay of old orders\u000a  + push notifications after a PM2 restart)\u000a- fix: external reference links for Shopware, Shopify, Amazon and JTL were dead on the list — $select on the\u000a  view only carried plentyone_order_id; all marketplace id columns AgMarketplaceLink.vue uses are selected now\u000a",
        "date" : "2026-10-28 12:21:08 +0100",
        "id" : "52e3abbc96b47192b0d0076a03136dc9e4cd2041",
        "msg" : "Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "reference/README.md"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/apply-view.cjs"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/v_orders_summary.sql"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/backup-view.cjs"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/sales/stream.get.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/_db.cjs"
          },
          {
            "editType" : "add",
            "file" : "server/api/orders/ag-grid/summary-totals.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/ag-grid/summary.post.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/backups/v_orders_summary.20261027-210422.sql"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/orders/index.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/restore-view.cjs"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/sales/orders-grid.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/AgGridServer.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/sql/v_orders_summary.rollback.sql"
          },
          {
            "editType" : "add",
            "file" : "server/utils/orders/summaryQuery.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/sales/OrderForm.vue",
          "app/composables/useCustomsTaxNote.ts",
          "app/components/OrderQuickAddModal.vue",
          "server/api/commission/parcels/dhl/multi.post.ts",
          ".claude/rules/fulfillment/commissioning.md",
          "server/api/commission/parcels/dhl/index.post.ts",
          "app/components/partners/PartnerQuickForm.vue",
          ".gitignore",
          "app/components/sales/CustomsTaxNoteFields.vue",
          "app/assets/langs/shared.js",
          "server/api/partners/partners/quick-add.post.ts"
        ],
        "commitId" : "7fb15e7a47701993350ea564bb4661290393654b",
        "timestamp" : 1793187043000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Orders: manual customs (CN23) tax note on the order popup and the order edit form\u000a\u000a- \"Zoll (CN23): Steuer bereits abgeführt (IOSS/OSS)\" block (paid via / amount / currency / scheme / code) writes the\u000a  same sentence the eBay import writes as the FIRST line of C_Order.Description —\u000a  \"Tax of {amount} {currency} has been paid via {paidVia} ({scheme}) with Code: {code}\" — which the DHL customs\u000a  routes forward as CN23 exportDescription; other Description text is kept below it\u000a- composables/useCustomsTaxNote.ts (build/parse/apply, tolerant to codes with spaces and the \" | ** Voided\" suffix)\u000a  + components/sales/CustomsTaxNoteFields.vue (floating-label layout, preview with 80-char counter)\u000a- shown only for DHL-Paket shippers (isCustomsTaxNoteShipper — single place to extend for DPD); popup strips the\u000a  note when the shipper leaves DHL, edit form hides without touching the Description; editable on completed orders\u000a- quick-add.post.ts now sends description; DHL customs routes collapse whitespace before the 80-char cut\u000a- translations en/de/es/ne, recipe in .claude/rules/fulfillment/commissioning.md\u000a",
        "date" : "2026-10-28 12:30:43 +0100",
        "id" : "7fb15e7a47701993350ea564bb4661290393654b",
        "msg" : "Orders: manual customs (CN23) tax note on the order popup and the order edit form",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/fulfillment/commissioning.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/partners/PartnerQuickForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/OrderForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/api/partners/partners/quick-add.post.ts"
          },
          {
            "editType" : "edit",
            "file" : ".gitignore"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useCustomsTaxNote.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/CustomsTaxNoteFields.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/OrderQuickAddModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/dhl/index.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/dhl/multi.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/offers/pdf-generation.md",
          "server/utils/offers/quotePdf.ts",
          "app/components/offers/QuoteModal.vue",
          "app/assets/langs/shared.js",
          "app/composables/useOfferQuote.ts"
        ],
        "commitId" : "c73bfd66b65d8d789541d831ef337c8ee84fbf20",
        "timestamp" : 1793187043000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Offers: editable article name + description for the monthly fee line in the quote PDF\u000a\u000a- pricing.monthlyFeeLabel (default \"Start\") and pricing.monthlyFeeNote (default \"Der komplette Fulfillment-Kern\u000a  für Ihren Einstieg.\") — two text inputs next to the €/M. field in QuoteModal.vue\u000a- quotePdf.ts prints them in the \"Monatliche Kosten\" row; empty label falls back to \"Servicepauschale\", legacy\u000a  offers without the keys keep the old \"inkl. …\" subtext, an explicitly emptied note prints nothing\u000a- applySavedQuoteConditions keeps both strings verbatim (fillNonEmpty would re-apply the default)\u000a- translations en/de/es, recipe note in .claude/rules/offers/pdf-generation.md\u000a",
        "date" : "2026-10-28 12:30:43 +0100",
        "id" : "c73bfd66b65d8d789541d831ef337c8ee84fbf20",
        "msg" : "Offers: editable article name + description for the monthly fee line in the quote PDF",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/pdf-generation.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/nuxt/nuxt4-conventions.md",
          "nuxt.config.ts"
        ],
        "commitId" : "5e95cb27bf54fe21ea4b340b17ab76d813217af4",
        "timestamp" : 1793188905000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)\u000a\u000aLeft external, the amcharts \"exporting\" plugin's bare `import 'tslib'` survived into .output, Nitro's tracer\u000acopied only tslib.js / tslib.es6.mjs, and Node resolved the ESM import to the missing modules/index.js\u000a(package exports \"import\" → \"node\"): \"Cannot find module …/node_modules/tslib/modules/index.js\" on every\u000aSSR render of the page, while client-side navigation worked. nitro.externals.inline: ['tslib'] bundles it;\u000averified by importing the built chunk in Node. vite.ssr.noExternal has no effect on this builder.\u000aRecipe note incl. the custom-buildDir gotcha (Nitro esbuild \"symbol R already declared\").\u000a",
        "date" : "2026-10-28 13:01:45 +0100",
        "id" : "5e95cb27bf54fe21ea4b340b17ab76d813217af4",
        "msg" : "Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "nuxt.config.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/nuxt4-conventions.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/offers/QuoteModal.vue"
        ],
        "commitId" : "da5f7325bc63f0e5483258ac03f79b29d83a1424",
        "timestamp" : 1793191954000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Offers: monthly fee €/M. + article name on one row, description as a larger textarea below\u000a",
        "date" : "2026-10-28 13:52:34 +0100",
        "id" : "da5f7325bc63f0e5483258ac03f79b29d83a1424",
        "msg" : "Offers: monthly fee €/M. + article name on one row, description as a larger textarea below",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "f6a5ec04ead3d57d656e01ca2e89626a12576f25",
        "timestamp" : 1793192061000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type\u000a\u000aThe hero \"Angebot\" button reopened the last-used offer type (per-lead localStorage) and the second button\u000aflipped its meaning accordingly, so \"Angebot\" opened the LogShip Cloud offer once that had been used on the\u000alead. Each button now names its type and always opens exactly that modal; the in-modal type switch stays.\u000a",
        "date" : "2026-10-28 13:54:21 +0100",
        "id" : "f6a5ec04ead3d57d656e01ca2e89626a12576f25",
        "msg" : "Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/quotePdf.ts",
          "server/utils/offers/agbDefault.ts",
          "app/components/offers/QuoteModal.vue",
          "server/utils/offers/contractPdf.ts",
          "server/utils/offers/contractTexts.ts",
          "app/composables/useOfferQuote.ts",
          "app/components/offers/ContractModal.vue",
          "app/composables/useOfferContract.ts",
          "server/utils/offers/offerAttachments.ts",
          "server/utils/offers/flyerTexts.ts",
          ".claude/rules/offers/contract-and-quote-portals.md",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "306bcb3fa81860440fb70ee4af5514c8e6b10e7d",
        "timestamp" : 1793193280000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses\u000a\u000aContract (contractTexts DE+EN, contractPdf):\u000a- term: contract starts with signature, operational start = first goods receipt, integration/setup free,\u000a  running fees only from the operational start (was: integration could start billing while pricing said\u000a  \"no costs until first goods receipt\")\u000a- pricing: \"Basispreis pro Versandauftrag\", shipment counts at status \"versendet\", explicit pick inclusion\u000a  ({pickInclusion} = quote.pricing.qtyPickfree) and a definition of \"Pick\" (base unit or packaging unit with\u000a  own barcode), NEW \"Wareneingang\" item driven by the offer ({inboundPricing} = quote.inbound.mode:\u000a  included / hourly / custom) with the included scope and the on-request count check, returns scope\u000a  defined once (SLA item now refers to it; blocked stock + photos, customer decides refunds),\u000a  carrier tariff pass-through, no packaging costs for pre-packed goods, nominal storage dimensions,\u000a  service fee named like the offer, annex 1 validity note\u000a- NEW clause \"Barcodes & Artikelkennzeichnung\": scannable code per sales unit, relabelling by time +\u000a  material, no liability / no 13.6 tolerance when the customer waives relabelling\u000a- {noticeAgbNote} whenever noticeMonths differs from the AGB's 3-month fallback\u000a- ContractModal: \"Angebot vom (Anlage 1)\" mirrors the attached offer's date, select \"Wareneingang (lt. Angebot)\"\u000a- Annex 1: a newer saved quote wins over a stale sent PDF; regenerated offer keeps cut-off + validity\u000a\u000aOffer PDF (quotePdf DE+EN): base price per Versandauftrag with \"Picks nicht enthalten / inkl. n Picks\",\u000apick definition footnote, goods receipt = Packstückkontrolle (count per SKU on request), returns scope\u000asubtext, storage nominal dimensions, packaging only by consumption; flyer + modal hint aligned.\u000a\u000aAGB seed (agbDefault.ts): Pick / Versandauftrag definitions, B2C limit 31,5 kg + Sperrgut, barcode rule +\u000apallet 120×80×150 = offer pallet space, shrinkage only in 13.6, returns scope, payment = contract, notice\u000aperiod follows the contract. Recipe section \"Offer ↔ contract ↔ AGB consistency\".\u000a",
        "date" : "2026-10-28 14:14:40 +0100",
        "id" : "306bcb3fa81860440fb70ee4af5514c8e6b10e7d",
        "msg" : "Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/contract-and-quote-portals.md"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferContract.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/ContractModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractTexts.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/flyerTexts.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/agbDefault.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/offerAttachments.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/plugins/ticket-auto-close.ts",
          "server/utils/pushNotifier.ts",
          "app/pages/mobile/digital-picking.vue",
          "app/pages/mobile/tasks.vue",
          "reference/DPS_15222_04_Hive_Delivery_Prices.pdf",
          "app/pages/mobile/fix-locator-owner.vue",
          "app/pages/mobile/product.vue",
          "app/pages/mobile/return.vue",
          "app/pages/mobile/picklist.vue",
          "android/update-files/version.json",
          "server/api/requests/requests/[id]/push-task-status.post.ts",
          "app/components/mobile/StepGuide.vue",
          "app/components/fulfillment/DigitalPicklist.vue",
          "app/components/rmas/ReturnLabelPrinterPicker.vue",
          "app/components/mobile/Header.vue",
          "app/pages/mobile/movement.vue",
          "reference/scanner.png",
          "server/api/requests/requests/[id]/action-notification.post.ts",
          "app/pages/mobile/reconditioning.vue",
          "server/api/requests/requests/auto-close.post.ts",
          "app/pages/mobile/receive.vue",
          ".claude/rules/mobile/capacitor-app-build.md",
          "app/pages/mobile/generate-shipments.vue",
          "server/api/notifications/stream.get.ts",
          "app/pages/mobile/commission.vue",
          "android/app/build.gradle",
          "reference/Monkatech x Hive - 20240701 - Vertrag.pdf",
          "app/pages/mobile/inventory.vue",
          "app/pages/mobile/locator-articles.vue",
          ".claude/rules/requests/tickets.md",
          "server/utils/orgRoleAccessCache.ts",
          "app/pages/mobile/print-labels.vue",
          "app/assets/css/mobile-theme.css",
          "server/utils/ticketAutoClose.ts",
          "app/pages/mobile/locator-labels.vue",
          "server/utils/notificationBus.ts"
        ],
        "commitId" : "72dc026b8156bfcc49bc672a524bd52b114bef9b",
        "timestamp" : 1793193798000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery\u000a\u000a- app/components/mobile/Header.vue + StepGuide.vue: every /mobile/* page now starts with a sticky Nuxt UI\u000a  header and a Zebra-style pictogram step guide driven by one `stepGuide` computed per page (commission,\u000a  digital-picking, fix-locator-owner, generate-shipments, inventory, locator-articles/-labels, movement,\u000a  picklist, print-labels, product, receive, reconditioning, return, tasks); shared DigitalPicklist overlay\u000a  gets the compact `.dp-guide` variant; mobile-theme.css + ReturnLabelPrinterPicker adjusted\u000a- android: versionCode 73 / 1.0.72 (\"Enhance Styling and new Icon Explanation\")\u000a- server/utils/ticketAutoClose.ts + plugins/ticket-auto-close.ts + requests/[id]/auto-close.post.ts:\u000a  merchant-action tickets idle for TICKET_AUTOCLOSE_DAYS (10) are completed with an [Auto-Close] note and\u000a  a merchant mail (6 h timer on PM2 instance 0, off on nuxt dev, dry-run endpoint for staff)\u000a- notifications: action-notification / push-task-status pass the acting user; stream.get.ts and\u000a  pushNotifier skip the actor; orgRoleAccessCache fix for roles with org 0; notificationBus tweaks\u000a- recipes: mobile/capacitor-app-build.md (page skeleton), requests/tickets.md (auto-close, who gets\u000a  toast/push/mail); reference: Hive contract PDF (template ancestor), scanner.png\u000a",
        "date" : "2026-10-28 14:23:18 +0100",
        "id" : "72dc026b8156bfcc49bc672a524bd52b114bef9b",
        "msg" : "Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/inventory.vue"
          },
          {
            "editType" : "add",
            "file" : "server/plugins/ticket-auto-close.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/product.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/Monkatech x Hive - 20240701 - Vertrag.pdf"
          },
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          },
          {
            "editType" : "add",
            "file" : "server/api/requests/requests/auto-close.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/mobile/StepGuide.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/rmas/ReturnLabelPrinterPicker.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/locator-articles.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/picklist.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/DPS_15222_04_Hive_Delivery_Prices.pdf"
          },
          {
            "editType" : "edit",
            "file" : "server/api/requests/requests/[id]/push-task-status.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/fulfillment/DigitalPicklist.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/reconditioning.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/requests/requests/[id]/action-notification.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/return.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/receive.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/tasks.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/requests/tickets.md"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/print-labels.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/fix-locator-owner.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/mobile/Header.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/commission.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/generate-shipments.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/pushNotifier.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/movement.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/notificationBus.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/mobile/capacitor-app-build.md"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/css/mobile-theme.css"
          },
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          },
          {
            "editType" : "add",
            "file" : "server/utils/ticketAutoClose.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/digital-picking.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/locator-labels.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/scanner.png"
          },
          {
            "editType" : "edit",
            "file" : "server/api/notifications/stream.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/orgRoleAccessCache.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/materials/ProductForm.vue",
          "app/utils/productDimensions.ts",
          "app/pages/materials/products/index.vue",
          "server/api/materials/storage-usage/dimension-check.get.ts",
          "app/pages/materials/storage-usage.vue",
          "reference/DPS_15222_04_Hive_Delivery_Prices.pdf",
          "reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf",
          ".claude/rules/materials/product-dimensions-storage-volume.md"
        ],
        "commitId" : "ba7235d029e64c3409f637f0baaea71c239ae7c5",
        "timestamp" : 1793199331000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a\u000aStorage rent (m³) is billed from L×W×H×stock; cm/m entries were billed 1 000× too little (wonderhome 2026-10).\u000aanalyzeDimensions() is the single check used by ProductForm, the products grid (highlighted cells + warning\u000atoast with a convert action after an inline edit) and the new dimension-check route/card on /materials/storage-usage.\u000a",
        "date" : "2026-10-28 15:55:31 +0100",
        "id" : "ba7235d029e64c3409f637f0baaea71c239ae7c5",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/storage-usage/dimension-check.get.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/materials/product-dimensions-storage-volume.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/storage-usage.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf"
          },
          {
            "editType" : "add",
            "file" : "app/utils/productDimensions.ts"
          },
          {
            "editType" : "delete",
            "file" : "reference/DPS_15222_04_Hive_Delivery_Prices.pdf"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/materials/products/index.vue",
          "app/components/materials/ProductForm.vue"
        ],
        "commitId" : "5393f1afd6314b3afb837a46594b99cd9c0161a8",
        "timestamp" : 1793199359000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Products: label weight fields as kg (same unit policy as the mm dimensions)\u000a",
        "date" : "2026-10-28 15:55:59 +0100",
        "id" : "5393f1afd6314b3afb837a46594b99cd9c0161a8",
        "msg" : "Products: label weight fields as kg (same unit policy as the mm dimensions)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/materials/ProductForm.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/offers/QuoteModal.vue",
          "app/composables/useOfferQuote.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "app/composables/useOfferVisuals.ts",
          "app/pages/users/leads/[id]/edit.vue",
          "app/components/offers/SoftwareQuoteModal.vue",
          ".claude/rules/offers/contract-and-quote-portals.md",
          "server/api/leads/[id]/visuals.put.ts"
        ],
        "commitId" : "94dc5392a4ff32103efafda16511c83bb057a74d",
        "timestamp" : 1793199846000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer\u000a\u000aLead hero: upload/replace/remove logo, capture the website screenshot; quote modals (fulfillment + LogShip\u000aCloud) take both from the prefill, persist what they capture/upload on the lead and show 'am Lead gespeichert'.\u000a",
        "date" : "2026-10-28 16:04:06 +0100",
        "id" : "94dc5392a4ff32103efafda16511c83bb057a74d",
        "msg" : "Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/contract-and-quote-portals.md"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/leads/[id]/visuals.put.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useOfferVisuals.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/settings/CarrierRateImportModal.vue",
          "app/composables/menu/admin/settings.ts",
          "app/utils/shippingCountryMap.ts",
          "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf",
          "app/components/settings/ShippingRateFilterBar.vue",
          "server/api/settings/carrier-rates/[id].get.ts",
          "app/components/settings/price-sheet/PriceSheetOptions.vue",
          "app/components/settings/price-sheet/PriceSheetPreviewModal.vue",
          "app/pages/settings/commission-tables/index.vue",
          "reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx",
          "server/api/settings/price-sheet/resolve.post.ts",
          "app/composables/useShippingRateFilter.ts",
          "app/pages/settings/carrier-rates/[id]/edit.vue",
          "server/api/settings/carrier-rates/fixtures.get.ts",
          "reference/template-cleanup/01-idempiere-truncate.sql",
          "server/api/settings/price-sheet/pdf.post.ts",
          "app/components/settings/CarrierRateAction.vue",
          "server/assets/shipping/dhl-contract-2025-07.json",
          ".claude/rules/fulfillment/carrier-rates.md",
          "server/api/settings/carrier-rates/update.put.ts",
          "server/api/settings/carrier-rates/import.post.ts",
          "server/api/settings/price-sheet/row-persist.post.ts",
          "server/utils/shipping/priceSheetTexts.ts",
          "app/utils/shippingPriceSheet.ts",
          "app/assets/langs/shared.js",
          "app/components/settings/price-sheet/PriceSheetMatrix.vue",
          "reference/test-scripts/price-sheet-pdf-smoke.mts",
          "server/utils/shipping/priceSheetPdf.ts",
          "app/pages/settings/price-sheet/index.vue",
          "server/api/settings/carrier-rates/index.get.ts",
          "server/api/settings/carrier-rates/destroy.delete.ts",
          "app/components/settings/price-sheet/PriceSheetCellEditor.vue",
          "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf",
          "app/components/settings/CarrierRateForm.vue",
          "app/pages/settings/carrier-rates/index.vue",
          "server/utils/shipping/priceSheet.ts",
          "app/pages/settings/shipping-cost-overrides/index.vue",
          "server/utils/shipping/carrierRates.ts",
          "app/pages/settings/shipping-costs/index.vue",
          "app/pages/settings/carrier-rates/create.vue",
          "server/api/settings/carrier-rates/store.post.ts",
          "server/utils/shipping/withIdempiere.ts",
          "server/api/settings/price-sheet/cell.post.ts",
          "server/utils/shipping/carrierRateImport.ts",
          "reference/test-scripts/dhl-contract-parse.mts",
          "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf"
        ],
        "commitId" : "bfd587797b626ffcb8189cafc41d8f773094976b",
        "timestamp" : 1793201047000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar\u000a",
        "date" : "2026-10-28 16:24:07 +0100",
        "id" : "bfd587797b626ffcb8189cafc41d8f773094976b",
        "msg" : "Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/components/settings/price-sheet/PriceSheetCellEditor.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/price-sheet/row-persist.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/price-sheet/PriceSheetOptions.vue"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/carrier-rates/index.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/price-sheet/PriceSheetMatrix.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/store.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/update.put.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/withIdempiere.ts"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useShippingRateFilter.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/destroy.delete.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/01-idempiere-truncate.sql"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/CarrierRateImportModal.vue"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/carrier-rates/create.vue"
          },
          {
            "editType" : "add",
            "file" : "app/utils/shippingPriceSheet.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/ShippingRateFilterBar.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/price-sheet/cell.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/assets/shipping/dhl-contract-2025-07.json"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/price-sheet/PriceSheetPreviewModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/carrierRates.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/carrierRateImport.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/settings/shipping-cost-overrides/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/[id].get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/settings/commission-tables/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/import.post.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/price-sheet-pdf-smoke.mts"
          },
          {
            "editType" : "add",
            "file" : "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/carrier-rates/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/fixtures.get.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/fulfillment/carrier-rates.md"
          },
          {
            "editType" : "add",
            "file" : "reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/carrier-rates/index.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/settings.ts"
          },
          {
            "editType" : "add",
            "file" : "app/utils/shippingCountryMap.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/priceSheetTexts.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/dhl-contract-parse.mts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/price-sheet/pdf.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/price-sheet/resolve.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/settings/shipping-costs/index.vue"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/price-sheet/index.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/priceSheet.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/CarrierRateAction.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf"
          },
          {
            "editType" : "add",
            "file" : "app/components/settings/CarrierRateForm.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/shipping/priceSheetPdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/dashboard/RecentCallsCard.vue",
          "app/pages/mobile/product.vue",
          "server/api/materials/products/[id]/capture-image.post.ts",
          "app/pages/materials/storage-usage.vue"
        ],
        "commitId" : "ee4a8f43944460d843d740f23a266aa194d1c73c",
        "timestamp" : 1793201047000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 16:24:07 +0100",
        "id" : "ee4a8f43944460d843d740f23a266aa194d1c73c",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/materials/storage-usage.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/capture-image.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/dashboard/RecentCallsCard.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/product.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/app/build.gradle",
          "android/update-files/version.json"
        ],
        "commitId" : "88cc51e42c41b52b0ef6a2a50044bf3e47e00da5",
        "timestamp" : 1793201845000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Android app 1.0.73 (versionCode 74): photo capture on the product page\u000a",
        "date" : "2026-10-28 16:37:25 +0100",
        "id" : "88cc51e42c41b52b0ef6a2a50044bf3e47e00da5",
        "msg" : "Android app 1.0.73 (versionCode 74): photo capture on the product page",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          },
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/mobile/product.vue"
        ],
        "commitId" : "a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8",
        "timestamp" : 1793202371000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 16:46:11 +0100",
        "id" : "a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/product.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/mobile/product.vue"
        ],
        "commitId" : "f507276e33a2a2b4e602c4f169152302ee3a632a",
        "timestamp" : 1793203151000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 16:59:11 +0100",
        "id" : "f507276e33a2a2b4e602c4f169152302ee3a632a",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/product.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/app/build.gradle",
          "android/update-files/version.json"
        ],
        "commitId" : "516568ccc124baa6cb47f97aa42e11df10f8fc2c",
        "timestamp" : 1793203165000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Android app version bump (release script)\u000a",
        "date" : "2026-10-28 16:59:25 +0100",
        "id" : "516568ccc124baa6cb47f97aa42e11df10f8fc2c",
        "msg" : "Android app version bump (release script)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          },
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/quotePdf.ts"
        ],
        "commitId" : "6114d50ab9e4bbe374d82c3b520e6199a8208f1f",
        "timestamp" : 1793204876000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)\u000a",
        "date" : "2026-10-28 17:27:56 +0100",
        "id" : "6114d50ab9e4bbe374d82c3b520e6199a8208f1f",
        "msg" : "Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/shipping/flagImages.ts",
          "reference/test-scripts/price-sheet-pdf-smoke.mts",
          "server/utils/shipping/priceSheetPdf.ts",
          "nuxt.config.ts",
          ".claude/rules/fulfillment/carrier-rates.md"
        ],
        "commitId" : "216f0bd0224bbc8f4b06813093be696bebd6e2fc",
        "timestamp" : 1793210966000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows\u000a\u000apublic/flags SVGs bundled as Nitro server asset assets:flags, rasterised once per process with sharp\u000a(flagImages.ts, 36 px PNG, 1 px border, fixed-width flag column so names align); smoke script mocks the\u000aflags storage; recipe note in carrier-rates.md.\u000a",
        "date" : "2026-10-28 19:09:26 +0100",
        "id" : "216f0bd0224bbc8f4b06813093be696bebd6e2fc",
        "msg" : "Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows",
        "paths" : [
          {
            "editType" : "add",
            "file" : "server/utils/shipping/flagImages.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/test-scripts/price-sheet-pdf-smoke.mts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/fulfillment/carrier-rates.md"
          },
          {
            "editType" : "edit",
            "file" : "nuxt.config.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/shipping/priceSheetPdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/MarketplaceIcon.vue",
          "app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue"
        ],
        "commitId" : "15f8fe46047dba042a4911aa0b769540a9be9bcf",
        "timestamp" : 1793211292000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 19:14:52 +0100",
        "id" : "15f8fe46047dba042a4911aa0b769540a9be9bcf",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/MarketplaceIcon.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/settings/price-sheet/PriceSheetMatrix.vue",
          "server/utils/shipping/priceSheetPdf.ts",
          "server/utils/shipping/priceSheet.ts",
          ".claude/rules/fulfillment/carrier-rates.md"
        ],
        "commitId" : "a5bd7fc3a443fb233b9f7fcadd66769573b13c53",
        "timestamp" : 1793217290000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 20:54:50 +0100",
        "id" : "a5bd7fc3a443fb233b9f7fcadd66769573b13c53",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/settings/price-sheet/PriceSheetMatrix.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/shipping/priceSheetPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/fulfillment/carrier-rates.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/shipping/priceSheet.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/demo-instance/vonroc/build-catalog.py",
          "reference/demo-instance/seed-orders-returns.sh",
          "reference/demo-instance/vonroc/masters.json",
          "reference/demo-instance/vonroc/zero-open-order-stock.sh",
          "reference/demo-instance/vonroc/return-reasons.txt",
          "reference/demo-instance/vonroc/topup-stock.sh",
          "reference/demo-instance/vonroc/catalog.json",
          "reference/demo-instance/README.md"
        ],
        "commitId" : "e1c8a33447062451463ed92771ea36c16c30cf2c",
        "timestamp" : 1793217290000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 20:54:50 +0100",
        "id" : "e1c8a33447062451463ed92771ea36c16c30cf2c",
        "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",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/return-reasons.txt"
          },
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/README.md"
          },
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/seed-orders-returns.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/masters.json"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/zero-open-order-stock.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/topup-stock.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/catalog.json"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/vonroc/build-catalog.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/quotePdf.ts",
          "server/utils/offers/agbDefault.ts",
          "server/utils/offers/contractPdf.ts",
          "server/utils/offers/contractTexts.ts",
          ".claude/rules/offers/contract-and-quote-portals.md"
        ],
        "commitId" : "e9d5d032dbf89df1468a6065886429bd8bda05b4",
        "timestamp" : 1793217648000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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)\u000a",
        "date" : "2026-10-28 21:00:48 +0100",
        "id" : "e9d5d032dbf89df1468a6065886429bd8bda05b4",
        "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)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/contract-and-quote-portals.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractPdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/agbDefault.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/contractTexts.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/offers/pdf-generation.md",
          "server/utils/offers/quotePdf.ts",
          "app/components/offers/QuoteModal.vue",
          "app/composables/useOfferQuote.ts"
        ],
        "commitId" : "36ef84187503ca39d09327215d4b104159004f63",
        "timestamp" : 1793218775000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 21:19:35 +0100",
        "id" : "36ef84187503ca39d09327215d4b104159004f63",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/pdf-generation.md"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/offers/QuoteModal.vue"
        ],
        "commitId" : "0472dd21e8a930038306cbc34c56bd760b9910b9",
        "timestamp" : 1793218999000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling\u000a",
        "date" : "2026-10-28 21:23:19 +0100",
        "id" : "0472dd21e8a930038306cbc34c56bd760b9910b9",
        "msg" : "Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/quotePdf.ts",
          ".claude/rules/offers/pdf-generation.md"
        ],
        "commitId" : "149ef56dcf85a8d99be10f4bd3104da5d9792ebf",
        "timestamp" : 1793219270000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'\u000a",
        "date" : "2026-10-28 21:27:50 +0100",
        "id" : "149ef56dcf85a8d99be10f4bd3104da5d9792ebf",
        "msg" : "Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/pdf-generation.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/offers/pdf-generation.md",
          "server/utils/offers/quotePdf.ts",
          "app/components/offers/QuoteModal.vue",
          "app/composables/useOfferQuote.ts"
        ],
        "commitId" : "bd25164b7c24d06932995a04f1fff305d56fa18d",
        "timestamp" : 1793219469000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 21:31:09 +0100",
        "id" : "bd25164b7c24d06932995a04f1fff305d56fa18d",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/pdf-generation.md"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/quotePdf.ts",
          ".claude/rules/offers/pdf-generation.md"
        ],
        "commitId" : "6ab80acd4a821be044b75056685275663a51b831",
        "timestamp" : 1793219638000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "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\u000a",
        "date" : "2026-10-28 21:33:58 +0100",
        "id" : "6ab80acd4a821be044b75056685275663a51b831",
        "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",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/utils/offers/quotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/offers/pdf-generation.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "133b0c683d401045311c049876d4218a418398cf",
        "timestamp" : 1793219769000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)\u000a",
        "date" : "2026-10-28 21:36:09 +0100",
        "id" : "133b0c683d401045311c049876d4218a418398cf",
        "msg" : "Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "f8511bdf3ea0936dda5be78c565f74da1a31bd1c",
        "timestamp" : 1793220247000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger\u000a",
        "date" : "2026-10-28 21:44:07 +0100",
        "id" : "f8511bdf3ea0936dda5be78c565f74da1a31bd1c",
        "msg" : "Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "72d31977548a17161c0350bef51f8c59487ce9ca",
        "timestamp" : 1793220263000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page offer group: narrower buttons (tighter padding, smaller font)\u000a",
        "date" : "2026-10-28 21:44:23 +0100",
        "id" : "72d31977548a17161c0350bef51f8c59487ce9ca",
        "msg" : "Lead page offer group: narrower buttons (tighter padding, smaller font)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "5641d417aaf99cd8d9ccc47a2611055544ba49c5",
        "timestamp" : 1793220322000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)\u000a",
        "date" : "2026-10-28 21:45:22 +0100",
        "id" : "5641d417aaf99cd8d9ccc47a2611055544ba49c5",
        "msg" : "Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "7554b436e68e1b7a580814ed8efbbf56612eab8c",
        "timestamp" : 1793220345000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width\u000a",
        "date" : "2026-10-28 21:45:45 +0100",
        "id" : "7554b436e68e1b7a580814ed8efbbf56612eab8c",
        "msg" : "Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78",
        "timestamp" : 1793220385000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group\u000a",
        "date" : "2026-10-28 21:46:25 +0100",
        "id" : "bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78",
        "msg" : "Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "85d1c963b6992c503910a04fee161e1c25070db4",
        "timestamp" : 1793220417000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height\u000a",
        "date" : "2026-10-28 21:46:57 +0100",
        "id" : "85d1c963b6992c503910a04fee161e1c25070db4",
        "msg" : "Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "220e6c3bb9740e9d1f142a9a9654c937fba6a0ca",
        "timestamp" : 1793220447000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above\u000a",
        "date" : "2026-10-28 21:47:27 +0100",
        "id" : "220e6c3bb9740e9d1f142a9a9654c937fba6a0ca",
        "msg" : "Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/[id]/edit.vue"
        ],
        "commitId" : "fcb4ba6d7801d359d7f1993e109d7df3bb05d367",
        "timestamp" : 1793220475000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline\u000a",
        "date" : "2026-10-28 21:47:55 +0100",
        "id" : "fcb4ba6d7801d359d7f1993e109d7df3bb05d367",
        "msg" : "Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/update-files/version.json",
          "android/app/build.gradle"
        ],
        "commitId" : "61b2a9fa700dd32b7fe2e145948060e4a6dc335b",
        "timestamp" : 1793220508000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Android app 1.0.75 (versionCode 76): release-script version bump\u000a",
        "date" : "2026-10-28 21:48:28 +0100",
        "id" : "61b2a9fa700dd32b7fe2e145948060e4a6dc335b",
        "msg" : "Android app 1.0.75 (versionCode 76): release-script version bump",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          },
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/mobile/product.vue"
        ],
        "commitId" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
        "timestamp" : 1793221515000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)\u000a",
        "date" : "2026-10-28 22:05:15 +0100",
        "id" : "fda427288fed8d5a34d1c745e37c23ca041c9a3d",
        "msg" : "Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/product.vue"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}