QA Report โ 2026-05-02
Branch: dev
Tester: Claude (automated browser QA)
Target: https://humanwork-dev.vercel.app
Tested: 2026-05-02
Screenshots: /tmp/qa-screenshots/ (01โ36)
Executive Summaryโ
| Flow | Result | Blocker |
|---|---|---|
| Flow 1: AM Setup โ Client Onboarding | PARTIAL | Step 2 (Assign Specialists) completely blocked โ all seed specialists already assigned |
| Flow 2: Client Portal โ Chat Experience | PASS | Minor issues: accent color wrong, billing page empty, thread not renamed |
| Flow 3: Expert Queue | PARTIAL | Analytics broken, resolved items missing from Resolved tab, queue polluted with error items |
FLOW 1: AM Setup โ Client Onboardingโ
Overall: PARTIAL
Step-by-Stepโ
Step 1 โ Login as AM
- PASS: Clicked "Login as Account Manager" in debug panel โ redirected to
/am/orgs - PASS: Sidebar shows "h.work / Account Manager", footer shows
am@seed.humanwork.ai - Note: Seed email is
am@seed.humanwork.ai, notam1@humanwork.devas documented
Step 2 โ AM Orgs List
- PASS: Shows 3 existing orgs (Apex S, Apex R, Apex Q), all "Setup in progress"
- PASS: "+ New client" button navigates to
/am/orgs/new - Note: Trial ends date only populated for Apex S (8/1/2026); Apex R and Q show "โ"
Step 3 โ New Org Form (Step 1: Company Info)
- PASS: Form loads with all required fields: Company Legal Name, Workspace Slug, Industry, Primary Corporate Email Domain(s), Invite Email Address, Timezone
- PASS: Slug availability check works in real-time โ shows green "Available!" with preview URL
- PASS: Domain field accepts Enter-key to create tag pill
- PASS: Email domain validation enforced โ "Invite email must use an approved corporate domain." shown correctly when email doesn't match added domain
- PASS: "Continue to Assign Specialist โ" button enables when all required fields are filled
- PASS: Org created successfully โ redirected to
/am/orgs/[uuid]/setup/step2 - ISSUE (P2):
border: "1px solid var(--sand)"visible in domain input pill โ old token still rendering (tag background is blue-ish, not neutral)
Step 4 โ Assign Specialists (Step 2)
- FAIL โ P0 BLOCKER: Every specialist assignment attempt returns HTTP 400:
{"message":"This Specialist is already assigned to an active Org","error":"Bad Request","statusCode":400} - Tested: Bob Smith, Ellis Test, Alex Dev, Atlas Rivera, Finn A (finn49828) โ ALL fail with same error
- ISSUE (P0): "Available" badge shown in green on ALL specialists regardless of assignment status โ completely misleading
- ISSUE (P1): Error displayed as raw JSON string in page DOM, not a toast or styled error message:
{"message":"This Specialist is already assigned to an active Org","error":"Bad Request","statusCode":400} - ISSUE (P0): No specialists in the seed pool are assignable to a new org. Flow is completely blocked.
- Direct navigation to
/am/orgs/[uuid]/setup/step3returns 404 (no bypass possible)
Steps 5โ10 (Your Profile, Send Invite): NOT REACHED โ blocked by step 2
Top 3 Critical Issues (Flow 1)โ
- P0 โ ALL seed specialists already assigned to an active org; Step 2 of setup wizard is completely uncompletable with current seed data
- P0 โ "Available" badge displayed on specialists who are not available โ no visual distinction between assignable and non-assignable experts
- P1 โ Assignment failure displays raw JSON error, not a human-readable message
FLOW 2: Client Portal โ Chat Experienceโ
Overall: PASS
Step-by-Stepโ
Step 1 โ Login as Client
- PASS: Clicked "Login as Client" โ redirected to
/portal/chat - Note: Debug client is
ceo@techcorp.io(techcorp org), notamy@acmefinancial.comas documented in seed credentials
Step 2 โ Portal Landing
- PASS: URL is
/portal/chatโ - PASS: Sidebar shows org slug "techcorp.h.work" with icon
- PASS: "YOUR SPECIALISTS" section present with Nova Jones as "Primary specialist"
- PASS: "YOUR THREADS" section with "+ New Thread" button
- ISSUE (P1): All interactive buttons ("+New Thread", "Message", specialist avatar) render in blue (#3B82F6 approx), not Claret (
#7E1D1D). Root cause:--accentCSS variable not resolving to Claret on the deployed instance. This affects every accent-colored element site-wide.
Step 3 โ Thread Creation
- PASS: "+ New Thread" creates a new conversation
- PASS: URL updates to
/portal/chat/[uuid] - PASS: Chat view opens with "Nova is ready โ what can they help with?" empty state
- PASS: Header shows "Nova ยท Online ยท Support Specialist ยท Active ยท Web" correctly
- ISSUE (P2): Thread name remains "New thread" in sidebar โ not auto-renamed from first message content
Step 4 โ Sending a Message
- PASS: Input field accepts text; send button activates (stops being disabled)
- PASS: Message sent: "Hi Nova, I need help with a shipping delay for order #MLD-8821"
- PASS: User message bubble appears immediately on the right side
- ISSUE (P1): User message bubble is blue, not Claret โ confirms
--accenttoken broken site-wide
Step 5 โ AI Auto-Response
- PASS: AI response arrived within ~5 seconds
- PASS: Response shows "Nova ยท AI ยท just now" label
- PASS: Agent bubble renders correctly (dark card, left-aligned)
- Response text: "Hi! I'm the support assistant. I've received your message and will help you shortly. Could you tell me more about your issue?"
Step 6 โ UserFooter Links
- PASS: "Account Settings" link navigates to
/portal/admin/settings - PASS: "Billing" link navigates to
/portal/admin/billing - ISSUE (P2): Account Settings and Billing use a completely different layout (old-style admin panel with top nav + left sidebar) vs the portal chat (full-screen with sidebar). Jarring UX context switch.
- ISSUE (P2): Settings page shows "Organization Name: Acme Corp" but the portal shows slug "techcorp.h.work" โ org name and slug are inconsistent
- ISSUE (P2): Default Agent Name in settings is "Alex" but the actual AI responder was called "Nova" โ mismatch
- ISSUE (P1): Billing page โ "PLAN & USAGE", "RATE LIMITS", and "MESSAGE VOLUME (LAST 24H)" sections all render completely empty. No data, no loading state, no error message. Only "Plan Features" checklist renders.
- ISSUE (P2): "Log out" button on
/portal/admin/*pages does not redirect to/loginโ stays on the billing page URL
Top 3 Critical Issues (Flow 2)โ
- P1 โ
--accentCSS variable resolves to blue everywhere instead of Claret; affects user message bubbles, all CTAs, logos, badges platform-wide - P1 โ Billing page three data sections (Plan & Usage, Rate Limits, Message Volume) are completely blank with no feedback
- P2 โ Account Settings/Billing use old layout (jarring switch), org name/agent name inconsistencies, Log out doesn't work on admin pages
FLOW 3: Expert Queueโ
Overall: PARTIAL
Step-by-Stepโ
Step 1 โ Login as Expert
- PASS: Clicked "Login as Expert" โ redirected to
/workspace/queue - Note: Debug expert is
expert1@humanwork.devโ "David Kim" (per Settings)
Step 2 โ Queue Landing
- PASS: URL is
/workspace/queueโ - PASS: Queue loads with pending items and badge count
- ISSUE (P1): ALL 6 queue items show title "Agent service error: fetch failed" and are tagged CRITICAL. These are not real user conversations โ they appear to be webhook/API errors that got escalated as support tickets. No normal-priority or human-initiated queue items in seed data.
- PASS: Filter tabs (Pending / In Review / Resolved) visible
- PASS: Priority filters (All / Critical / High / Medium) functional
Step 3 โ Ticket Detail View
- PASS: Clicking a queue item loads the detail panel on the right
- PASS: "CUSTOMER CONVERSATION" section shows conversation messages
- PASS: "AI SUGGESTION" section shows: confidence bar (72%), risk label (MEDIUM), draft text, action buttons
- PASS: "INTERNAL COLLAB (HIDDEN FROM CUSTOMER)" section visible with note textarea
- PASS: Bottom composer shows "Write response as [Agent Name]..." with Send/Resolve/Defer/Reassign buttons
- Note: Different tickets show different agent personas (Max, Mei) โ persona assignment per ticket, not per expert user
Step 4 โ Accept & Send
- PASS: Button clicked โ shows "Sending..." loading state
- PASS: After completion, item removed from pending queue (count 6 โ 5)
- ISSUE (P1): No success toast or confirmation message after Accept & Send
- ISSUE (P2): View does not auto-advance to next pending ticket after action
Step 5 โ Internal Note
- PASS: Typed note in "Add internal note..." field โ "+ Note" button enabled
- PASS: Note submitted โ appears as "You ยท 0s ago" with note text in INTERNAL COLLAB section
- PASS: Note appears with distinct styling (yellow "Y" avatar, dark card)
- PASS: Cross-session data working: client message from Flow 2 appeared in expert ticket view
Step 6 โ Resolve
- PASS: "Resolve" button clicked โ ticket removed from Pending queue (count 5 โ 4)
- ISSUE (P1): Resolved items do NOT appear in the "Resolved" tab โ tab shows "Queue is clear / Nothing pending right now"
- ISSUE (P2): "RESOLVED 0" counter in queue sidebar does not update after resolving items
Step 7 โ Workspace Settings
- PASS: Navigates to
/workspace/settings - PASS: "Profile Settings" page loads with full name, display name, email (read-only), title, bio, avatar URL, phone fields
- PASS: Correct user info (David Kim / expert1@humanwork.dev)
- PASS: "Save changes" button present
Step 8 โ Workspace Analytics
- PARTIAL: Page loads at
/workspace/analytics - ISSUE (P1): Red error banner: "Analytics data unavailable. Contact your administrator if this persists."
- ISSUE (P1): All stat cards show 0: Conversations This Week (0), Queue Depth (0), Avg Resolution Time (โ), Total This Month (0) โ even though 4 items are in the queue
- ISSUE (P1): All chart sections show "No data available": Queue Status (Pending vs Resolved), Top Request Types, Pool Resolution Performance
Top 3 Critical Issues (Flow 3)โ
- P1 โ Analytics endpoint broken; all data 0 or unavailable
- P1 โ Resolved items disappear instead of appearing in Resolved tab; resolved counter never increments
- P1 โ Queue polluted with "Agent service error: fetch failed" CRITICAL items โ no real-world conversations in seed data for expert testing
GLOBAL / CROSS-CUTTING ISSUESโ
Design System (from iteration/autorun-20260501-07)โ
- P1 โ
--accentCSS variable resolves to browser-default blue (#3B82F6approx) everywhere instead of Claret (#7E1D1D). Likely the deployed build is not picking up the new globals.css or the Tailwind/CSS var isn't being overridden correctly. Affects:- Login "Send Code" button, "H" logo icon
- Portal "+ New Thread" button, user message bubbles, "Message" button
- Workspace nav active indicators, avatar backgrounds, "Accept & Send" button
- AM sidebar "H" logo, "+ New client" button, "Continue setup" links
- P2 โ Dark mode active by default (browser system preference = dark). ThemeProvider + flash prevention script appear to work correctly (no flash observed). Theme toggle not tested due to test flow focus.
- P2 โ Some legacy tokens (
--sand,--bg-canvas) still referenced in deployed components. The domain tag pill in AM new-org form appears to use residual old styling.
Seed Data Qualityโ
- P0 โ All experts already assigned to an org; Assign Specialists step is universally blocked
- P1 โ Expert queue contains only error-generated "Agent service error: fetch failed" tickets; no normal conversations
- P2 โ Duplicate test entries in specialist pool (Finn A ร 6+, Jordan Test ร 8+) โ noise in specialist search
- P2 โ Credential docs say
amy@acmefinancial.comfor client but debug login deliversceo@techcorp.io;am1@humanwork.devfor AM but actual isam@seed.humanwork.ai
PRIORITY LISTโ
P0 โ Blockers (flow completely broken)โ
- Assign Specialists: all seed specialists already assigned โ Step 2 of AM onboarding wizard is 100% blocked. Either the seed data needs to be reset (unassign all specialists from Apex orgs) or the one-org-per-specialist business rule needs to be relaxed for seed data. The setup wizard cannot be completed by any new org.
- "Available" badge shown on assigned specialists โ The pool list shows Available on every card even when the assignment call returns 400. The badge must reflect actual assignability, not presence in the pool.
P1 โ Major Issues (flow works but with significant friction)โ
--accenttoken resolves to blue site-wide โ All accent-colored UI (buttons, bubbles, logos, highlights) is blue instead of Claret. Investigate: is globals.css being correctly loaded on Vercel? Does the deployed bundle have the--accent: #7E1D1Ddefinition? Check with browser DevTools on prod.- Raw JSON error on specialist assignment failure โ The DOM renders
{"message":"...","statusCode":400}as visible text. This needs to be caught and displayed as a toast or inline error in human-readable form. - Analytics broken โ
/workspace/analyticsshows "Analytics data unavailable" and all-zero stats. The analytics API endpoint is failing. Queue depth shows 0 even though 4 items are pending. - Resolved items disappear, not archived โ After resolving a ticket via the Resolve button, it is removed from Pending but does not appear in the Resolved tab. The Resolved counter stays at 0. Items are being lost rather than archived.
- No Accept & Send feedback โ Action succeeds silently. User has no confirmation that the message was sent. Add a success toast: "Response sent."
- Billing page data sections blank โ Plan & Usage, Rate Limits, Message Volume all render empty with no loading state or error. The billing API calls are failing silently.
P2 โ Polish (works but feels rough)โ
- Thread not auto-renamed from first message โ New threads stay named "New thread" after client sends a message. Auto-name from message content or allow rename prompt.
- No auto-advance after queue action โ After Accept & Send or Resolve, the view drops to an empty "Select a ticket" state rather than advancing to the next pending item.
- Account Settings / Billing use old layout โ Navigating from the portal chat to settings/billing causes a jarring full-page layout change (old admin panel with top nav vs full-screen chat UI). These should share the same visual shell.
- Org name / Agent name inconsistency โ Settings shows "Org Name: Acme Corp" but portal slug is "techcorp.h.work". Default Agent Name "Alex" doesn't match the actual AI persona "Nova". Seed data coherence issue.
- Log out broken on /portal/admin/ pages* โ Clicking "Log out" on the admin panel pages doesn't redirect to /login.
- "RESOLVED 0" counter never updates โ Stats widget in the queue sidebar shows static 0 even after resolving items in the session.
- Duplicate test experts in specialist pool โ 6+ "Finn A" accounts, 8+ "Jordan Test" accounts pollute the Assign Specialists step 2 list, making it hard to find real specialists.
P3 โ Nice to Haveโ
- Seed credential docs should match actual debug login users (acmefinancial โ techcorp, am1 โ am@seed)
- Queue badge on "Expert Queue" heading always shows pending count regardless of which tab is active (Resolved tab shows badge "4" which is the pending count)
- Portal UserFooter theme toggle could be visible without scrolling in shorter viewports
- Consider adding a "Deselect" or "Clear" option on the Assign Specialists step so AM can start fresh without refreshing
Screenshots Indexโ
| File | Description |
|---|---|
| 01-login.png | Login page dark mode |
| 02-am-landing.png | AM /am/orgs list |
| 03-new-client.png | New org step 1 form |
| 04-new-client-filled.png | Form filled, domain input |
| 05-domain-added.png | Domain tag added, email validation error |
| 06-invite-valid.png | Valid form, continue button enabled |
| 07-step2-specialists.png | Step 2 loading spinner |
| 08-after-step1-submit.png | Step 2 loaded |
| 08b-step2-specialists.png | Step 2 full viewport |
| 09-step2-full.png | Specialist pool 1440px view |
| 10-bob-selected.png | Bob Smith selected |
| 11b-step2-error.png | Raw JSON error visible |
| 12-step3-profile.png | Ellis also fails |
| 13-step3-or-error.png | Finn A also fails |
| 17-client-landing.png | Client portal initial |
| 18-portal-chat.png | Portal chat /portal/chat |
| 19-new-thread.png | "Starting..." state |
| 20-thread-created.png | Thread created, chat open |
| 21-message-typed.png | Message in input |
| 22-message-sent.png | User bubble sent |
| 23-waiting-response.png | AI response received |
| 24-account-settings.png | /portal/admin/settings |
| 25-billing.png | /portal/admin/billing empty sections |
| 26b-expert.png | Expert queue with error items |
| 27-accept-send.png | "Sending..." state |
| 28-after-accept-send.png | After send (no toast) |
| 30-ticket-detail.png | Ticket with internal note area |
| 31-internal-note-sent.png | Note submitted successfully |
| 34-resolved-tab.png | Resolved tab empty ("Queue is clear") |
| 35-workspace-settings.png | Expert profile settings |
| 36-analytics.png | Analytics broken (all zeros) |