Files
marketplaces/docs/KNOWN-ISSUES.md
sdarbinyan e4c1c6e2a0 docs: sync documentation after perf/a11y/release-candidate work
- PROJECT.md: Current Status updated (perf/a11y/RC walkthrough all
  done, new report docs added to index).
- FRONTEND-ROADMAP.md: RC PERF-01, RC A11Y-01, and Release Candidate
  walkthrough entries added; known-open-items list updated (2 new
  flags from RC walkthrough, primeng removal blocker, large chunks,
  backend-ready sprint explicitly deferred pending a real API contract).
- KNOWN-ISSUES.md: corrected item 6 (payment modal focus-trap
  assumption was wrong, now actually fixed); added items 9-12 (brand
  contrast failures, Contacts content gap, WYSIWYG editor mislabeled,
  primeng removal blocker); added 2 Fixed entries for this cycle's
  P0s (query-param routing, Categories CRUD).
- Graphify graph regenerated (graphify-out/, cache only, not tracked).
- Obsidian: skipped, no running Obsidian instance in this session.
- No architecture change this cycle (perf/a11y/bug fixes only) — no
  new ADR.
- No application code touched.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 10:51:05 +04:00

19 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.
  6. Payment modal / bank-payment iframe on Cart still custom, not app-dialog. Correction (2026-07-24, RC A11Y-01): the "already has focus-trap" assumption below was wrong — it had none. RC A11Y-01 ported app-dialog's confirmed- correct focus-trap/Escape/return-focus pattern directly onto it (docs/ACCESSIBILITY_REPORT.md), so the accessibility gap is closed. It's still a separate custom component, not the shared app-dialog itself — migrating it to the actual primitive remains a composition change, deliberately left out of every polish pass so far.

    • Found: 2026-07-23, RC-Premium-01 (docs/STORE_FRONT_UX_REVIEW.md).
  7. Cart's clearCart() uses native confirm(), no styled confirm dialog. No existing storefront pattern for a confirm-remove dialog to follow yet — introducing the first one is an architecture decision, not polish.

    • Found: 2026-07-23, RC-Premium-01.
  8. stars.component rating glyph color and a few legacy hex literals in pages/category/pages/search have no exact design-token match. Left as literals to avoid an unintended visual shift; needs a deliberate token-extension decision before normalizing.

    • Found: 2026-07-23, RC-Premium-01.
  9. Genuine brand-color contrast failures (WCAG AA). --border-color fails 3:1 UI-component contrast in every theme (1.24-1.42:1 measured); --success/--warning/--error/--info-color fail 4.5:1 when used as plain text-on-white in a handful of places. Real palette colors, not a token bug — fixing means visibly changing the brand, needs theme-owner sign-off.

    • Found: 2026-07-24, RC A11Y-01 (docs/ACCESSIBILITY_REPORT.md).
  10. Footer "Contacts" link has no static-page content in mock data. Unlike the "About" link (which was a route-name mismatch, fixed), no content exists for Contacts at all — needs a content decision, not a code fix.

    • Found: 2026-07-24, Release Candidate walkthrough (docs/RELEASE_REPORT.md).
  11. Builder's static-page body editor is hidden and mislabeled. The actual WYSIWYG content editor isn't on the "Content" tab (title/image only) — it's inside a collapsed <details> under "Advanced", labeled "Source HTML (advanced)" though it's the only way to edit page content. Works correctly once found; relocating/relabeling is a navigation decision, not a bug fix.

    • Found: 2026-07-24, Release Candidate walkthrough.
  12. primeng/primeicons still in package.json after their only consumer was deleted. npm uninstall fails (ETARGET) on a pre-existing, unrelated broken barry-cache devDependency resolution — fix that first, then drop the now-fully-unused dependency (likely closes most of the remaining bundle-budget overage in one move).

    • Found: 2026-07-24, RC PERF-01 (docs/PERFORMANCE_REPORT.md).

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.
  7. pages/category and pages/search hand-rolled skeleton markup replaced with shared app-skeleton. Both pages had their own .skeleton-card/.skeleton-image/.skeleton-line shimmer CSS with hardcoded hex colors, duplicating what app-skeleton already provides and what catalog-container/product-details-container already use.

    • Fixed: 2026-07-23, RC STORE-01 (docs/STORE_REVIEW.md).
  8. Cart's dead .email-form markup and CSS removed. Post-payment email/phone-capture form was commented-out markup with a matching ~90-line dead CSS block still shipping in the bundle.

    • Fixed: 2026-07-23, RC STORE-01.
  9. App-wide query-param routing broken (P0). language.guard.ts's legacy-URL redirect built the target with router.createUrlTree([...]) using a single path-segment string with the query string baked in, so it got percent-encoded into the path instead of parsed as query params (/edit/branding?devBypassAdmin=true/ru/edit/branding%3FdevBypassAdmin%3Dtrue, a dead route). This guard runs on every top-level route app-wide, so any bookmarked/shared deep link with query params was silently broken — found during the Builder RC walkthrough but affects all 3 surfaces.

    • Fixed: 2026-07-24, Release Candidate walkthrough (docs/RELEASE_REPORT.md), router.parseUrl() instead of a hand-built path segment.
  10. Backoffice Categories CRUD completely broken end-to-end (P0). admin-categories-gateway.token.ts resolved via RuntimeProviderStrategyService.getBackofficeProviderMode(), which — unlike getBootstrapProviderMode() — has no isLocalhost() fallback, so it always picked the real HTTP AdminCategoriesApiGateway instead of the local mock in an environment with no real backend. Combined with saveDraft() having no error handler: every create/publish click silently failed, dirty never cleared, and the unsaved-changes guard then blocked navigation with zero feedback.

    • Fixed: 2026-07-24, Release Candidate walkthrough, wired to the already-defined getCategoryProviderMode() + added the same isLocalhost() fallback getBootstrapProviderMode() already had. Live-verified: create/edit/reorder all persist correctly now.

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.