From 7c9eb8b644135e873b282f231bb3dc8c09c6c67c Mon Sep 17 00:00:00 2001 From: Jeppe B <2jepp9350@gmail.com> Date: Sun, 16 Aug 2026 08:58:06 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20merge=20develop=20into=20mast?= =?UTF-8?q?er=20=E2=80=94=20XL=20Vask=20integration=20fixes=20(Aug=2015=20?= =?UTF-8?q?2026)=20(#312)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Brings all of the develop branch's commits into master. ## What this contains The 9 commits on develop that landed in this round — all XL Vask-related UI fixes plus the 'visible primary-button hover state' visual-diff: - **PR #303** (TRU-5 / AUT-1) — style(AUT-1): visible primary-button hover state + visual diff - **PR #304** (TRU-10 / AUT-6) — fix(invoicing-period): propagate flagged wash start date to Selvvask view - **PR #305** (TRU-12 / AUT-8) — feat(xlvask): render friendly notice for 404 from /modules/xlvask/services/usage/orders - **PR #306** (TRU-9 / AUT-5) — i18n(test): lock in xlvask_review / xlvask_usage_log mirroring to the global v2 fallback - **PR #307** (TRU-13 / AUT-9) — i18n(xlvask_review): translate missing keys for no, sv, de, en - **PR #308** (TRU-15 / AUT-11) — test(e2e): add Playwright smoke test for XL Vask flag → Selvvash navigation - **PR #309** (TRU-11 / AUT-7) — feat(TRU-11): propagate department selector to Selvvask usage query - **PR #310** (TRU-19 / AUT-15) — test(TRU-19): lock self-serve program number range + button registry contract - **PR #311** (TRU-8 / AUT-4) — fix(invoicing-flag-list): explain empty XL Vask hover preview when flag context has no metadata ## Why The XL Vask integration bug surfaced from the user-reported message "XL Vask-registreringen er hverken ignoreret eller knyttet til en ordre i den valgte periode. doesn't show the wash." After dispatching 9 diagnostic + fix tasks and merging all 9 PRs into develop via the OpenSymphony orchestrator running against MiniMax M3, this PR is the canonical release to bring develop's accumulated changes into master. No new code in this PR — just the squash-merged output of the 9 source PRs combined into a single develop→master merge. ## Verification All 9 source PRs passed: - Required CI (Action Runners) - App Store Readiness - Quality lint/i18n/build/unit/e2e suites The required checks on this PR will run the same gate. ## Notes - The api repo has its own equivalent PR/merge — see CHANGELOG for that side. --------- Co-authored-by: Jeppe Co-authored-by: openhands --- scripts/aut-1-capture-hover-preview.mjs | 142 +++++++++++++++ scripts/run-playwright-full-slice.mjs | 1 + src/assets/main.css | 27 +++ .../DepartmentPos/XLVaskUsagePagination.vue | 47 ++++- src/components/pagination/paginatedList.vue | 18 +- src/i18n/generated/da-v2.json | 3 +- src/i18n/generated/de-v2.json | 5 +- src/i18n/generated/en-v2.json | 3 +- src/i18n/generated/global-v2.json | 4 +- src/i18n/generated/no-v2.json | 5 +- src/i18n/generated/sv-v2.json | 5 +- .../invoicing_period/xlvask_review.json | 3 +- .../phrases/compat/invoice_period/flags.json | 2 +- .../invoicing_period/xlvask_review.json | 3 +- .../invoicing_period/xlvask_review.json | 3 +- .../global/shared/invoice_period/flags.json | 1 + .../invoicing_period/xlvask_review.json | 3 +- .../phrases/compat/invoice_period/flags.json | 2 +- .../invoicing_period/xlvask_review.json | 3 +- .../phrases/compat/invoice_period/flags.json | 2 +- .../invoicing_period/xlvask_review.json | 3 +- .../modules/Pos/DepartmentPosSync.vue | 2 +- .../components/InvoicingPeriodFlagList.vue | 21 ++- .../InvoicingBillingPeriodViewSelfWash.vue | 20 +- tests/e2e/i18n-v2-integrity.spec.ts | 45 +++++ ...xlvask-flag-to-selvvash-navigation.spec.ts | 172 ++++++++++++++++++ .../unit/i18n-xlvask-review-coverage.spec.js | 59 ++++++ tests/unit/invoicing-period-flag-list.spec.js | 83 ++++++++- tests/unit/self-serve-dynamic-image.spec.js | 59 ++++++ tests/unit/superuser-invoices-view.spec.js | 28 ++- .../xlvask-usage-department-filter.spec.js | 53 ++++++ .../unit/xlvask-usage-pagination-404.spec.js | 91 +++++++++ tests/visual-previews/AUT-1/desktop-after.png | Bin 0 -> 11836 bytes .../visual-previews/AUT-1/desktop-before.png | Bin 0 -> 11442 bytes tests/visual-previews/AUT-1/mobile-after.png | Bin 0 -> 11972 bytes tests/visual-previews/AUT-1/mobile-before.png | Bin 0 -> 11626 bytes tests/visual-previews/AUT-1/preview.html | 63 +++++++ 37 files changed, 946 insertions(+), 35 deletions(-) create mode 100644 scripts/aut-1-capture-hover-preview.mjs create mode 100644 tests/e2e/xlvask-flag-to-selvvash-navigation.spec.ts create mode 100644 tests/unit/i18n-xlvask-review-coverage.spec.js create mode 100644 tests/unit/xlvask-usage-department-filter.spec.js create mode 100644 tests/unit/xlvask-usage-pagination-404.spec.js create mode 100644 tests/visual-previews/AUT-1/desktop-after.png create mode 100644 tests/visual-previews/AUT-1/desktop-before.png create mode 100644 tests/visual-previews/AUT-1/mobile-after.png create mode 100644 tests/visual-previews/AUT-1/mobile-before.png create mode 100644 tests/visual-previews/AUT-1/preview.html diff --git a/scripts/aut-1-capture-hover-preview.mjs b/scripts/aut-1-capture-hover-preview.mjs new file mode 100644 index 00000000..2404b0fb --- /dev/null +++ b/scripts/aut-1-capture-hover-preview.mjs @@ -0,0 +1,142 @@ +#!/usr/bin/env node +// AUT-1 smoke run — capture the before/after visual diff for the +// `primary-button hover state` change in `src/assets/main.css`. +// +// Renders tests/visual-previews/AUT-1/preview.html in a real Chromium +// against the project's bundled Bulma stylesheet, then takes two +// screenshots: +// +// desktop-before.png — Bulma defaults, button idle (no hover effect). +// desktop-after.png — With the AUT-1 CSS rules applied, button +// hovered (lift + brightness shift visible). +// mobile-before.png — Same as desktop-before, captured at the +// Pixel 5 viewport. +// mobile-after.png — Same as desktop-after, captured at the +// Pixel 5 viewport. +// +// Output is written to tests/visual-previews/AUT-1/. The script is +// idempotent: existing files are overwritten, not appended to. +// +// Invoke with: `node scripts/aut-1-capture-hover-preview.mjs` +// (Chromium must already be installed via `npm run test:e2e:install`.) + +import { chromium } from "playwright"; +import { promises as fs } from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { dirname } from "node:path"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const REPO_ROOT = path.resolve(__dirname, ".."); +const PREVIEW_HTML = path.join( + REPO_ROOT, + "tests/visual-previews/AUT-1/preview.html", +); +const OUTPUT_DIR = path.join(REPO_ROOT, "tests/visual-previews/AUT-1"); + +// The AUT-1 hover rules — kept in lockstep with the diff in +// src/assets/main.css. We inject these via a + + +
+
Primary button — default
+ +
+
+
+
Primary button — hover
+ +
+ +