7c9eb8b644 chore(release): merge develop into master — XL Vask integration fixes (Aug 15 2026) (#312)
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 <jeppe@copenhagentruckwash.io>
Co-authored-by: openhands <openhands@all-hands.dev>
2026-08-16 08:58:06 +02:00
2026-07-02 11:11:52 +02:00
2026-03-09 10:20:39 +01:00
2026-03-09 10:20:39 +01:00

truckwashdashboardsfrontend

This template should help get you started developing with Vue 3 in Vite.

VSCode + Volar (and disable Vetur).

Customize configuration

See Vite Configuration Reference.

Project Setup

npm install

Contributing Changes

Create a scoped feature branch, push it, and open a pull request targeting master. Do not push directly to master. Merge only after the Required CI check succeeds, all review conversations are resolved, and the branch is up to date. Use squash merge so master retains linear history.

See .github/BRANCH_PROTECTION.md for the repository policy, rollout checks, and emergency bypass procedure.

Compile and Hot-Reload for Development

npm run dev

By default, the Vite dev server proxies /api/* to the remote stable API at https://api-v2.truckwash.io/master/api. This lets the Vue app run locally without a local PHP API container.

To develop against a local PHP API instead:

$env:VITE_API_PROXY_TARGET="http://localhost"; npm run dev

To use another remote API route:

$env:VITE_API_PROXY_BASE_PATH="/canary/api"; npm run dev

TLS certificate validation is enabled for proxied HTTPS APIs by default. If you are using a trusted local HTTPS API with a self-signed certificate, you can opt out explicitly:

$env:VITE_API_PROXY_TARGET="https://local-api.test"; $env:VITE_API_PROXY_SECURE="false"; npm run dev

For compatible local gateways that expect the /api prefix to be preserved:

$env:VITE_API_PROXY_TARGET="http://localhost"; $env:VITE_API_PROXY_STRIP_PREFIX="false"; npm run dev

Compile and Minify for Production

npm run build

Playwright Batched Chromium Runs

Run default e2e tests in deterministic 25-test shards across chromium-desktop and chromium-mobile:

npm run test:e2e:batched:chromium

Run the same flow and automatically re-run failed shards with PLAYWRIGHT_WORKERS=1:

npm run test:e2e:batched:chromium:rerun-failed

Optional overrides:

PLAYWRIGHT_BATCH_SIZE=25
PLAYWRIGHT_BATCH_WORKERS=2
PLAYWRIGHT_BATCH_DEV_PORT=5193

You can also forward Playwright args:

npm run test:e2e:batched:chromium -- --grep @smoke

Artifacts and summaries:

  • output/playwright/batched-chromium/last-run.json
  • output/playwright/batched-chromium/failed-shards.json
  • output/playwright/batched-chromium/report-index.html
  • output/playwright/batched-chromium-shard-<i>-of-<n>/report/index.html
  • output/playwright/batched-chromium-rerun-shard-<i>-of-<n>/report/index.html

Playwright Full E2E

Run the permanent grouped full-suite entrypoint with a hard max of 5 total workers across the browser-engine groups:

  • Chromium
  • WebKit
  • Firefox
npm run test:e2e:ci

The full CI matrix is ordered by browser engine, then device class, then user role:

  • browsers: chromium, webkit, firefox
  • devices: mobile, desktop, tablet
  • roles: superuser, admin, customer, subuser

Run a single full-suite slice for one role and one Playwright project:

npm run test:e2e:full:slice -- --role=admin --project=webkit-tablet

Default worker allocation:

PLAYWRIGHT_PARALLEL_WORKERS_CHROMIUM=2
PLAYWRIGHT_PARALLEL_WORKERS_FIREFOX=1
PLAYWRIGHT_PARALLEL_WORKERS_WEBKIT=1

Optional overrides:

PLAYWRIGHT_PARALLEL_BASE_PORT=5191
PLAYWRIGHT_PARALLEL_WORKERS_CHROMIUM=2
PLAYWRIGHT_PARALLEL_WORKERS_FIREFOX=1
PLAYWRIGHT_PARALLEL_WORKERS_WEBKIT=1

The runner fails fast if the combined worker count exceeds 5.

GitHub Actions keeps the full browser/device/role matrix stable by capping full-suite matrix parallelism at 2 jobs, running each full slice with PLAYWRIGHT_WORKERS=1, wrapping Docker Playwright runs with systemd-inhibit when available, and setting PLAYWRIGHT_VIDEO_MODE=off for the full matrix. The E2E network harness serves Font Awesome from local fixtures so WebKit page loads and visual snapshots do not depend on CDN/TLS availability. Traces and screenshots are still retained on failure.

Artifacts and summaries:

  • output/playwright/ci-parallel-report/index.html
  • output/playwright/ci-parallel-chromium/report/index.html
  • output/playwright/ci-parallel-firefox/report/index.html
  • output/playwright/ci-parallel-webkit/report/index.html
  • output/playwright/test-lists/<project>-<role>.txt
  • output/playwright/test-lists/<role>-<project>.txt (legacy compatibility copy)

Android App Icon

The Play Store Android package is built from the Capacitor project in android/. The legacy Bubblewrap/TWA project at the repository root is not used by npm run mobile:android:bundle.

The native launcher and store icons use the opaque iOS marketing icon as their shared master so Android and iOS keep the same white background:

ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png

Regenerate the checked-in launcher assets after changing that source image:

npm run mobile:android:icons

Check that the generated Android launcher assets are current:

npm run mobile:android:icons:check

npm run mobile:android:sync runs the icon generator before building and syncing the Capacitor Android project. The generator updates android/app/src/main/res launcher assets, public/icons/icon-192x192.png, public/icons/icon-512x512.png, and store_icon.png.

Mobile Store Releases

Signed Android and iOS store artifacts are built through the GitHub Actions Mobile Store Artifacts workflow. By default, current master after green Automated Tests uploads Android to Google Play production and uploads iOS to App Store Connect.

See docs/mobile-artifacts.md for workflow triggers, required secrets, and local mobile checks. See docs/app-store-release.md for App Store Connect release preparation and review notes. For a separate development-signed IPA that can be installed on an approved iPhone from Ubuntu over USB, see docs/ios-device-debug.md.

Bubblewrap (TWA) Build and Install

To build and install the Trusted Web Activity (TWA) using Bubblewrap, use the following commands:

Build the TWA

bubblewrap build

Install the TWA on a connected device

bubblewrap install
S
Description
Staging repo for pleno-vue (CI + promotion to GitHub)
Readme
146 MiB
Languages
JavaScript 57%
Vue 30.7%
CSS 7%
TypeScript 4.6%
HTML 0.5%