{
  "_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" : 780,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
            "branch" : [
              {
                "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
            "branch" : [
              {
                "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
        "branch" : [
          {
            "SHA1" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
            "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" : "#780",
  "duration" : 67591,
  "estimatedDuration" : 60620,
  "executor" : null,
  "fullDisplayName" : "build-logship-frontend #780",
  "id" : "780",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 780,
  "queueId" : 5892,
  "result" : "SUCCESS",
  "timestamp" : 1793062800194,
  "url" : "https://jenkins.younex.de/job/build-logship-frontend/780/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "android/app/build.gradle",
          "android/update-files/version.json"
        ],
        "commitId" : "cedd49d1ef03513a99128d8eab938399f83ab8ef",
        "timestamp" : 1792996434000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "release app 1.0.68 (code 69): WMS app login only for mobile workers — corrects the unshipped 1.0.69 bump from the interrupted release run\u000a",
        "date" : "2026-10-26 07:33:54 +0100",
        "id" : "cedd49d1ef03513a99128d8eab938399f83ab8ef",
        "msg" : "release app 1.0.68 (code 69): WMS app login only for mobile workers — corrects the unshipped 1.0.69 bump from the interrupted release run",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "android/app/build.gradle"
          },
          {
            "editType" : "edit",
            "file" : "android/update-files/version.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/offers/conditions/index.post.ts",
          "app/components/offers/QuoteModal.vue",
          "server/api/settings/software-catalog/lists.get.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "server/api/offers/quote/preview.post.ts",
          "app/pages/settings/software-catalog/index.vue",
          "reference/template-cleanup/01-idempiere-truncate.sql",
          "app/utils/softwareCatalogDefaults.ts",
          "server/utils/chatAccess.ts",
          "app/pages/users/leads/[id]/edit.vue",
          "server/api/settings/software-catalog/seed.post.ts",
          "reference/template-cleanup/README.md",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js",
          "server/api/settings/software-catalog/save.post.ts",
          "server/api/settings/software-catalog/seed-lists.post.ts",
          "server/api/offers/software-catalog/index.get.ts",
          "app/components/leads/ChatConsoleModal.vue",
          "reference/test-scripts/software-catalog-seed-lists.mts",
          "server/utils/offers/softwareCatalog.ts",
          ".claude/rules/offers/software-quote.md",
          "app/components/MainNavigationMenu.vue",
          "app/composables/menu/admin/sales.ts",
          "server/utils/offers/softwareQuotePdf.ts",
          "server/api/offers/quote/send.post.ts"
        ],
        "commitId" : "7247b7d3b3973109586dfc39741d445d9fa06b91",
        "timestamp" : 1793023127000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Software offer type \"LogShip Cloud\" + maintainable catalog in iDempiere\u000a\u000aSecond offer type next to the 3PL fulfillment quote on the lead page: a SaaS\u000aoffer for the LogShip Cloud product with its own modal (packages, overage\u000astaffel, feature matrix, add-ons, onboarding package with phases/highlights,\u000apositions, requirements, texts) and branded PDF (package card, prices, 4–5\u000acolumn package comparison, onboarding section, example calculation). Header\u000aswitch \"Fulfillment | LogShip Cloud\" in both modals; offers/quote preview+send\u000abranch on payload.offerType, conditions saved as offer_conditions.softwareQuote.\u000a\u000aCatalog persisted in iDempiere (CUST_SoftwarePlan / CUST_SoftwareCatalogItem,\u000aenum columns as AD_Reference lists): server util with 5-min cache and fail-soft\u000adefaults, routes for read / lists / whole-catalog save / seed / seed-lists,\u000astaff gate option requireChat=false. Settings → Software-Katalog is a matrix\u000aeditor (packages = columns, features = rows, click cell = minimum package,\u000amode pill, drag & drop rows/columns, inline rename, details panel, add-ons\u000alist, one save) — linked from Sales in both menus. Offers carry a catalog\u000asnapshot so old PDFs stay reproducible.\u000a\u000aAlso: backdrop close only on a real backdrop click (both offer modals), feature\u000arows no longer squeezed by the global select width, dark-mode styling for the\u000acatalog page, the KI console and the offer modals, template clean-up keeps the\u000atwo new tables, recipe .claude/rules/offers/software-quote.md.\u000a",
        "date" : "2026-10-26 14:58:47 +0100",
        "id" : "7247b7d3b3973109586dfc39741d445d9fa06b91",
        "msg" : "Software offer type \"LogShip Cloud\" + maintainable catalog in iDempiere",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/utils/softwareCatalogDefaults.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/save.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/MainNavigationMenu.vue"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/offers/software-catalog/index.get.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/seed.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/softwareCatalog.ts"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/README.md"
          },
          {
            "editType" : "add",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/lists.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/chatAccess.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/quote/send.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/pages/settings/software-catalog/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "reference/template-cleanup/01-idempiere-truncate.sql"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/quote/preview.post.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/QuoteModal.vue"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/offers/software-quote.md"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/menu/admin/sales.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/leads/ChatConsoleModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/leads/[id]/edit.vue"
          },
          {
            "editType" : "edit",
            "file" : "server/api/offers/conditions/index.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/api/settings/software-catalog/seed-lists.post.ts"
          },
          {
            "editType" : "add",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/test-scripts/software-catalog-seed-lists.mts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/softwareQuotePdf.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50",
        "timestamp" : 1793024418000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "LogShip offer: onboarding package marked optional, \"ab\" price, travel costs excluded\u000a\u000aThe onboarding package prints as optional with an \"ab 3.250 €\" starting price\u000a(final fixed price after the kickoff) and a note that travel and accommodation\u000acosts for on-site appointments are billed as incurred — in the price table, the\u000aonboarding section, the example calculation and the Hinweise. Both aspects are\u000aper-offer switches in the modal (default on) and persist with the conditions.\u000a",
        "date" : "2026-10-26 15:20:18 +0100",
        "id" : "e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50",
        "msg" : "LogShip offer: onboarding package marked optional, \"ab\" price, travel costs excluded",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/utils/offers/softwareQuotePdf.ts",
          "app/composables/useOfferSoftwareQuote.ts",
          "app/utils/softwareCatalogDefaults.ts",
          "app/components/offers/SoftwareQuoteModal.vue",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "a08361cbd2c664f0b42f95f54c50f2e7272e01ac",
        "timestamp" : 1793025148000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "LogShip offer: editable fee-line name and subtext, package taglines\u000a\u000aThe monthly software-fee row prints \"<package> — monatliche Softwaregebühr\"\u000awith the package tagline (catalog Description) and the included volumes as\u000asubtext; name and subtext can be overridden per offer (empty = automatic).\u000aThe package card shows the tagline too. Default catalog names are now\u000aStart / Wachstum / Premium / Enterprise with taglines (e.g. Start: \"Der\u000akomplette Fulfillment-Kern für Ihren Einstieg.\"); the live rows were updated\u000ato match. Modal gets tagline, fee-name and fee-subtext fields (de/en/es).\u000a",
        "date" : "2026-10-26 15:32:28 +0100",
        "id" : "a08361cbd2c664f0b42f95f54c50f2e7272e01ac",
        "msg" : "LogShip offer: editable fee-line name and subtext, package taglines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/utils/softwareCatalogDefaults.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/components/offers/SoftwareQuoteModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useOfferSoftwareQuote.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/offers/softwareQuotePdf.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/inouts/quick-rma.post.ts",
          "app/pages/mobile/return.vue",
          "app/pages/integrations/returns-desktop.vue",
          "app/composables/useReturnedQty.ts"
        ],
        "commitId" : "a332853cd2e7e11a943633fdca396c6ac7a54586",
        "timestamp" : 1793031078000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines\u000a\u000aThe mobile + desktop return pages summed every completed M_RMA on the\u000ashipment as already returned. Marketplace-imported RMAs (Amazon) are\u000aCompleted with the expected qty before the parcel arrives, so unprocessed\u000areturns showed Remaining 0/1 and could not be entered (e.g. shipment\u000a536925 / RMA 30614). Shared useReturnedQty composable now counts only\u000acompleted/closed customer-return receipts linked via M_RMA_ID.\u000a\u000aquick-rma: when reusing such an RMA, receipt lines are matched to RMA\u000alines by shipment line id (then product, then line number restricted to\u000aunlinked lines) instead of the bare line number, which the Amazon\u000aimporter assigns as a counter. Orphan check also accepts closed receipts.\u000a",
        "date" : "2026-10-26 17:11:18 +0100",
        "id" : "a332853cd2e7e11a943633fdca396c6ac7a54586",
        "msg" : "Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/inouts/quick-rma.post.ts"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useReturnedQty.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/mobile/return.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/integrations/returns-desktop.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/inouts/quick-rma.post.ts"
        ],
        "commitId" : "ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d",
        "timestamp" : 1793031125000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "quick-rma: prefer line-number match over product match for unlinked RMA lines\u000a\u000aKeeps the previous behaviour for RMAs created without M_InOutLine_ID\u000a(sales-order return page) when the same product appears on two lines.\u000a",
        "date" : "2026-10-26 17:12:05 +0100",
        "id" : "ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d",
        "msg" : "quick-rma: prefer line-number match over product match for unlinked RMA lines",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/inouts/quick-rma.post.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "app/pages/materials/products/index.vue",
          "reference/demo-instance/hess/catalog.json",
          "reference/demo-instance/hess/build-catalog.py",
          "server/utils/productsGrid.ts",
          "reference/demo-instance/create-master-articles.sh",
          "reference/demo-instance/hess/cattree.json",
          "app/components/materials/ProductVariantsCard.vue",
          "reference/demo-instance/add-purchase-prices.sh",
          "app/pages/materials/products/[id]/edit.vue",
          "server/api/materials/products/[id]/variants.get.ts",
          "reference/demo-instance/hess/masters.json",
          "reference/demo-instance/set-parent-ids.sh",
          "app/assets/langs/shared.js"
        ],
        "commitId" : "bf69e20f22003bbc73714edec19512152cea83bd",
        "timestamp" : 1793034452000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling\u000a",
        "date" : "2026-10-26 18:07:32 +0100",
        "id" : "bf69e20f22003bbc73714edec19512152cea83bd",
        "msg" : "Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/index.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/catalog.json"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/masters.json"
          },
          {
            "editType" : "add",
            "file" : "server/api/materials/products/[id]/variants.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/productsGrid.ts"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/create-master-articles.sh"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/cattree.json"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/set-parent-ids.sh"
          },
          {
            "editType" : "add",
            "file" : "app/components/materials/ProductVariantsCard.vue"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/add-purchase-prices.sh"
          },
          {
            "editType" : "add",
            "file" : "reference/demo-instance/hess/build-catalog.py"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/materials/products/[id]/edit.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/ci/README.md",
          ".claude/rules/materials/product-variants.md",
          "reference/demo-instance/README.md"
        ],
        "commitId" : "c1fc1c30ccab14645c0baf48a5c72ea6986ce862",
        "timestamp" : 1793034546000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note\u000a",
        "date" : "2026-10-26 18:09:06 +0100",
        "id" : "c1fc1c30ccab14645c0baf48a5c72ea6986ce862",
        "msg" : "Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note",
        "paths" : [
          {
            "editType" : "add",
            "file" : "reference/demo-instance/README.md"
          },
          {
            "editType" : "edit",
            "file" : "reference/ci/README.md"
          },
          {
            "editType" : "add",
            "file" : ".claude/rules/materials/product-variants.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "server/api/materials/products/[id]/variants.get.ts",
          "server/utils/productsGrid.ts"
        ],
        "commitId" : "106bde8bfced6763eb4dbed5eab19ca36e10b69d",
        "timestamp" : 1793035132000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Variants: read ParentId under its REST key (parentId)\u000a",
        "date" : "2026-10-26 18:18:52 +0100",
        "id" : "106bde8bfced6763eb4dbed5eab19ca36e10b69d",
        "msg" : "Variants: read ParentId under its REST key (parentId)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "server/api/materials/products/[id]/variants.get.ts"
          },
          {
            "editType" : "edit",
            "file" : "server/utils/productsGrid.ts"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/demo-instance/hess/build-catalog.py",
          "reference/demo-instance/hess/catalog.json"
        ],
        "commitId" : "dfef60a31ee23e7beb1ffa4d485ca6956e603d06",
        "timestamp" : 1793035243000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Hess catalog: distinct variation names (append missing attribute values)\u000a",
        "date" : "2026-10-26 18:20:43 +0100",
        "id" : "dfef60a31ee23e7beb1ffa4d485ca6956e603d06",
        "msg" : "Hess catalog: distinct variation names (append missing attribute values)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/hess/build-catalog.py"
          },
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/hess/catalog.json"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/nuxt/ui-components.md",
          "app/components/AgGrid/Users/AgSecurityKeyActions.vue",
          "app/components/users/SecurityKeyEnrolModal.vue",
          ".claude/rules/auth/webauthn-security-keys.md",
          "app/components/users/SecurityKeyRevokeModal.vue",
          "app/composables/useSecurityKeyFormat.ts",
          "app/pages/users/security-keys/index.vue",
          "app/components/AgGrid/Users/AgSecurityKeyUser.vue",
          "app/components/AgGrid.vue",
          "app/components/users/SecurityKeys.vue",
          "app/assets/langs/shared.js",
          "app/composables/useWebAuthn.ts"
        ],
        "commitId" : "b6f8902e5a86439a36af8f88c9be9e31cf5fff70",
        "timestamp" : 1793045605000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout\u000a\u000a- /users/security-keys: real Vue cell renderers (user + actions) with handlers via\u000a  cellRendererParams — the shared AgGrid cellClick is selection-changed and never fired the\u000a  Revoke/user-link in raw-HTML cells; 44px rows, stats, search, UIcon icons\u000a- Phone (< 900px): grouped employee cards, sticky \"Enrol key\" button, full-screen wizard with\u000a  NFC/USB hints per device (Android/iOS/Windows/macOS/app)\u000a- Shared UsersSecurityKeyEnrolModal (details → tap → done/error, UForm validation, employee\u000a  picker with key counts, auto \"YubiKey <first name>\", cancel aborts at every stage) and\u000a  UsersSecurityKeyRevokeModal (key/user/dates, last-key warning, toasts) used by the overview,\u000a  the profile panel and the user-edit panel; UsersSecurityKeys.vue rebuilt on them\u000a- useSecurityKeyFormat (relative dates, transports, initials, WebAuthn error texts),\u000a  useWebAuthn.cancelCeremony/isNativeApp + register({ isCancelled }), AgGrid rowHeight prop\u000a- Translations en/de/es (+ ne fallback); recipes: webauthn UI, icon + Tailwind colour gaps\u000a",
        "date" : "2026-10-26 21:13:25 +0100",
        "id" : "b6f8902e5a86439a36af8f88c9be9e31cf5fff70",
        "msg" : "Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout",
        "paths" : [
          {
            "editType" : "add",
            "file" : "app/components/AgGrid/Users/AgSecurityKeyActions.vue"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/auth/webauthn-security-keys.md"
          },
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/ui-components.md"
          },
          {
            "editType" : "add",
            "file" : "app/components/users/SecurityKeyRevokeModal.vue"
          },
          {
            "editType" : "add",
            "file" : "app/composables/useSecurityKeyFormat.ts"
          },
          {
            "editType" : "edit",
            "file" : "app/assets/langs/shared.js"
          },
          {
            "editType" : "edit",
            "file" : "app/components/AgGrid.vue"
          },
          {
            "editType" : "add",
            "file" : "app/components/users/SecurityKeyEnrolModal.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/pages/users/security-keys/index.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/composables/useWebAuthn.ts"
          },
          {
            "editType" : "add",
            "file" : "app/components/AgGrid/Users/AgSecurityKeyUser.vue"
          },
          {
            "editType" : "edit",
            "file" : "app/components/users/SecurityKeys.vue"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          ".claude/rules/nuxt/dev-server-troubleshooting.md"
        ],
        "commitId" : "9371c6664d11ca13d1295dc13b1dd8e845ebdbf4",
        "timestamp" : 1793045666000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Recipe: duplicate nuxt dev server symptoms (client never mounts, stale style module 404)\u000a",
        "date" : "2026-10-26 21:14:26 +0100",
        "id" : "9371c6664d11ca13d1295dc13b1dd8e845ebdbf4",
        "msg" : "Recipe: duplicate nuxt dev server symptoms (client never mounts, stale style module 404)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : ".claude/rules/nuxt/dev-server-troubleshooting.md"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "reference/demo-instance/README.md"
        ],
        "commitId" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
        "timestamp" : 1793046463000,
        "author" : {
          "absoluteUrl" : "https://jenkins.younex.de/user/info",
          "fullName" : "info"
        },
        "authorEmail" : "info@younex.de",
        "comment" : "Docs: Hess as second 3PL on the demo instance (restricted admin role, merchant onboarding gotchas)\u000a",
        "date" : "2026-10-26 21:27:43 +0100",
        "id" : "c03ffecdc39c2fb48e278b6fed453fb530fd8237",
        "msg" : "Docs: Hess as second 3PL on the demo instance (restricted admin role, merchant onboarding gotchas)",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "reference/demo-instance/README.md"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.younex.de/user/info",
      "fullName" : "info"
    }
  ]
}