QA Promotion: Admin Hub Upload Centers, Faster ARM64 Builds, and Admin/Mail Grid Fixes
Executive summary
This release promotes a batch of development work into the QA environment (~8,300 lines changed across 79 files). The headline feature is Admin Hub upload-center management in the mail app: tenant-scoped upload-center lists, a pickup-frequency change/approval workflow, 30-day analytics with KPI tiles and a timeline chart, and a pickup-charge configuration browser. It also bundles a major build-infrastructure fix that resolves slow/hanging container builds on ARM64, several admin-portal grid bug fixes, and a set of mail grid, export, and selection corrections.
Why this was needed
Three needs drove this batch. (1) Operators needed an in-product way to manage upload centers, approve pickup-frequency changes, view usage analytics, and review charge rates, replacing the gaps in the new portal. (2) After migrating QA/Production hosts from AMD64 to ARM64, container builds slowed to 1h40m-2h or hung outright, blocking deployments. (3) QA filed multiple defects in the admin portal and mail grids (empty Email Reminders grid, wildly inflated pagination counts, missing tenant detail page, broken/awkward filters, and selection-unaware exports/downloads).
Client / user impact
- Admin/mail operators get new Admin Hub screens: upload-center list (with pickup frequency, pending-request indicator, and current charge rate inline), a detail page to submit/approve/reject/cancel pickup-frequency changes, a 30-day analytics dashboard (10 KPIs plus a daily area chart), and a pickup-charge browser.
- Deployments are unblocked: ARM64 builds are expected to drop from ~2 hours to under ~10 minutes.
- Admin portal fixes: the Email Reminders grid now loads data, Page Statistics shows correct pagination counts (was rendering ~18,000+ pages), a per-tenant Page Statistics detail page is restored, and Upload Tasks / Notification Policies gain Apply/Clear filter controls.
- Mail grid fixes: exports, sync, and bulk downloads now respect the user's row selection and active filters; empty contact fields show a placeholder instead of blank.
Technical scope
Notable changes bundled into this dev to qa promotion:
- Admin Hub upload centers (PR #986/#987): new mail routes under
/adminhub/upload-centers,/upload-centers/[id], and/pickup-charges; 14 endpoints wired viaadminHubUploadCenter.services.tswith dedicated TanStack queries/mutations under an["admin-hub", ...]key namespace; frequency-approval flow handling 409/403/404; charge rate-immutability on edits; adds Recharts ^3.8 for the timeline chart. - ARM64 build fix (PR #988): Dockerfile switched from
node:20-alpine(musl) tonode:20-bookworm-slim(glibc); movedpnpm.overrides(canvas to @napi-rs/canvas) to the rootpackage.json; addedsupportedArchitecturestopnpm-workspace.yaml; setCOREPACK_HOME=/opt/corepackso the non-root runtime user can read the prepared pnpm binary. - Admin portal fixes (PR #992/#994): Email Reminders list unwrap fix (BUG-037); Page Statistics pagination uses
totalPages/totalCountinstead of the domain stattotal_pages_count(BUG-038); new/page-statistics/tenant/[id]detail page with 4-tab grid and malformed-ID rejection (BUG-039); Apply/Clear filters on Upload Tasks and Notification Policies (Tenant/Event Type/Status). - Mail grid/export fixes (PR #997/#999/#1000/#1001): selection-aware xlsx export for batches and documents (BUG-022/BUG-007), selection-respecting bulk downloads/sync honoring inbox filters, and an empty-contact-field placeholder.
Risk & mitigation
Moderate, given the breadth. The build-infra change (base image, lockfile, overrides) is the highest-risk item: it alters how images are produced, so a bad lockfile could reintroduce slow builds or WASM SWC fallback. Mitigation: the commit ships an explicit post-deploy verification checklist (arch, glibc vs musl, no WASM fallback, expected build time). The Admin Hub feature is large but additive and net-new, with UI permission gates plus server-side enforcement; cache-invalidation and timezone edge cases were addressed in PR review. Grid/export and pagination fixes touch shared mail grid code, so regressions in unrelated grids are possible. Overall: changes are at QA, not Production, so issues are caught before client exposure.
QA validation focus
- Build/deploy: run the ARM64 verification steps (uname/arch, glibc not musl,
@napi-rs/canvasnotcanvas@2.x, no WASM SWC fallback) and confirm build time dropped. - Admin Hub: list shows pickup frequency, pending indicator, and charge rate; submit/approve/reject/cancel a frequency change (verify self-approve 403, duplicate-pending 409, out-of-scope 404); confirm analytics KPIs and timeline chart render and refresh after writes; verify pickup-charge edits cannot change an existing rate.
- Admin portal: Email Reminders grid populates; Page Statistics pagination count is realistic; tenant detail page opens via Details/deep link and rejects malformed IDs; Apply/Clear filters work on Upload Tasks and Notification Policies.
- Mail grids: with rows selected, confirm xlsx exports (batches + documents), sync, and bulk downloads include only the selection and respect active inbox filters; verify empty contact fields show the placeholder.
- Regression-check other mail grids (inbox, documents, batches) for layout/selection side effects.