<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>1622</buildNumber><marked><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><branch><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><branch><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><branch><SHA1>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/erp-nuxt-frontend.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#1622</displayName><duration>570376</duration><estimatedDuration>568496</estimatedDuration><fullDisplayName>erp-frontend-pipeline-production #1622</fullDisplayName><id>1622</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1622</number><queueId>5890</queueId><result>SUCCESS</result><timestamp>1793045616273</timestamp><url>https://jenkins.younex.de/job/erp-frontend-pipeline-production/1622/</url><builtOn>Application-Node-Production</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>reference/demo-instance/hess/catalog.json</affectedPath><affectedPath>reference/demo-instance/hess/build-catalog.py</affectedPath><affectedPath>reference/demo-instance/create-master-articles.sh</affectedPath><affectedPath>server/utils/productsGrid.ts</affectedPath><affectedPath>reference/demo-instance/hess/cattree.json</affectedPath><affectedPath>app/components/materials/ProductVariantsCard.vue</affectedPath><affectedPath>reference/demo-instance/add-purchase-prices.sh</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>server/api/materials/products/[id]/variants.get.ts</affectedPath><affectedPath>reference/demo-instance/set-parent-ids.sh</affectedPath><affectedPath>reference/demo-instance/hess/masters.json</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>bf69e20f22003bbc73714edec19512152cea83bd</commitId><timestamp>1793034452000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling
</comment><date>2026-10-26 18:07:32 +0100</date><id>bf69e20f22003bbc73714edec19512152cea83bd</id><msg>Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling</msg><path><editType>add</editType><file>reference/demo-instance/create-master-articles.sh</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/variants.get.ts</file></path><path><editType>add</editType><file>reference/demo-instance/hess/cattree.json</file></path><path><editType>add</editType><file>reference/demo-instance/set-parent-ids.sh</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductVariantsCard.vue</file></path><path><editType>add</editType><file>reference/demo-instance/hess/masters.json</file></path><path><editType>add</editType><file>reference/demo-instance/hess/build-catalog.py</file></path><path><editType>edit</editType><file>server/utils/productsGrid.ts</file></path><path><editType>add</editType><file>reference/demo-instance/add-purchase-prices.sh</file></path><path><editType>add</editType><file>reference/demo-instance/hess/catalog.json</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/ci/README.md</affectedPath><affectedPath>.claude/rules/materials/product-variants.md</affectedPath><affectedPath>reference/demo-instance/README.md</affectedPath><commitId>c1fc1c30ccab14645c0baf48a5c72ea6986ce862</commitId><timestamp>1793034546000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note
</comment><date>2026-10-26 18:09:06 +0100</date><id>c1fc1c30ccab14645c0baf48a5c72ea6986ce862</id><msg>Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note</msg><path><editType>edit</editType><file>reference/ci/README.md</file></path><path><editType>add</editType><file>reference/demo-instance/README.md</file></path><path><editType>add</editType><file>.claude/rules/materials/product-variants.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/[id]/variants.get.ts</affectedPath><affectedPath>server/utils/productsGrid.ts</affectedPath><commitId>106bde8bfced6763eb4dbed5eab19ca36e10b69d</commitId><timestamp>1793035132000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Variants: read ParentId under its REST key (parentId)
</comment><date>2026-10-26 18:18:52 +0100</date><id>106bde8bfced6763eb4dbed5eab19ca36e10b69d</id><msg>Variants: read ParentId under its REST key (parentId)</msg><path><editType>edit</editType><file>server/api/materials/products/[id]/variants.get.ts</file></path><path><editType>edit</editType><file>server/utils/productsGrid.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/hess/build-catalog.py</affectedPath><affectedPath>reference/demo-instance/hess/catalog.json</affectedPath><commitId>dfef60a31ee23e7beb1ffa4d485ca6956e603d06</commitId><timestamp>1793035243000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Hess catalog: distinct variation names (append missing attribute values)
</comment><date>2026-10-26 18:20:43 +0100</date><id>dfef60a31ee23e7beb1ffa4d485ca6956e603d06</id><msg>Hess catalog: distinct variation names (append missing attribute values)</msg><path><editType>edit</editType><file>reference/demo-instance/hess/build-catalog.py</file></path><path><editType>edit</editType><file>reference/demo-instance/hess/catalog.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/components/AgGrid/Users/AgSecurityKeyActions.vue</affectedPath><affectedPath>app/components/users/SecurityKeyEnrolModal.vue</affectedPath><affectedPath>.claude/rules/auth/webauthn-security-keys.md</affectedPath><affectedPath>app/components/users/SecurityKeyRevokeModal.vue</affectedPath><affectedPath>app/composables/useSecurityKeyFormat.ts</affectedPath><affectedPath>app/pages/users/security-keys/index.vue</affectedPath><affectedPath>app/components/AgGrid/Users/AgSecurityKeyUser.vue</affectedPath><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/components/users/SecurityKeys.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useWebAuthn.ts</affectedPath><commitId>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</commitId><timestamp>1793045605000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout

- /users/security-keys: real Vue cell renderers (user + actions) with handlers via
  cellRendererParams — the shared AgGrid cellClick is selection-changed and never fired the
  Revoke/user-link in raw-HTML cells; 44px rows, stats, search, UIcon icons
- Phone (&lt; 900px): grouped employee cards, sticky "Enrol key" button, full-screen wizard with
  NFC/USB hints per device (Android/iOS/Windows/macOS/app)
- Shared UsersSecurityKeyEnrolModal (details → tap → done/error, UForm validation, employee
  picker with key counts, auto "YubiKey &lt;first name&gt;", cancel aborts at every stage) and
  UsersSecurityKeyRevokeModal (key/user/dates, last-key warning, toasts) used by the overview,
  the profile panel and the user-edit panel; UsersSecurityKeys.vue rebuilt on them
- useSecurityKeyFormat (relative dates, transports, initials, WebAuthn error texts),
  useWebAuthn.cancelCeremony/isNativeApp + register({ isCancelled }), AgGrid rowHeight prop
- Translations en/de/es (+ ne fallback); recipes: webauthn UI, icon + Tailwind colour gaps
</comment><date>2026-10-26 21:13:25 +0100</date><id>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</id><msg>Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout</msg><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/Users/AgSecurityKeyActions.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>add</editType><file>app/components/users/SecurityKeyEnrolModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/auth/webauthn-security-keys.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useWebAuthn.ts</file></path><path><editType>add</editType><file>app/components/users/SecurityKeyRevokeModal.vue</file></path><path><editType>add</editType><file>app/composables/useSecurityKeyFormat.ts</file></path><path><editType>edit</editType><file>app/components/users/SecurityKeys.vue</file></path><path><editType>edit</editType><file>app/pages/users/security-keys/index.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/Users/AgSecurityKeyUser.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></freeStyleBuild>