Files
Bernd Rodler b98ab59f0d fix: Phase 2 QA — all 25 remaining HIGH/MEDIUM/LOW issues
HIGH fixes (7):
- H1: VNCdirectory admin i18n — 30+ translation keys added
- H2: handleSave try/catch with error toast
- H3: Free/busy accountId scoping
- H4: cancelEventBookings filter by eventId
- H5: Resource picker static apiFetch import
- H6: Sharing-store toast messages via lastMessage state
- H7: roleLabel for all resource types

MEDIUM fixes (11):
- M1: identitySignatureMap cleanup on delete
- M2: Now-line relative positioning
- M3: Radial menu disabled item keyboard nav
- M4: Radial menu stable event listener via refs
- M5: cancelBooking error on missing booking
- M6: PasswordRow isMasked state flag
- M7: Extract shared rights into lib/sharing-rights.ts
- M8: VNCtalk client server-side guard
- M9: Collabora configManager instead of process.env
- M10: CONFIG_ENV_MAP VNCdirectory fields
- M11: SENSITIVE_CONFIG_KEYS field name unification

LOW fixes (7):
- L1-L3: Unused imports removed
- L4: aria-labels on close, clear, search, spinner
- L5-L7: Comments for intentional patterns, null guard
2026-08-07 14:21:07 +02:00

5.9 KiB
Raw Permalink Blame History

Phase 2 QA Report — v1.7.9 → v1.8.0

Date: 2026-08-07
Branch: feat/phase2-signatures-sharing → main
Sandbox: https://vncmail.sandbox.vnc.de (ArgoCD vncmail-dev)
Scope: All 14 Phase 2 features (59 files, +7,767/-122 lines)


Feature Build Status

# Feature Built QA Status
P2.1 Extended Signatures 4 issues (1 CRITICAL FIXED, 3 MEDIUM)
P2.2 Create Appointment from Email 0 issues
P2.3 Folder Sharing 4 issues (1 CRITICAL FIXED, 3 HIGH)
P2.4 Calendar Dashlet 1 issue (LOW)
P2.5 Email Import 3 issues (1 CRITICAL FIXED, 2 LOW)
P2.6 Contact Import 0 issues
P2.7 Free/Busy View 3 issues (1 HIGH, 2 MEDIUM)
P2.8 Resources/Equipment Booking 5 issues (2 HIGH, 2 MEDIUM, 1 LOW)
P2.9 VNCtalk Video Meeting 1 issue (MEDIUM)
P2.10 Collabora Online Editing 1 issue (MEDIUM)
P2.11 Calendar Enhancements 0 issues
P2.12 Action Wheel Radial Menu 1 issue (MEDIUM)
P2.13 VNCdirectory IDP Admin 3 issues (2 HIGH, 1 MEDIUM)
P2.14 Share Files by Email 0 issues

CRITICAL Issues (4 found, 4 fixed)

C1 — Missing signatures translation namespace FIXED

  • Files: signature-settings.tsx:21, signature-editor-modal.tsx:104
  • Impact: All UI strings rendered as raw key strings (e.g., signatures.title)
  • Fix: Added "signatures" namespace with 27 keys to locales/en/common.json

C2 — Missing settings.tabs.signatures translation key FIXED

  • File: app/(main)/[locale]/settings/page.tsx:652
  • Impact: Settings page tab label rendered as raw key string
  • Fix: Added "signatures": "Signatures" to settings.tabs section

C3 — Missing settings.importer translation namespace FIXED

  • File: components/settings/import-settings.tsx:16
  • Impact: All import UI strings rendered as raw key strings
  • Fix: Added "importer" namespace with 18 keys under "settings"

C4 — sharedWithMe never populated in sharing-store FIXED

  • File: stores/sharing-store.ts:237
  • Impact: "Shared with me" tab permanently empty — accept/decline workflow dead
  • Fix: Added discovery logic for incoming mail/calendar/addressBook shares by checking isShared + myRights properties

HIGH Issues (7 remaining)

H1 — VNCdirectory admin tab has no internationalization

  • File: app/(main)/admin/_tabs/vncdirectory.tsx
  • Impact: All 50+ strings hardcoded in English — no translation support
  • Recommendation: Add admin.vncdirectory.* translation keys

H2 — VNCdirectory admin handleSave has no try/catch

  • File: app/(main)/admin/_tabs/vncdirectory.tsx:104-123
  • Impact: Network failure on save crashes admin UI silently
  • Recommendation: Wrap in try/catch, show error toast

H3 — Free/busy queryAllCalendarEvents queries all accounts indiscriminately

  • File: lib/calendar-freebusy.ts:140-143
  • Impact: Free/busy results mix events from all connected accounts
  • Recommendation: Accept an accountId parameter to scope the query

H4 — cancelEventBookings ignores _eventId parameter

  • File: stores/resource-store.ts:139-153
  • Impact: Cancelling a single event's bookings removes ALL resource bookings
  • Recommendation: Filter by eventId before cancelling

H5 — Resource picker dynamic import in hot loop

  • File: components/calendar/resource-picker.tsx:75
  • Impact: apiFetch imported once per resource item — N× network chunk requests
  • Recommendation: Import at module top level

H6 — Hardcoded English toast messages in sharing-store

  • File: stores/sharing-store.ts:374,398,421,430,437
  • Impact: Toast notifications always in English regardless of user locale
  • Recommendation: Pass translation keys or use useToastStore with i18n

H7 — roleLabel only handles mailbox kind

  • File: stores/sharing-store.ts:69-72
  • Impact: Calendar/addressBook/file share roles show raw internal strings instead of labels
  • Recommendation: Add label mappings for all resource types

MEDIUM Issues (11 remaining)

  1. identitySignatureMap not cleaned up on signature delete — stale references
  2. Duplicated rights detection logic between sharing-store and API route
  3. Free/busy "now" line absolute positioning without relative parent
  4. Radial menu keyboard nav skips disabled items but can land on disabled
  5. Radar menu re-registers event listener on every activeIndex change
  6. configManager import pattern in VNCtalk client may not be safe server-side
  7. Collabora uses direct process.env access instead of configManager
  8. CONFIG_ENV_MAP missing most VNCdirectory fields for env var overrides
  9. SENSITIVE_CONFIG_KEYS field name mismatch between types.ts and vncdirectory-config.ts
  10. cancelBooking silently fails on missing booking ID
  11. PasswordRow sentinel value '••••••' is a design smell

LOW Issues (7 remaining)

  1. Unused imports: Mailbox in email-import.ts, isArchiveName in eml-import.ts, toBase64 in email-import.ts
  2. Missing aria-label on close buttons in signature editor and import settings
  3. Resource picker spinner missing role="status" and aria-label
  4. Free/busy slot! non-null assertion is fragile
  5. parseDurationMs duplicates existing duration parsing logic
  6. Mini-calendar dashlet uses imperative fetchEvents outside reactive lifecycle
  7. Search input in resource picker missing aria-label

Release Recommendation

APPROVED with noted issues. The 4 CRITICAL bugs are fixed. The 7 HIGH and 13 MEDIUM/LOW issues are non-blocking but should be addressed in the next sprint. All 14 features are functional and code-complete.

Test URL: https://vncmail.sandbox.vnc.de (ArgoCD syncs from dev branch)

Commit: 42a7b67e (main)