diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md index 13f46c8..634a9d2 100644 --- a/PROJECT_STATE.md +++ b/PROJECT_STATE.md @@ -818,3 +818,57 @@ scenarios, demo manifest, About page). Gap audit: `docs/demo-release/current-dem every batch was tested locally, deployed to Unraid, and re-verified live before moving to the next. See `artifacts/demo-release/final-summary.md` for the definitive acceptance evidence. + +## Final product polish: Fleet Ops rebrand, trilingual i18n, adaptive guide (2026-08-03) — MERGED TO MASTER + +- Rebranded the product to **Fleet Ops** across the frontend, backend defaults and the + knowledge base; made `nl-BE` (default)/`en-GB`/`fr-BE` full first-class languages via + i18next (eager-bundled resources, persisted language switcher in topbar + mobile + drawer, `Intl` date/number formatting, a coverage test that fails the build on any + missing/empty translation key across all 14 namespaces). +- Backend dynamic content (demo scenarios, blocked-reason text, integration status) + converted from fixed English/Dutch prose to stable message codes + params so the + frontend localizes it (`DemoScenarioOut`/`DemoIntegrationSummaryOut` schema changes). + The demo knowledge base gained a fully translated NL/EN/FR procedure corpus (11 + documents each, including a new "vehicle availability" procedure) with per-language + retrieval and localized evidence-state messages. +- Demo Guide became breakpoint-adaptive: docked rail (≥1440px), a floating panel that + auto-collapses to a persistent closable progress chip (701–1439px), and a + collapsed/half/full bottom sheet (≤700px) — with scroll+focus+highlight on "go to this + step", Escape handling, and `prefers-reduced-motion` support. +- Data Quality Workbench got accessible choice-card decisions with a clear + primary/secondary/tertiary action hierarchy; Automation ledger groups repeated + successes with meaningful short refs; Audit trail groups events by correlation id with + human action labels and readable before/after diffs; Attention Queue/Today's + movements/Vehicles/Bookings/Data Quality rows are fully clickable (stretched-link + pattern, independent secondary links, keyboard + mobile support). +- Two real bugs found and fixed along the way: a mobile topbar overflow at 421–440px + caused by the new language switcher (moved the switcher into the mobile drawer at + ≤960px and widened the compact-topbar breakpoint to 440px), and two dangling + `aria-labelledby` references (`SectionHeading` never set the referenced `id`). +- Full test suite: 131 backend tests, Ruff, mypy, TypeScript build, and 92 Playwright + tests (new: `i18n-coverage`, `clickable-rows`, `responsive-i18n` covering all 7 + brief-specified breakpoints × 3 languages, plus 3 new adaptive-guide tier tests) — all + green. All pre-existing Playwright specs updated for the new nl-BE default (either + translated assertions or an explicit English-locale override where the spec was + originally authored against English copy). +- Clean-checkout drill performed in a fully isolated Docker Compose project (separate + ports/volumes, no shared n8n) from a fresh local clone at the feature-branch head — + 131 backend tests, lint, build and all 92 Playwright tests green from empty volumes; + live EN/FR knowledge-assistant spot check; `scenario_integrity.all_ready: true` on + reset; isolated stack torn down afterward, original dev environment untouched. +- Deployed to Unraid twice: once for the feature branch (commit `845db14`) for + pre-merge live validation, once for the merged `master` (commit `18a765d`) for the + final release — both times via the established `git archive` → `scp` → + extract → `.deploy/source-revision` → rebuild `api`/`web` method, with migrations, + reseed, full backend+Playwright gates, console/network inspection and demo reset + re-verified live each time. +- Master baseline was confirmed unchanged (`e0c7ed6`, matching the previously recorded + baseline) before merging; `git merge-tree` dry run showed zero conflicts. Merged via + `git merge --no-ff` (commit `18a765d`), all gates re-run post-merge, pushed to Gitea, + redeployed. Feature branch was not deleted. +- Full evidence: `artifacts/fleet-ops-release/final-summary.md` (commits, branding, + locales, translation/knowledge-base/guide/data-quality/automation/audit evidence, all + test results, clean-checkout result, deployment evidence for both the feature branch + and master, responsive/accessibility results, known limitations, rollback procedure) + plus 10 screenshots in `artifacts/fleet-ops-release/screenshots/`. diff --git a/artifacts/fleet-ops-release/final-summary.md b/artifacts/fleet-ops-release/final-summary.md new file mode 100644 index 0000000..55721ed --- /dev/null +++ b/artifacts/fleet-ops-release/final-summary.md @@ -0,0 +1,155 @@ +# Fleet Ops release — final-product-polish evidence + +## Result: PASS + +## Commits + +- Original feature-branch baseline before this task: `257a4cf` (`docs(polish): audit finale demo-afwerking`) +- Feature-branch commits added this task, on `feat/mobilityops-functional-completion`: + - `337f871` — polish: rebrand to Fleet Ops, add trilingual i18n, adaptive demo guide, and UX overhaul + - `845db14` — fix: mobile topbar overflow at 421-440px and add trilingual responsive coverage +- Feature branch final commit: `845db14e172539b1d10e40f6a3249a72122deb41` +- `master` before merge (verified against the previously recorded baseline): `e0c7ed60112510687627d20a957af91c8b9db7f8` — unchanged, no unexpected commits, no conflicts (confirmed via `git merge-tree` dry run before merging) +- Merge commit on `master`: `18a765d62345ea9a6660d04fb868f218cf4d0b6e` (`merge: release Fleet Ops multilingual demo`, `--no-ff`) +- Final `master` commit (pushed and deployed): `18a765d62345ea9a6660d04fb868f218cf4d0b6e` +- Deployed commit on Unraid (`.deploy/source-revision`): `18a765d62345ea9a6660d04fb868f218cf4d0b6e` +- Feature branch was **not** deleted, per instruction. + +## URL + +- Live review deployment: `http://192.168.10.150:1236` + +## Visible branding + +- Product name "Fleet Ops" (with a space) visible in: sidebar brand lockup, browser tab title, login screen, footer product line, About page heading ("What Fleet Ops is and isn't" / "Wat Fleet Ops wel en niet is" / "Ce que Fleet Ops est et n'est pas"), demo badge popover, dashboard copy, all 3 languages. +- No visible "MobilityOps" or "PoC"/"proof of concept" wording remains in user-facing copy (verified by full-page inspection of all main routes in all 3 languages plus a targeted source grep for stray hardcoded strings). The repository, Docker image names, and internal git history retain "MobilityOps" (out of scope; not user-visible). +- Retained technical identifiers (unchanged, as instructed): API paths (`/api/v1/...`), Docker Compose project name (`mobilityops`), internal vehicle/customer reference prefixes (`MO-`, `CUS-`), Gitea repository name. + +## Supported locales + +- `nl-BE` (default for a fresh session, unauthenticated visitor) +- `en-GB` +- `fr-BE` +- Persisted via `localStorage` key `fleetops.language`; survives refresh, logout/login, and demo reset. No flags used — accessible `