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
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user