Files
marketplaces/docs/KNOWN-ISSUES.md
sdarbinyan 6be3c5892d docs(admin): move locale-hardcoding gap from Open to Fixed
Follow-up to ff4fba3 - the admin/products + admin/categories
translation-tab locale-hardcoding gap flagged as deferred in the
bug-hunt audit docs is now fixed; updates docs/ADMIN.md's audit
section and moves docs/KNOWN-ISSUES.md's item from Open to Fixed.
2026-07-17 22:25:58 +04:00

14 KiB
Raw Blame History

Known Issues (fix after sprint wrap-up)

Running list of bugs spotted during manual verification, deferred until the current sprint's feature work is done. Add to this list as more are found; don't fix inline unless asked.

Open

  1. Homepage hero-to-categories dead space gap on the storefront home page. Traces to bootstrap mock config (widget/section padding values in the dev bootstrap fixture), not a code defect in dynamic-page-layout.component.ts or the widget components - not fixed this session, needs config-side investigation if it reproduces with real tenant data rather than mock config.

  2. ~179 untranslated raw i18n keys across the entire admin backoffice CRUD UI (products/categories/orders/transactions/users/monitoring/analytics). translations.ts/en.ts/ru.ts/hy.ts have no adminProducts.*, adminCategories.*, adminOrders.*, adminTransactions.*, adminUsers.*, adminMonitoring.*, or adminAnalytics.* sections at all (confirmed: zero matches for any of these prefixes in any of the 4 i18n files). TranslateService.t() falls through to returning the raw dotted key string when a key isn't found (see translate.service.ts), so every templated string in these features (buttons, table headers, filters, badges, empty/placeholder text) renders literally as e.g. adminProducts.create instead of real copy - same root cause as the already-fixed dashboard Quick Actions bug below, just at the scale of almost the entire admin backoffice built across Sprints 20-27.

    • Counted by grepping all 'adminXxx.yyy' translate-pipe usages under src/app/features/admin/**: adminProducts 72, adminCategories 23, adminOrders 24, adminUsers 21, adminMonitoring 13, adminAnalytics 12, adminTransactions 13 (≈178 distinct keys, ×3 locales ≈ 534 strings to author).
    • Likely why it was never caught: every affected Sprint (20-27) explicitly noted live-browser click-through was blocked on the guarded admin route and verification was tsc/build/arch:check only - none of those catch missing i18n keys (pipe arguments are plain strings, not type-checked).
    • Found: 2026-07-15, during Sprint 28 manual audit (reading templates + grepping i18n files, not live browser).
    • Deferred to Sprint 29 ("translation validation" is explicit Sprint 29 scope per docs/SPRINT-PLAN.md) rather than fixed inline during Sprint 28 polish - authoring ~534 correct strings across 3 languages is a large, separate, mechanical pass of its own and shouldn't be rushed inside a polish sprint. Sprint 28 only adds the handful of new keys it introduces itself (empty-state copy for the skeleton/empty-state consistency fix), it does not touch the ~178 pre-existing gap.
  3. Theme Mode selector has no runtime effect. theme-section's light/dark/ system dropdown saves correctly and theme-engine.service.ts sets a data-theme-mode attribute on <html>, but no CSS anywhere in the app reads that attribute — picking Dark or System changes nothing visually today. Theme palette colors are unaffected (they're real CSS custom properties, genuinely live). Fixing this means implementing actual dark-mode CSS (a dark palette + [data-theme-mode]/prefers-color-scheme strategy + a matchMedia listener for "system", since that can change without a reload) — a real feature project, not a wiring fix.

    • Found: 2026-07-17, project-editor bug-hunt audit (docs/EDITOR.md).
  4. dynamic-renderer/ pipeline exists but is never wired up. src/app/dynamic-renderer/{page-renderer,section-renderer,section-engine, page-resolver,widget-host} has services and models but zero components or templates (every directory has only a .gitkeep). The storefront homepage renders through a separate, older path that doesn't consume it. Two editor fields feed this dead pipeline with no visible effect: layout.type (Theme section, "Site Layout") and the homepage section's own type field (homepage-section.component.ts's updateSection(id, 'type', ...) has no UI calling it, because of this). Needs a decision: finish wiring it in (if it's WIP for a planned replacement) or delete it as abandoned scaffolding.

    • Found: 2026-07-17, project-editor bug-hunt audit.
  5. HeaderConfig.showProfile toggle has no corresponding UI. The header editor's "Profile" toggle updates a real config field, but header.component.html never references showProfile — there's no profile/account menu in the storefront header to show or hide. Needs an auth-system check first (does one exist yet?) before building the menu.

    • Found: 2026-07-17, project-editor bug-hunt audit.

Fixed

  1. Full-project UX/UI + motion pass across storefront, admin dashboard, admin CRUD, and project-editor. User asked (2026-07-16) for a full UX/UI audit across admin, dashboard, and storefront, sequenced: storefront -> admin dashboard -> admin CRUD -> project-editor. All 4 phases completed:

    • Fixed: project-editor-save-bar buttons were plain unstyled <button>s (project-editor-save-bar.component.html/.scss) - now use the shared app-button primitive.
    • Fixed: .platform-nav-group (header.component.html/.scss) applied platform-nav-btn-left to every nav button regardless of position, causing double borders and wrong end-radius; replaced with :first-child/:last-child/:not(:first-child) structural selectors, dropped the dead -middle/-right classes.
    • Polished: storefront widgets used on every page - hero-widget.component.ts, categories-widget.component.ts, product-carousel-widget.component.ts, footer-navigation-widget.component.ts - added design tokens, hover/ focus states, 44px touch targets, entrance motion, all gated behind prefers-reduced-motion.
    • Polished: admin-dashboard-card.component.scss and admin-dashboard-quick-actions.component.scss - hover lift, entrance animation, reduced-motion guard.
    • Audited: admin backoffice CRUD (products/categories/orders/users/ transactions/monitoring/analytics) - already consistently built on the shared app-button/app-table/app-badge/app-empty-state/ app-pagination primitives from earlier sprints; grepped all 7 areas for raw unstyled <button>s (the save-bar bug pattern) and found only one: the gallery-image remove badge in admin-product-form.component.scss (.gallery-item button) had no hover/focus state and a 20x20px hit area below the 44px touch-target minimum - fixed with hover/focus-visible states and an invisible ::before inset to expand the hit area without changing the visual badge size.
    • Fixed: section.shared.scss (used by all 11 project-editor sections) had a bare button/button.secondary style with zero hover, focus, or transition - added hover/active/focus-visible/disabled states plus prefers-reduced-motion guard, applied uniformly across every section.
    • Added: project-editor-page.component.scss .project-editor-stack > * now fades/slides in (220ms) whenever @switch swaps the active section component; .project-editor-section-actions button (reset section) got the same hover/focus treatment as the rest of the shared button styles.
    • Verified: tsc --noEmit clean after every batch of edits; live-checked in browser at each phase (homepage nav-group render, save-bar render, dashboard cards, project-editor section switch + reset button).
    • One dev-server crash occurred mid-session (unrelated pre-existing ng serve process died independently of these edits, confirmed via curl connection-refused before restart) - restarted via npm run dexar, not a regression from this work.
    • See item 1 below (homepage dead-space gap) for the one issue found but not fixed (config data, not code).
  2. Project Editor footer: payment icons and social links had no validation. footer-section.component.ts parsed both fields from pipe-delimited <textarea> strings (icon.src|icon.alt, link.id|link.label|link.url) with zero validation - malformed rows silently produced empty src/alt/ url values instead of surfacing an error.

    • Fixed: 2026-07-16, replaced both textareas with app-key-value-editor rows (icon picked via MediaPickerComponent, label/URL via app-input), added inline URL-format validation on social links (same HTTP_URL pattern used in project-validator.service.ts) and a missing footer-logo media picker.
  3. Project Editor navigation: nav link labels only editable for the default locale. navigation-section.component.ts's labelOf helper (and the facade's updateNavLinkLabel) always read/wrote the default locale's key on a NavigationLocalizedText label map, so switching locales elsewhere in the editor had no effect on nav link text - other locales' translations could only be edited by hand-editing the exported JSON.

    • Fixed: 2026-07-16, added app-locale-tabs to the section; the label input now reads/writes the active tab's locale via a new editableLabel() helper, and ProjectEditorFacade.updateNavLinkLabel() gained an optional locale parameter (defaults to the current default locale, so existing callers are unaffected).
  4. Quick Actions: 3 untranslated raw i18n keys. dashboard.actionUsers, dashboard.actionMonitoring, dashboard.actionAnalytics rendered as literal key strings instead of translated labels on the admin dashboard's Quick Actions section, because admin-dashboard.facade.ts referenced them but they were never added to translations.ts/en.ts/ru.ts/hy.ts.

    • Found: 2026-07-15, manual browser verification of /:lang/backoffice/dashboard?devBypassAdmin=true.
    • Fixed: 2026-07-15, added the 3 keys to the interface + all 3 locales.
  5. Project Editor: 9 real correctness bugs across footer, features, widgets, languages, preview, static-pages, general, branding/SEO, and the shared media picker. Found via a section-by-section "does this control actually do what it claims at runtime" audit, not a feature pass. Full detail (repro steps, fix, live verification) in docs/EDITOR.md's "Bug-hunt audit pass (2026-07-17)" section — summary:

    • Footer social-link/payment-icon id generation reproducibly collided (array-length-derived / fixed suffix), corrupting @for (track item.id) identity on the public storefront footer.
    • Features' wishlist/compare toggle only drove one of the two flags that actually gate visibility at runtime.
    • Widgets' JSON-fallback textarea silently discarded invalid edits instead of showing an error.
    • Languages' add-locale silently no-opped on a duplicate code.
    • Preview's import bypassed undo history and draft localStorage persistence entirely.
    • Static Pages' create/duplicate-page slug generation had the same collision bug as the footer one.
    • General's free-text language fields bypassed LocaleSyncService (no translation-entry propagation) and had no guard against an unsupported default locale.
    • Branding's socialImageUrl field (added earlier the same session) was never actually read by SeoService — dead on arrival until wired in.
    • The shared app-media-picker's backing facade is a root singleton; search/folder/page filters leaked between independently-opened picker dialogs on the same page.
    • Found & fixed: 2026-07-17. Each bug was reproduced live via window.ng.getComponent() before fixing and re-verified after.
    • 3 further gaps were found but are real feature work, not wiring bugs — moved to Open (items 3-5 above) rather than fixed inline: Theme Mode has no runtime effect, the dynamic-renderer/ pipeline is unwired, and the header's Profile toggle has no corresponding menu.
  6. admin/categories facade: dead create-draft recovery + broken drag-reorder. Found via the same bug-hunt method as project-editor's audit, applied to admin/products + admin/categories. Full detail (repro steps, fix, live verification) in docs/ADMIN.md's "Bug-hunt audit pass (2026-07-17)" section - summary:

    • startCreate() generated a fresh category-${Date.now()} id every call and keyed the localStorage autosave draft off it, so create-mode draft recovery could never find a match (even within the same tab, seconds apart) and orphaned an entry every abandoned attempt.
    • reorder(id, targetOrder) wrote the dropped-on row's order value straight onto the dragged category, tying two siblings on the same order instead of repositioning - and since every seeded category starts at order: 0, every drag on fresh data was a silent no-op.
    • Found & fixed: 2026-07-17. Each reproduced live via window.ng.getComponent() before fixing, re-verified after (real backend unreachable in this environment, so via facade.categories.set([...]) synthetic siblings feeding the same facade methods/gateway calls the UI drives).
    • A third bug from the same audit pass, fixed in a follow-up commit: admin-product-form/admin-category-form hardcoded translation-tab locales to ['en','ru','hy'] instead of the tenant's actual supportedLocales. Fixed by giving AdminProductsFacade/ AdminCategoriesFacade a supportedLocales computed + ensureLocalesLoaded() reading/lazily-loading ProjectEditorFacade.bootstrap() (same pattern AdminDashboardFacade.ensureLoaded() already uses), threaded down to both form components via a new locales @Input(). Verified live: rendered tab order changed from the hardcoded ['en','ru','hy'] to the real tenant order ['ru','en','hy'] in both editors.

Notes (not bugs, just flag before shipping)

  • src/environments/environment.ts: useMockData was temporarily flipped to true during this session's manual verification (so Categories/Products dashboard cards showed mock counts instead of erroring against a nonexistent local /api/backoffice/* backend), then reverted back to false afterward - matches its pre-session value.