{
  "_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" : 770,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
            "branch" : [
              {
                "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
            "branch" : [
              {
                "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
        "branch" : [
          {
            "SHA1" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
            "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" : null,
  "displayName" : "#770",
  "duration" : 67824,
  "estimatedDuration" : 60620,
  "executor" : null,
  "fullDisplayName" : "build-logship-frontend #770",
  "id" : "770",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 770,
  "queueId" : 5840,
  "result" : "SUCCESS",
  "timestamp" : 1792281600765,
  "url" : "https://jenkins.younex.de/job/build-logship-frontend/770/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/mail/LeadFollowupModal.vue",
          "app/pages/users/leads/index.vue",
          "server/utils/mail/mailArchive.ts",
          "server/api/mail/lead-followups.get.ts",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "8bf6e253c6d78f1728cdd797a5fb027104968aa3",
        "timestamp" : 1792012325000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: single-row toolbar + 'Unanswered leads' mailpiler check\u000a\u000a- /users/leads header restyled into one toolbar row: phone lookup (with its\u000a  picker), quick search, offer / contract filters, reset, shown/total counter\u000a  on the left; blank questionnaire DE|EN, the new 'Unanswered' button, New and\u000a  Delete on the right (replaces HeaderAction + the two extra filter rows;\u000a  labels collapse to icons on narrower screens)\u000a- New button 'Unanswered' opens <MailLeadFollowupModal>: leads created within\u000a  the last N days (default 30, editable, remembered per browser) whose latest\u000a  e-mail in the mailpiler archive came FROM the lead and got no reaction since\u000a  (no outgoing mail to that address, no C_ContactActivity logged after it).\u000a  Result table: lead, latest mail + waiting days (colour-coded), our last\u000a  reaction before it, buttons to open the lead tab or the archive mail history\u000a- GET /api/mail/lead-followups?days= (staff only, archive only, no IMAP):\u000a  bounded lead + activity queries, one archive lookup per address with\u000a  concurrency 5, auto-replies / bounce notices skipped when picking the\u000a  latest inbound mail; searchArchive() got an optional row limit\u000a- translation keys leads_phone_* / lfm_* (en, de, es)\u000a",
        "date" : "2026-10-14 23:12:05 +0200",
        "id" : "8bf6e253c6d78f1728cdd797a5fb027104968aa3",
        "msg" : "Leads list: single-row toolbar + 'Unanswered leads' mailpiler check",
        "paths" : [
          {
            "editType" : "add",
            "file" : "server/api/mail/lead-followups.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/mail/LeadFollowupModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/mail/mailArchive.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/mail/lead-email-history.md"
        ],
        "commitId" : "002781ab06b897faf85ea38676a5074a2e73a1d0",
        "timestamp" : 1792012345000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Mail recipe: note the unanswered-leads check route and its comparison rule\u000a",
        "date" : "2026-10-14 23:12:25 +0200",
        "id" : "002781ab06b897faf85ea38676a5074a2e73a1d0",
        "msg" : "Mail recipe: note the unanswered-leads check route and its comparison rule",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/mail/lead-email-history.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue"
        ],
        "commitId" : "77bcdba5a25839512b0510aac21a69a89186f6a6",
        "timestamp" : 1792012368000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu)\u000a",
        "date" : "2026-10-14 23:12:48 +0200",
        "id" : "77bcdba5a25839512b0510aac21a69a89186f6a6",
        "msg" : "Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue"
        ],
        "commitId" : "acdea33714d2966600ac66e7e76f5c60d3ff9633",
        "timestamp" : 1792012414000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected)\u000a",
        "date" : "2026-10-14 23:13:34 +0200",
        "id" : "acdea33714d2966600ac66e7e76f5c60d3ff9633",
        "msg" : "Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue"
        ],
        "commitId" : "ac7c6254d501fce7a72453e223689f200d8e5512",
        "timestamp" : 1792012503000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab\u000a",
        "date" : "2026-10-14 23:15:03 +0200",
        "id" : "ac7c6254d501fce7a72453e223689f200d8e5512",
        "msg" : "Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "1dbf321e34fa687f66cf478013afed71718437b3",
        "timestamp" : 1792012677000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns\u000a",
        "date" : "2026-10-14 23:17:57 +0200",
        "id" : "1dbf321e34fa687f66cf478013afed71718437b3",
        "msg" : "Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue"
        ],
        "commitId" : "cf67b8574cd059732370169752b60542915beb2b",
        "timestamp" : 1792012872000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font\u000a",
        "date" : "2026-10-14 23:21:12 +0200",
        "id" : "cf67b8574cd059732370169752b60542915beb2b",
        "msg" : "Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue"
        ],
        "commitId" : "22c6113c6b55bd0003ce134f437083ee4cb00d7d",
        "timestamp" : 1792013035000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay\u000a",
        "date" : "2026-10-14 23:23:55 +0200",
        "id" : "22c6113c6b55bd0003ce134f437083ee4cb00d7d",
        "msg" : "Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/users/leads/index.vue",
          "app/components/mail/LeadFollowupModal.vue"
        ],
        "commitId" : "1abfb16fb0015cd9816abc65976984ab354408a9",
        "timestamp" : 1792014106000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode\u000a",
        "date" : "2026-10-14 23:41:46 +0200",
        "id" : "1abfb16fb0015cd9816abc65976984ab354408a9",
        "msg" : "Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/mail/LeadFollowupModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/mobile/reconditioning.vue",
          "app/components/mobile/LocatorRow.vue",
          "app/composables/useLocatorCatalog.ts",
          "app/pages/mobile/receive.vue",
          "app/pages/integrations/inventory-desktop.vue",
          "server/api/mobile/locators.post.ts",
          "app/pages/integrations/movement-desktop.vue",
          "app/pages/mobile/return.vue",
          "app/pages/integrations/returns-desktop.vue",
          "nuxt.config.ts",
          "app/pages/mobile/inventory.vue",
          "app/pages/integrations/receive-desktop.vue",
          "server/utils/locatorCatalog.ts",
          "server/api/mobile/locator-by-xyz.post.ts",
          "server/api/mobile/reconditioning/target-locators.post.ts",
          "server/api/mobile/locator-lookup.post.ts",
          "server/api/mobile/locator-ensure.post.ts",
          ".claude/rules/materials/locator-catalog.md",
          "server/api/mobile/default-locator-lookup.post.ts",
          "app/pages/mobile/movement.vue",
          "server/api/mobile/product-lookup.post.ts"
        ],
        "commitId" : "f68dd3e394dcf0d7eba99b6818726e5c9a7f2858",
        "timestamp" : 1792015636000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Locator catalog: bins created per organization on first use (mobile + desktop)\u000a\u000aiDempiere needs one warehouse per org and every locator per warehouse; instead of\u000apre-creating all ~500 bins for every merchant, the master org (LogYou 1000000,\u000aruntimeConfig.locatorMasterOrgId / LOCATOR_MASTER_ORG_ID) is the template catalog\u000aand a merchant gets a bin the moment it is used.\u000a\u000a- server/utils/locatorCatalog.ts: listLocatorCatalog() = org bins + master-only\u000a  bins as virtual preview entries (isVirtual, id `new:<code>`); ensureLocator()\u000a  = find in org or create from the master template (Value, X/Y/Z, PriorityNo,\u000a  locator type) in the org's own warehouse; codes unknown to the master stay 404;\u000a  roles 'default' / 'return' copy the master's default / return bin\u000a- new POST /api/mobile/locators (catalog) and /api/mobile/locator-ensure\u000a- locator-lookup, locator-by-xyz create on miss (response `created`),\u000a  default-locator-lookup creates the org default when the org has no bin at\u000a  all, reconditioning/target-locators and product-lookup carry the preview\u000a- app/composables/useLocatorCatalog.ts: fetchLocators / resolveLocator /\u000a  ensureLocator + notifyLocatorCreated toast; LocatorRow `is-virtual` → \"neu\" tag\u000a- wired: mobile movement, receive, inventory, return, reconditioning and the\u000a  desktop ports movement/receive/inventory/returns under /integrations (pickers\u000a  load the catalog, picking a virtual bin creates it before use; scans create\u000a  server-side); fix-locator-owner (both) covered via locator-by-xyz\u000a- recipe .claude/rules/materials/locator-catalog.md\u000a",
        "date" : "2026-10-15 00:07:16 +0200",
        "id" : "f68dd3e394dcf0d7eba99b6818726e5c9a7f2858",
        "msg" : "Locator catalog: bins created per organization on first use (mobile + desktop)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "nuxt.config.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/inventory-desktop.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/locatorCatalog.ts"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useLocatorCatalog.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/mobile/LocatorRow.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/receive.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/mobile/locators.post.ts"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/materials/locator-catalog.md"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/movement-desktop.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/product-lookup.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/default-locator-lookup.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/returns-desktop.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/mobile/locator-ensure.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/inventory.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/movement.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/reconditioning/target-locators.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/return.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/receive-desktop.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/locator-by-xyz.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/reconditioning.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/locator-lookup.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/dashboard/prime-due-today.get.ts"
        ],
        "commitId" : "a345106a35fe2eb8fa5931a669c4ff5521c0f442",
        "timestamp" : 1792184281000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged)\u000a",
        "date" : "2026-10-16 22:58:01 +0200",
        "id" : "a345106a35fe2eb8fa5931a669c4ff5521c0f442",
        "msg" : "Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/dashboard/prime-due-today.get.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/inouts/[id]/reset-commission.post.ts",
          "server/api/commission/parcels/dhl/multi.post.ts",
          "app/components/sales/OrderForm.vue",
          ".claude/rules/fulfillment/commissioning.md",
          "app/pages/sales/orders/[id]/view.vue",
          "app/composables/useDhlInsuranceFeedback.ts",
          "server/api/orders/store.post.ts",
          "app/pages/integrations/commission.vue",
          "app/pages/sales/orders/create.vue",
          "server/api/partners/partners/quick-add.post.ts",
          "app/pages/mobile/commission.vue",
          "app/components/OrderQuickAddModal.vue",
          "server/api/commission/parcels/dhl/index.post.ts",
          "app/pages/partners/partners/add.vue",
          "app/components/partners/PartnerQuickForm.vue",
          "app/pages/sales/orders/[id]/edit.vue",
          "app/components/integrations/CommissionList.vue",
          "server/api/orders/update.put.ts",
          "server/utils/dhlInsurance.ts",
          "app/assets/langs/shared.js",
          "server/api/commission/parcels/dhl/inouts.get.ts"
        ],
        "commitId" : "aab207fb4ef22f1336352c8858e07f74bddd9597",
        "timestamp" : 1792224796000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement\u000a\u000a- C_Order.IsDHLTransportInsurance (checkbox on OrderForm for DHL-Paket shippers; quick-order modal /\u000a  partners/add with 500 € notice + mandatory extra-cost confirmation, all roles incl. merchants)\u000a- server/utils/dhlInsurance.ts: amount = order GrandTotal incl. tax → services.additionalInsurance;\u000a  skipped for Kleinpaket (V62KP), Packstation/Postfiliale/Paketshop addresses and ≤ 500 €;\u000a  > 2.500 € = tier B (Filiale only), > 25.000 € capped at the DHL maximum with a warning;\u000a  multi-parcel splits the total by parcel item value\u000a- booked amount stored in M_InOut.DHL_InsuranceValue (cleared by the commission reset)\u000a- tier-B parcels get an internal 102×152 mm \"NICHT IN DIE DHL-ABHOLUNG / NUR DHL FILIALE\" label printed\u000a  right after the DHL label (desktop, modal and mobile commissioning), plus toasts for every outcome\u000a- operator banner on both commission pages before the label, badges on the order status flow and the\u000a  DHL commission list; recipe in .claude/rules/fulfillment/commissioning.md\u000a",
        "date" : "2026-10-17 10:13:16 +0200",
        "id" : "aab207fb4ef22f1336352c8858e07f74bddd9597",
        "msg" : "DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/sales/orders/create.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/integrations/CommissionList.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/OrderQuickAddModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/inouts/[id]/reset-commission.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/dhl/multi.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/orders/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useDhlInsuranceFeedback.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/commission.vue"
          },
          {
            "editType" : "add",
            "file" : "server/utils/dhlInsurance.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/orders/[id]/view.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/partners/PartnerQuickForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/dhl/index.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/partners/partners/add.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/fulfillment/commissioning.md"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/dhl/inouts.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/sales/OrderForm.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/partners/partners/quick-add.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/store.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/update.put.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/commission.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/commission/parcels/contents.post.ts",
          "app/composables/useParcelContentsDoc.ts",
          ".claude/rules/fulfillment/commissioning.md",
          "app/components/integrations/CommissionPacklistConfirmModal.vue",
          "app/pages/integrations/commission.vue",
          "app/components/sales/ParcelContentsModal.vue"
        ],
        "commitId" : "fa4edb3dc3eb2dbcfbe4aa427d00691dce5516d6",
        "timestamp" : 1792225978000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included\u000a",
        "date" : "2026-10-17 10:32:58 +0200",
        "id" : "fa4edb3dc3eb2dbcfbe4aa427d00691dce5516d6",
        "msg" : "Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/components/sales/ParcelContentsModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/commission/parcels/contents.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useParcelContentsDoc.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/commission.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/fulfillment/commissioning.md"
          },
          {
            "editType" : "edit",
            "file" : "app/components/integrations/CommissionPacklistConfirmModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/index.vue"
        ],
        "commitId" : "0afec150a35b3c26c457d5c0766e497c45086029",
        "timestamp" : 1792225978000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets\u000a",
        "date" : "2026-10-17 10:32:58 +0200",
        "id" : "0afec150a35b3c26c457d5c0766e497c45086029",
        "msg" : "Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/index.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/components/requests/MyTicketDetail.vue",
          "server/api/orders/[id]/roadmap/push-step.post.ts",
          "server/utils/pushTask.ts",
          "app/pages/mobile/tasks.vue",
          "server/utils/relabelOrderHelper.ts",
          "server/utils/orderRoadmap.ts",
          ".claude/rules/sales/order-roadmap.md",
          "app/composables/usePushedTasks.ts",
          "app/components/sales/OrderRoadmap.vue",
          "server/api/requests/requests/[id]/push-task.post.ts",
          "app/pages/sales/orders/[id]/edit.vue",
          "server/api/mobile/pushed-tasks.get.ts",
          ".claude/rules/requests/tickets.md",
          "server/utils/orderProductions.ts",
          "server/utils/productionTicket.ts",
          "server/api/orders/[id]/roadmap.get.ts",
          "app/components/requests/PushTaskModal.vue",
          "app/assets/langs/shared.js",
          "server/api/orders/[id]/productions.get.ts"
        ],
        "commitId" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
        "timestamp" : 1792268600000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with \"send step to mobile device\"\u000a\u000a- <SalesOrderRoadmap> panel between the status timeline and the form (staff only, shown only when the\u000a  order needs extra steps): per BOM position Produktion angelegt → Produziert → Produktions-Aufgabe,\u000a  for relabel orders Etiketten-Codes → FBA-Etiketten drucken → Umetikettierung (Lager); colour state\u000a  (open / in progress / done / not yet), global numbering, \"next step\" marker, progress summary,\u000a  collapsible, responsive down to phone width\u000a- GET /api/orders/:id/roadmap aggregates order, lines (BOM flag, printLabelCode), productions and\u000a  order tickets; POST /api/orders/:id/roadmap/push-step reuses the step's open ticket (relabel summary\u000a  prefix / M_Production_ID) or creates one (relabel / production ticket) and pushes it to the worker\u000a- push logic extracted to server/utils/pushTask.ts (shared with requests/[id]/push-task), push modal\u000a  extracted to <RequestsPushTaskModal> (MyTicketDetail switched over)\u000a- mobile pushed-task list carries the production link and shows a production card\u000a- createRelabelTicket returns the ticket id; createProductionTicket works without a production\u000a- i18n en/de/es, recipe .claude/rules/sales/order-roadmap.md\u000a",
        "date" : "2026-10-17 22:23:20 +0200",
        "id" : "88121ab248ac7b42471936cc209b2c25fe5a095c",
        "msg" : "Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with \"send step to mobile device\"",
        "paths" : [
          {
            "editType" : "add",
            "file" : "server/utils/orderRoadmap.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/sales/OrderRoadmap.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/orders/[id]/roadmap.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/requests/MyTicketDetail.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/orders/[id]/roadmap/push-step.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/mobile/pushed-tasks.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/orderProductions.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/tasks.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/usePushedTasks.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/pushTask.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/api/requests/requests/[id]/push-task.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/productionTicket.ts"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/requests/tickets.md"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/relabelOrderHelper.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/requests/PushTaskModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/sales/orders/[id]/edit.vue"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/sales/order-roadmap.md"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/api/orders/[id]/productions.get.ts"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}