6.7 KiB
Release Candidate RC-02 — Final Release Report
Date: 2026-07-26
Branch: B2B
Completed
-
Storefront localization. Replaced remaining hardcoded English strings (rating/discount aria-labels, hero-carousel dots, product-carousel prev/next buttons, dialog close button, toast dismiss, QR-code alt text, bank-payment iframe title, guest checkout fallback name) with
translatepipe/service calls, backed by newcommon.*i18n keys in en/ru/hy. Commit:1163bfd. -
Empty-store wording. Audited every empty-collection branch across storefront, builder, and backoffice. Found and fixed one real defect: the category/subcategory empty states used "Oops!"/"Упс!" apology framing for a normal zero-results condition. Everywhere else in the codebase already correctly separates a real
error()branch from an empty-collection branch with distinct, neutral wording (verified across catalog, product, cart, wishlist/compare, admin list pages, dashboard, media, builder). Commit:1163bfd. -
Merchant-friendly wording (Monitoring/Analytics/Reports/Diagnostics). Analytics, Reports (moderation/reports), and Diagnostics were already clean — no raw HTTP/queue-worker strings found. Monitoring had three developer-facing spots: background queue slugs, webhook event keys, and the activity log's "api" category showing a raw
GET /api/products responded 200 in 84msline as the primary message. All three now show plain-language labels by default, with the raw string for API/error/warning events moved behind a collapsed "Technical details"<details>. Commit:ca343c4. -
Dialog consistency. Replaced all 12 native
confirm()calls and 4 nativealert()calls across cart, media library, static-pages editor, and 5 builder components. Confirms now use a new sharedapp-confirm-dialog(composes the existingapp-dialog+app-button— no new dependency), following the same local-signal pattern already used in admin-categories. Cart's alerts route through the existingUserNotificationServicetoast pipeline instead. Zero nativeconfirm/alert/promptremain in production code (verified by grep). Commit:6c6fa00. -
Images. Found and fixed a real defect:
getMainImage()'s no-photo fallback pointed at/assets/images/placeholder.svg, but that file (and the wholeassets/images/directory) never existed — any item with zero photos rendered a browser broken-image icon. Added the asset. Also added an(error)handler on every dynamic<img>that renders a user/admin-supplied URL (product card, cart line item, cart payment QR, product gallery main + thumbnails), so a 404'd image URL swaps to the placeholder instead of shipping broken. Commit:3e54e88. -
Legacy cleanup. Investigated
pages/category,pages/search,pages/item-detail,pages/info/**,pages/legal/**(40+ files) anddynamic-renderer/. First five were confirmed unrouted dead code (each had a live replacement already serving its traffic) — deleted outright.dynamic-renderer/was confirmed active (it's the live homepage rendering pipeline viaHomeComponent→WebsiteRuntimeFacade→PageRendererService/PageResolverService→DynamicPageLayoutComponent) — a prior doc note calling it "unwired" was stale and has been corrected.docs/TODO.md,docs/KNOWN-ISSUES.md,docs/FRONTEND-ROADMAP.md,docs/PROJECT_INDEX.mdupdated accordingly. Commit:a670ca9. -
Final QA.
npx tsc --noEmitclean after every commit above.ng serveproduction-mode build compiles with no errors. Manually smoke-tested in-browser: home page loads with zero console errors; cart page loads with mock data; the new clear-cart confirm dialog opens with correctly translated title/message/buttons, Cancel closes it without side effects, zero console errors throughout. Backoffice route requires an authenticated admin session (existingadminAuthGuardbehavior, unrelated to this pass) so the Monitoring page's new wording was verified by reading the compiled template/component, not by an authenticated click-through.
Known limitations
- The i18n string audit and empty-state audit were scoped to storefront/ customer-facing surfaces per the task list; backoffice/builder templates were spot-checked but not exhaustively re-audited for hardcoded strings.
app-confirm-dialogis a new small shared component (composes existingapp-dialog/app-button, no new library). It intentionally does not cover every dialog in the codebase — only the sites that were previously using nativeconfirm()/alert().- Backoffice Monitoring's Technical-details fix only touches the mock local
gateway (
AdminMonitoringLocalGateway); once a real API-backed gateway exists, it will need to populatetechnicalDetailthe same way to keep the "Technical details" affordance working. - No new automated tests were added for this pass (none existed for the touched components beforehand either); verification was typecheck + manual smoke test as described above.
Deferred items
- Everything already tracked in
docs/TODO.mdunder "Backend — skipped, doing together" remains deferred (bootstrap real content, builder publish/validate backend, backoffice CRUD, media pipeline) — explicitly out of scope per this task's "NO BACKEND CHANGES" instruction. - Non-blocking pre-existing items from prior RC passes noted in
docs/KNOWN-ISSUES.md(genuine brand-color contrast failures needing theme-owner sign-off, 2 large lazy chunks needing a dedicated split task,primeng/primeiconsremoval blocked on an unrelatedbarry-cachedependency issue) are unchanged by this pass.
Launch recommendation
Ready to ship from a customer-demo-polish standpoint: no native browser dialogs, no broken-image paths on the audited surfaces, no raw developer jargon in Monitoring's default view, no apology-toned empty states, and the five dead-code page directories are gone rather than lingering as demo-confusing zombies. The remaining known limitations above are scope boundaries (backend, exhaustive re-audit, test coverage) rather than found defects — recommend proceeding, with the backoffice-auth-gated smoke test as the one item worth a human doing a real authenticated click-through on before the actual demo.
Commits (this pass)
1163bfdfix(storefront): replace hardcoded strings with i18n, neutral empty-state wordinga670ca9chore(cleanup): delete unrouted legacy pages, update docs6c6fa00fix(ui): replace native confirm()/alert() with shared dialogs and toasts3e54e88fix(storefront): add missing placeholder image asset and onerror fallbackca343c4fix(backoffice): merchant-friendly wording in Monitoring