diff --git a/docs/RELEASE_REPORT.md b/docs/RELEASE_REPORT.md new file mode 100644 index 0000000..0ccc743 --- /dev/null +++ b/docs/RELEASE_REPORT.md @@ -0,0 +1,123 @@ +# Release Candidate RC-02 — Final Release Report + +Date: 2026-07-26 +Branch: `B2B` + +## Completed + +1. **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 `translate` pipe/service + calls, backed by new `common.*` i18n keys in en/ru/hy. + Commit: `1163bfd`. + +2. **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`. + +3. **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 84ms` line 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" + `
`. Commit: `ca343c4`. + +4. **Dialog consistency.** Replaced all 12 native `confirm()` calls and 4 + native `alert()` calls across cart, media library, static-pages editor, + and 5 builder components. Confirms now use a new shared + `app-confirm-dialog` (composes the existing `app-dialog` + `app-button` — + no new dependency), following the same local-signal pattern already used + in admin-categories. Cart's alerts route through the existing + `UserNotificationService` toast pipeline instead. Zero native + `confirm`/`alert`/`prompt` remain in production code (verified by grep). + Commit: `6c6fa00`. + +5. **Images.** Found and fixed a real defect: `getMainImage()`'s no-photo + fallback pointed at `/assets/images/placeholder.svg`, but that file (and + the whole `assets/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 `` 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`. + +6. **Legacy cleanup.** Investigated `pages/category`, `pages/search`, + `pages/item-detail`, `pages/info/**`, `pages/legal/**` (40+ files) and + `dynamic-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 via `HomeComponent` → `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.md` updated accordingly. + Commit: `a670ca9`. + +7. **Final QA.** `npx tsc --noEmit` clean after every commit above. + `ng serve` production-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 (existing `adminAuthGuard` behavior, + 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-dialog` is a new small shared component (composes existing + `app-dialog`/`app-button`, no new library). It intentionally does not + cover every dialog in the codebase — only the sites that were previously + using native `confirm()`/`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 populate `technicalDetail` the 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.md` under "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`/`primeicons` removal blocked on an unrelated `barry-cache` + dependency 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) + +- `1163bfd` fix(storefront): replace hardcoded strings with i18n, neutral empty-state wording +- `a670ca9` chore(cleanup): delete unrouted legacy pages, update docs +- `6c6fa00` fix(ui): replace native confirm()/alert() with shared dialogs and toasts +- `3e54e88` fix(storefront): add missing placeholder image asset and onerror fallback +- `ca343c4` fix(backoffice): merchant-friendly wording in Monitoring