h.work User Stories & Jobs-To-Be-Done
Last reviewed: 2026-05-01 โ cross-referenced against api/src/ controllers, entities, and frontend/src/ components.
Updated 2026-06-01: Slack flipped from "Coming Soon" to "Available" (Slack Connect shipped via #816; per-org signing_secret via #1219). Isolation classification cross-ref added โ see ADR-020 for which resources isolate by Org vs (Org ร Specialist) vs Specialist-only.
Overviewโ
h.work is an internal Humanity Protocol (HP) platform for delivering managed AI+Expert services to client companies. Each client org has one or more named Specialists (AI personas โ e.g. "Kai" for e-commerce ops, "Mei" for finance ops) assigned to them; a Specialist is served by a sandboxed agent runtime (the AI that drafts replies) and reviewed by HP Experts before responses go out. Expert visibility is grant-based via the expert_access table (see ADR-007): one Expert typically covers many client orgs / specialist slices through scoped grants (scope='org' or scope='specialist'), rather than being permanently bound to a single Specialist. Clients communicate with their Specialists through the channels they already use โ Slack, email, WhatsApp, Telegram, and the web portal โ and never see the Expert or the agent runtime. The platform serves three distinct roles: the client (the company hiring the Specialist), the Expert (the HP human reviewer who supervises the AI), and the Account Manager / SuperAdmin (internal HP staff who operate the platform).
Role: Clientโ
A company or individual hiring AI Specialists to get work done
Jobs To Be Doneโ
- Get reliable work done without managing the Specialist directly โ delegate e-commerce ops, finance tasks, or IR filings and trust they'll be handled correctly.
- Communicate naturally through the channels they already use (Slack, email, WhatsApp) rather than learning a new tool.
- Maintain visibility into what's been done, what's pending, and how well the Specialist is performing.
- Control access and configuration โ manage which team members have access, how the Specialist is named, and which channels it's active on.
- Trust the quality โ know that work is expert-supervised and that errors won't slip through unreviewed.
- Manage costs predictably โ understand usage against quota and plan for expansion to additional Specialists.
User Storiesโ
Onboardingโ
| ID | Story | Priority |
|---|---|---|
| C-O1 | As a client admin, I want to accept an email invite, set my password, and log into the portal so that I can start configuring my account. [Implemented โ OTP email flow + /auth/accept-invite/:token + Phase 2 onboarding wizard] | P0 |
| C-O2 | As a client admin, I want to connect my Slack workspace to my Specialist so that my team can interact with the Specialist directly in Slack without switching tools. [Available โ Slack Connect OAuth via #816 (2026-05-26); per-org signing_secret via #1219 (2026-06-01)] | P0 |
| C-O3 | As a client admin, I want to connect an inbound email address to my Specialist so that emails sent to that address are handled by the Specialist automatically. | P0 |
| C-O4 | As a client admin, I want to set my Specialist's name and configure the escalation risk threshold so that the Specialist's behavior matches my expectations from day one. | P1 |
| C-O5 | As a client admin, I want to invite additional team members to my team so that colleagues can also message and manage the Specialist. | P1 |
| C-O6 | (Gap โ no implementation or spec) As a client admin, I want to upload my product catalog, policy documents, and key business context during onboarding so that the Specialist starts with accurate knowledge of my business rather than learning from scratch. | P1 |
| C-O7 | As an invited user whose link expired, I want to request a fresh invite link myself so that I don't have to wait on an admin to re-send it. [โ
Complete โ public POST /auth/invites/resend (enumeration-safe, 3/min); the expired accept page surfaces a "request new link" form. ADR-023 D4/D6] | P1 |
Getting Work Doneโ
| ID | Story | Priority |
|---|---|---|
| C-W1 | As a client, I want to send a message to my Specialist in the portal chat so that I can request work or ask questions even when I'm not in Slack or email. [Implemented โ POST /conversations/:id/messages, PortalChat.tsx] | P0 |
| C-W2 | As a client, I want to receive my Specialist's response in real time (or near real time via polling) so that the experience feels like messaging a colleague rather than submitting a support ticket. [Partial โ SSE streaming endpoint exists (/messages/stream); Socket.io gateway wired; client-side polling implemented in PortalChat] | P0 |
| C-W3 | As a client, I want to create a ticket for a specific, trackable work request (e.g. "update all Amazon listings for SKU X") so that I can follow progress and close the task when done. | P0 |
| C-W4 | As a client, I want to view the full thread of an individual ticket โ including all messages, Expert actions, and resolution โ so that I have a clear record of what was done. [Implemented โ GET /conversations/:id with paginated messages; ConversationHistory.tsx] | P1 |
| C-W5 | As a client, I want to see whether a response was handled autonomously by the AI Agent or reviewed/edited by an Expert so that I understand the level of human oversight applied to each piece of work. [Partial โ message role field distinguishes agent vs expert; no explicit AI/Expert label in client UI yet] | P1 |
| C-W6 | As a client, I want to search my conversation history by keyword so that I can quickly find past requests and decisions without scrolling through all messages. [Implemented โ GET /conversations/search?q=; full-text search via pg_trgm] | P1 |
| C-W7 | As a client, I want to see the status of an active multi-step agentic task (e.g. a reconciliation run with five sequential steps) so that I know where it is and whether any step is blocked. | P1 |
| C-W8 | (Deferred to post-launch โ MVP handles approval manually via the conversation channel; demoted from P0 โ P2 on 2026-05-23.) As a client, I want to receive a notification and approve or reject a high-stakes action (e.g. a payment above a threshold) before my Specialist executes it so that I remain in control of consequential decisions. | P2 |
Channel Source Visibilityโ
| ID | Story | Priority |
|---|---|---|
| C-CH1 | As a client, I want to see which channel (web, email, WhatsApp, Slack) a conversation originated from so that I have context when switching between the portal and other channels. [Implemented โ ChannelBadge component; channel field on Conversation; badge visible in conversation list and chat header] | P1 |
Communication & Channelsโ
| ID | Story | Priority |
|---|---|---|
| C-C1 | As a client admin, I want to view all configured communication channels and their health status so that I know which channels are active and if any connection has broken. | P1 |
| C-C2 | As a client admin, I want to connect a WhatsApp Business account so that my Specialist can receive and respond to WhatsApp messages from customers or suppliers. | P1 |
| C-C3 | As a client admin, I want to configure a webhook URL for outbound notifications so that my internal systems can receive structured events when the Specialist completes tasks or encounters issues. | P2 |
| C-C4 | (Gap โ no implementation) As a client admin, I want to connect Microsoft Teams so that my Specialist is available to enterprise colleagues who use Teams as their primary communication channel. | P2 |
Visibility & Reportingโ
| ID | Story | Priority |
|---|---|---|
| C-V1 | As a client, I want to see a dashboard summary of recent conversations, open tickets, and pending items so that I can get a quick pulse on what my Specialist has been doing. | P1 |
| C-V2 | As a client admin, I want to see my message volume usage against my plan quota so that I can anticipate when I'll need to upgrade before hitting limits. | P1 |
| C-V3 | As a client admin, I want to see a chart of conversation volume over time so that I can identify trends in how heavily my team is using the Specialist. | P2 |
| C-V4 | (Gap โ no implementation) As a client, I want to see the AI's autonomous handling rate over time (what percentage of work was resolved without Expert intervention) so that I can track how the Specialist is improving as it learns my business. | P2 |
| C-V5 | (Gap โ no implementation) As a client, I want to see my Specialist's SLA performance (response times against committed targets) so that I can hold the platform accountable to the service level I'm paying for. | P1 |
Team & Settingsโ
| ID | Story | Priority |
|---|---|---|
| C-T1 | As a client admin, I want to invite a colleague by email so that they can access the portal and interact with the Specialist. [โ
Complete โ self-service invites via POST /admin/members/invite; accessible to org_admin role; /client/settings/team] | P0 |
| C-T2 | As a client admin, I want to remove a team member from my organization so that former employees or contractors no longer have access. [โ
Complete โ Admin/Owner can remove via DELETE /orgs/:orgId/members/:userId; /client/settings/team] | P1 |
| C-T3 | As a client admin, I want to set the risk threshold at which the Specialist auto-escalates to an Expert (low / medium / high / critical) so that I can tune how conservative or autonomous the AI is. | P1 |
| C-T4 | As a client admin, I want to view my Specialist's accumulated business context (key facts it has learned about my organization) so that I can verify accuracy and correct wrong assumptions before they affect live work. [โ
Complete โ humanwork#297 delivered /client/admin/knowledge-base with document list, upload, search, delete, detail modal, chunks, and parse-status live updates] | P2 |
| C-T5 | As a workspace owner, I want to transfer ownership to another admin so that I can hand off primary responsibility when I leave or change roles. [โ
Complete โ POST /orgs/:orgId/transfer-ownership; Owner-only; available in /client/settings/team] | P1 |
| C-T6 | As a non-owner, I want to leave the client portal so that I can remove my own access without involving an admin. [โ ๏ธ Partial โ UI stub exists in /client/settings/team; self-removal API pending โ issue #148] | P1 |
| C-T7 | As a client admin, I want to resend a pending team invite so that a colleague who lost the email gets a fresh link without me re-entering their details. [โ
Complete โ re-inviting via POST /orgs/:orgId/invites is idempotent: rotates the token + resets the 7-day expiry, no duplicate row. ADR-023 D2/D3] | P1 |
| C-T8 | As a client admin, I want to revoke a pending invite so that someone I invited by mistake can't still join. [โ ๏ธ Partial โ pending invites auto-expire after 7 days and every resend rotates the token (cutting old links); pre-expiry removal is via DELETE /orgs/:orgId/members/:userId. No dedicated "revoke invite" action yet. ADR-023 D1] | P1 |
Billingโ
| ID | Story | Priority |
|---|---|---|
| C-B1 | As a client admin, I want to view my current plan, included quota, and usage to date so that I understand what I'm paying for and whether I'm on track. | P1 |
| C-B2 | As a client admin, I want to upgrade my plan when I'm approaching my usage limit so that I don't experience service degradation mid-month. | P1 |
| C-B3 | (Gap โ no implementation) As a client admin, I want to view my billing history and download invoices so that I can reconcile charges with my finance team. | P2 |
| C-B4 | As a client admin, I want to add a credit card via secure Checkout so that my Lago invoices are auto-paid. [โ
Complete โ GET /client/billing/checkout-url returns a one-shot Stripe Checkout (setup-mode) URL the OrgAdmin redirects to; on success the saved card is vaulted to the org's Lago customer (Stripe is Lago's PSP). #1275, closes P0 #1268] | P1 |
Role: Expertโ
A human domain Expert who supervises Specialist AI Agents and handles escalations
Jobs To Be Doneโ
- Clear the queue efficiently โ review, edit, and send AI-drafted responses without context-switching away from a unified workspace.
- Provide high-quality corrections โ when the Specialist AI gets something wrong, capture the correction in a structured way that feeds the learning loop.
- Collaborate with colleagues โ discuss ambiguous tickets with peers in-line or in team rooms without resorting to separate tools.
- Manage workload across customers โ see the queue across all assigned orgs and prioritize by urgency and risk.
- Pre-approve high-stakes actions โ review multi-step agentic task plans and approve or reject individual steps before execution.
- Track personal performance โ understand your own resolution metrics as your assignment grows.
User Storiesโ
Onboardingโ
| ID | Story | Priority |
|---|---|---|
| E-O1 | As a new expert, I want to accept an email invite and create my account so that I can access the expert workspace. | P0 |
| E-O2 | (Gap โ no UI built for expert profile) As a new expert, I want to set up my profile with my domain expertise and certifications so that the system can route me to the queues I'm qualified for. | P1 |
| E-O3 | (Gap โ no UI built) As a new expert, I want to see which client orgs I've been assigned to so that I know which clients and domains are my responsibility. | P1 |
Reviewing & Respondingโ
| ID | Story | Priority |
|---|---|---|
| E-R1 | As an expert, I want to see all pending escalations in my queue, sorted by risk level (critical โ high โ medium โ low), so that I always work on the most urgent item first. | P0 |
| E-R2 | As an expert, I want to filter the queue by status (pending / in review / resolved) so that I can focus on items that still need my attention. | P0 |
| E-R3 | As an expert, I want to view the full customer conversation thread for a queued item so that I have all the context I need before responding. | P0 |
| E-R4 | As an expert, I want to see the AI's suggested response alongside its confidence score so that I can quickly accept, edit, or discard the draft rather than writing from scratch. | P0 |
| E-R5 | As an expert, I want to edit the AI's suggested response before sending it so that I can correct factual errors, adjust tone, or add information the AI missed. | P0 |
| E-R6 | As an Expert, I want to send my response to the customer as the Specialist (e.g., "Amy") so that the customer's experience is consistent regardless of which Expert handled the item. | P0 |
| E-R7 | As an expert, I want to resolve a ticket when work is complete so that it's removed from the active queue and logged as closed. | P0 |
| E-R8 | As an expert, I want to filter the queue by client so that I can focus on a specific client during a dedicated review session. | P1 |
| E-R9 | As an expert, I want to add an internal note to a ticket (not visible to the customer) so that I can leave context for colleagues who may pick up this item later. [Implemented โ is_internal/sender_id on messages; note toggle in PortalChat; addInternalNote() in TicketDetail; filtered from client message list] | P1 |
| E-R10 | As an expert, I want to defer a ticket (default 24 hours) so that I can handle time-sensitive items first and return to lower-urgency items later. [Backend implemented โ defer() in expert-queue.service sets deferred_until; frontend UI not yet confirmed] | P1 |
| E-R11 | As an Expert, I want to reassign a ticket to another Expert so that Experts better suited to the topic can handle it. [Backend reassign() implemented; reassign UI available in Expert workspace] | P1 |
| E-R12 | As an expert, I want to see queue items refresh automatically (every 10โ15 seconds) so that I don't miss new escalations without manually refreshing the page. | P1 |
| E-R13 | As an expert, I want to change a conversation's status (pending / awaiting_client / resolved / snoozed) directly from the workspace so that I can manage my queue state without leaving the ticket view. [Implemented โ PATCH /conversations/:id/status; status dropdown in PortalChat for expert role; snooze_until column for snoozed state. resolved is the terminal state; there is no separate archived (collapsed into resolved, #2002).] | P1 |
| E-R14 | As an expert, I want to assign a conversation to myself so that colleagues know who is handling it and it doesn't get worked on twice. [Implemented โ PATCH /conversations/:id/assign; "Assign to me" button in PortalChat for expert role; assigned_expert_id on Conversation] | P1 |
Escalations & Agentic Tasksโ
| ID | Story | Priority |
|---|---|---|
| E-A1 | As an expert, I want to review a multi-step agentic task plan before it executes so that I can catch risky or incorrect steps before they affect the customer's data or systems. | P0 |
| E-A2 | As an Expert, I want to approve an individual task step so that the Agent proceeds with that action knowing it has Expert sign-off. | P0 |
| E-A3 | As an Expert, I want to reject a task step with written feedback so that the Agent knows why the step was rejected and can revise its approach. | P0 |
| E-A4 | As an expert, I want to filter my task list by "pending approval" so that I can quickly find steps that are blocked waiting for my decision. | P1 |
Corrections & Learningโ
| ID | Story | Priority |
|---|---|---|
| E-L1 | As an expert, I want to submit a correction when the AI's response was factually wrong, tonally inappropriate, or missed something important so that the learning pipeline captures my feedback for model improvement. | P0 |
| E-L2 | (Gap โ correction UI exists but no categorization UI) As an expert, I want to tag a correction with an error type (factual error / tone / missed context / wrong tool) so that the learning team can prioritize the most common error categories. | P1 |
Collaborationโ
โ ๏ธ REMOVED. Collab (internal team chat) was removed from the product; the team uses Slack for internal communication. See
docs/features/collab.md. User stories E-C1, E-C2, E-C3 are retained below as historical context only โ they are no longer in scope.
| ID | Story | Priority |
|---|---|---|
Performanceโ
| ID | Story | Priority |
|---|---|---|
| E-P1 | As an Expert, I want to see my assigned clients and their current queue depth so that I understand my workload distribution across domains and customers. [Implemented โ GET /am/experts shows assignments, queue depth visible in workspace] | P1 |
| E-P2 | As an expert, I want to see my personal performance metrics (conversations handled, average resolution time, queue depth trend) so that I can identify where I'm performing well and where I need improvement. | P2 |
| E-P3 | (Gap โ no implementation) As an expert, I want to receive a push notification when a critical-risk item is escalated so that I can respond immediately from my phone rather than discovering it during my next queue check. | P0 |
| E-P4 | (Gap โ no mobile app built) As an expert, I want a native mobile app so that I can review and respond to escalations from anywhere, not just from a desktop browser. | P1 |
Role: Account Manager (Superadmin)โ
Internal Humanity Protocol staff managing client orgs, Expert assignments, and platform health
Jobs To Be Doneโ
- Provision and onboard new clients โ create orgs, configure Specialists, assign Experts, and ensure the first interaction succeeds.
- Manage Expert assignments โ assign Experts to client orgs via direct assignment, ensuring capacity matches demand.
- Monitor platform health โ catch incidents early across API, database, channel adapters, and Specialist sessions.
- Track platform performance โ understand ticket volume, auto-resolve rates, and Expert leverage ratios across all orgs.
- Manage billing โ maintain Lago subscriptions across all orgs (self-hosted Lago โ Railway for dev; AWS for staging + prod, see #1287) and track per-Specialist monthly rates.
- Maintain security and access control โ change roles, reset passwords, and audit activity.
User Storiesโ
Client Managementโ
| ID | Story | Priority |
|---|---|---|
| SA-C1 | As a superadmin, I want to create a new client with an initial admin user so that the client can log in and begin configuring their account immediately after signing. | P0 |
| SA-C2 | As a superadmin, I want to view a list of all clients so that I can monitor onboarding status and overall platform adoption at a glance. | P0 |
| SA-C3 | As a superadmin, I want to drill into an individual client to see their members, ticket activity, assigned experts, and plan so that I can answer questions and manage their account. | P0 |
| SA-C4 | As a superadmin, I want to assign Experts directly to a specific client org so that escalations from that client route to the right people. [Implemented โ expert_access grants via ExpertAccessService (ADR-007). Legacy org_experts table DROPPED 2026-06-05 via PR #1711 PR 4 (commit 1a904fa5); expert_access is the sole grant table. Pool model removed 2026-05-03.] | P0 |
| SA-C5 | As a superadmin, I want to remove an expert from a client org so that when an expert's assignment changes, routing is updated immediately. | P1 |
| SA-C6 | As a superadmin, I want to reset a user's password so that I can unblock a client admin who is locked out without requiring a support ticket. | P1 |
| SA-C7 | As a superadmin, I want to change a user's platform role (e.g. promote a user to expert, or change an expert to org_admin) so that I can manage permissions without touching the database directly. | P1 |
| SA-C8 | (Gap โ no implementation) As a superadmin, I want to view the complete conversation history for a specific client org so that I can audit quality, investigate a complaint, or prepare a client business review. | P2 |
| SA-C9 | (Gap โ no implementation) As a superadmin, I want to configure the named account lead for a client org so that customers always have a consistent relationship owner even as pool members rotate. | P1 |
| SA-C10 | As a superadmin, I want to resend (and, via member removal, revoke) invites for any client org from /ops/team so that I can unblock onboarding without the client admin in the loop. [โ
Complete (resend) โ POST /orgs/:orgId/invites rotates the token + resets the 7-day expiry; revoke via DELETE /orgs/:orgId/members/:userId. ADR-023 D2/D3] | P1 |
Expert Managementโ
| ID | Story | Priority |
|---|---|---|
| SA-E1 | expert_access (ADR-007).] | |
| SA-E2 | As a superadmin, I want to add an expert to an existing pool so that new hires can begin receiving escalations in their domain immediately. | P0 |
| SA-E3 | As a superadmin, I want to see each pool's current queue depth so that I can identify when a pool is overloaded and needs additional members. | P1 |
| SA-E4 | [Implemented โ /ops/analytics Expert leverage section; GET /ops/analytics/expert-leverage (SuperAdmin); leverage derived from expert_access (ADR-007), not pools. PR #3199 / #3197.] As a superadmin, I want to see expert leverage ratios (clients & Specialist instances per Expert) so that I can monitor whether unit economics are on track and flag Experts where leverage is too low. | P1 |
| SA-E5 | (Gap โ HP credential verification is a stub) As a superadmin, I want to trigger Humanity Protocol credential verification for an expert so that their credentials are cryptographically confirmed and their actions carry a verified attribution trail. | P1 |
Global Queue & Opsโ
| ID | Story | Priority |
|---|---|---|
| SA-Q1 | As a superadmin, I want to view the global escalation queue across all orgs so that I can spot systemic issues (e.g. a surge in critical items from one domain) without having to check each org individually. | P1 |
| SA-Q2 | As a superadmin, I want to filter the global queue by risk level and status so that I can focus on the highest-severity open items across the entire platform. | P1 |
| SA-Q3 | As a superadmin, I want to view correction statistics by org and by error type so that I can identify which customer's agent is degrading in quality and escalate to the learning team. | P2 |
Billing & Analyticsโ
| ID | Story | Priority |
|---|---|---|
| SA-B1 | As a superadmin, I want to view a table of all org subscriptions with their plan tier and ticket counts so that I can report on platform revenue distribution. | P1 |
| SA-B2 | As a superadmin, I want to create or cancel a Lago subscription for an org so that billing is kept in sync when clients sign, expand, or churn. | P1 |
| SA-B3 | As a superadmin, I want to see platform-wide metrics (total ticket volume, auto-resolve rate, number of active experts, tickets by category) so that I can track operational health and prepare investor/board updates. | P1 |
| SA-B4 | (Gap โ analytics are mock data) As a superadmin, I want analytics backed by live data rather than hardcoded mock values so that the metrics I report are accurate and current. | P0 |
| SA-B5 | [Partial โ per-org LLM cost (total + per-Specialist) and per-Specialist Expert workload (items handled + handle time) ship on /ops/billing?org=<id> via PRs #3195 (LLM cost) + #3200 (workload, #3196). Remaining: dollarized Expert-labour cost + infrastructure cost โ true gross-margin view (tracked in #3196).] As a superadmin, I want to see per-org LLM and infrastructure cost breakdowns so that I can confirm each client's gross margin and flag any customers where costs are outpacing revenue. | P2 |
Platform Opsโ
| ID | Story | Priority |
|---|---|---|
| SA-P1 | As a superadmin, I want to view the health status of all platform services (API, database, Redis, channel adapters) in one place so that I can detect and respond to incidents before they impact customers. | P0 |
| SA-P2 | As a superadmin, I want to view Prometheus metrics so that the on-call engineer can integrate platform health into the team's existing monitoring and alerting stack (Datadog/CloudWatch). | P1 |
| SA-P3 | As a superadmin, I want to view the audit log so that I can investigate suspicious activity, prepare compliance evidence, or trace the sequence of events leading to an error. | P2 |
| SA-P4 | (Gap โ no implementation) As a superadmin, I want to see each org's channel adapter status (which channels are connected and healthy) so that I can proactively flag clients whose Slack or WhatsApp connection has broken. | P1 |
| SA-P5 | โ Not implemented โ API only As a superadmin, I want to enable or disable tool permissions for a specific org (e.g. allow Shopify queries, block Amazon write access) so that I can tailor the agent's capabilities to what each client has authorized. API exists (PUT /orgs/:orgId/tool-permissions/:toolName); frontend UI not built. | P1 |
Identified Gapsโ
The following stories represent clear product needs that have no current implementation or spec and should be scoped for upcoming cycles:
| Gap | Affected Role | Priority | Notes |
|---|---|---|---|
| Client-facing high-stakes approval flow | Client | P0 | PRD Section 6.5 describes pre-approval for high-risk actions; no client UI exists. |
| Business context import / onboarding wizard | Client | P1 | PRD Section 6.3 describes context-building in first 30 days; no upload or config UI. |
| Specialist knowledge visibility for clients | Client | P2 | Delivered by humanwork#297 for uploaded business documents; correction workflow remains future. |
| SLA performance dashboard | Client | P1 | PRD defines SLA tiers; no client-facing SLA tracking UI. |
| Billing history / invoice download | Client | P2 | Billing page shows plan but no invoice history. |
| Push notifications for critical escalations | Expert | P0 | PRD Section 2 principle 9 says mobile-first; no push notifications built. |
| Native mobile app (expert) | Expert | P1 | PRD explicitly requires native mobile; only web workspace built. |
| Expert profile + expertise tagging | Expert | P1 | Routing and pool assignment should respect declared expertise; no profile UI. |
| Inline ticket discussion (expert โ expert) | Expert | REMOVED. Collab module was removed; team uses Slack. See features/collab.md. | |
| Correction categorization UI | Expert | P1 | Correction endpoint exists but no error-type tagging in the UI. |
| Humanity Protocol credential verification | Expert + Superadmin | P1 | /users/:id/hp-verify is a stub; integration not functional. |
| Named account lead assignment | Superadmin | P1 | PRD requires one named lead per client; no UI to set or display this. |
| Per-org channel adapter health | Superadmin | P1 | Channel health API exists but not surfaced in superadmin UI. |
| Live analytics data | Superadmin | P0 | Superadmin analytics page uses hardcoded mock data. |
| Per-org gross-margin (dollarized cost) | Superadmin | P2 | Partial: per-org LLM cost + Expert workload surfaced (PRs #3195/#3200). Remaining: dollarized Expert-labour + infra cost โ margin (#3196). |
| Tool permission management UI | Superadmin | P1 | API endpoint exists (PUT /orgs/:orgId/tool-permissions/:toolName); no frontend. |
| AWS Secrets Manager integration | Platform | P1 | Required for production credential management; credentials currently in env vars. |
Priority Indexโ
| Story ID | Story (short) | Role | Priority | Theme |
|---|---|---|---|---|
| C-O1 | Accept invite + set password | Client | P0 | Onboarding |
| C-O2 | Connect Slack workspace | Client | P0 | Onboarding |
| C-O3 | Connect inbound email | Client | P0 | Onboarding |
| C-W1 | Send message in portal chat | Client | P0 | Getting Work Done |
| C-W2 | Receive real-time agent response | Client | P0 | Getting Work Done |
| C-W3 | Create a trackable ticket | Client | P0 | Getting Work Done |
| C-W8 | Approve high-stakes action before execution (deferred โ manual approval via chat for MVP; demoted to P2 on 2026-05-23) | Client | P2 | Getting Work Done |
| C-T1 | Invite team member | Client | P0 | Team & Settings |
| E-O1 | Accept invite, create expert account | Expert | P0 | Onboarding |
| E-R1 | View queue sorted by risk | Expert | P0 | Reviewing & Responding |
| E-R2 | Filter queue by status | Expert | P0 | Reviewing & Responding |
| E-R3 | View full customer thread | Expert | P0 | Reviewing & Responding |
| E-R4 | See AI suggestion + confidence score | Expert | P0 | Reviewing & Responding |
| E-R5 | Edit AI suggestion before sending | Expert | P0 | Reviewing & Responding |
| E-R6 | Send response as named agent | Expert | P0 | Reviewing & Responding |
| E-R7 | Resolve a ticket | Expert | P0 | Reviewing & Responding |
| E-A1 | Review multi-step agentic task plan | Expert | P0 | Escalations & Agentic Tasks |
| E-A2 | Approve a task step | Expert | P0 | Escalations & Agentic Tasks |
| E-A3 | Reject a task step with feedback | Expert | P0 | Escalations & Agentic Tasks |
| E-L1 | Submit a correction | Expert | P0 | Corrections & Learning |
| E-P3 | Push notification for critical escalation (gap) | Expert | P0 | Performance |
| SA-C1 | Create new client | Superadmin | P0 | Client Management |
| SA-C2 | List all clients | Superadmin | P0 | Client Management |
| SA-C3 | Drill into client detail | Superadmin | P0 | Client Management |
| SA-C4 | Assign experts to client | Superadmin | P0 | Client Management |
| SA-E1 | Superadmin | Expert Management | ||
| SA-E2 | Add expert to pool | Superadmin | P0 | Expert Management |
| SA-P1 | View platform health dashboard | Superadmin | P0 | Platform Ops |
| SA-B4 | Analytics backed by live data (gap) | Superadmin | P0 | Billing & Analytics |
| C-O4 | Configure agent name + risk threshold | Client | P1 | Onboarding |
| C-O5 | Invite team members | Client | P1 | Onboarding |
| C-O6 | Upload business context during onboarding (gap) | Client | P1 | Onboarding |
| C-O7 | Self-service new invite link on expiry | Client | P1 | Onboarding |
| C-W4 | View full ticket thread | Client | P1 | Getting Work Done |
| C-W5 | See AI vs expert handling label | Client | P1 | Getting Work Done |
| C-W6 | Search conversation history | Client | P1 | Getting Work Done |
| C-W7 | Track multi-step agentic task status | Client | P1 | Getting Work Done |
| C-C1 | View channel health status | Client | P1 | Communication & Channels |
| C-C2 | Connect WhatsApp Business | Client | P1 | Communication & Channels |
| C-V1 | Dashboard summary of recent activity | Client | P1 | Visibility & Reporting |
| C-V2 | Usage vs plan quota | Client | P1 | Visibility & Reporting |
| C-V5 | SLA performance dashboard (gap) | Client | P1 | Visibility & Reporting |
| C-T2 | Remove team member | Client | P1 | Team & Settings |
| C-T3 | Set escalation risk threshold | Client | P1 | Team & Settings |
| C-T5 | Transfer team ownership | Client | P1 | Team & Settings |
| C-T6 | Leave client portal (self-service) | Client | P1 | Team & Settings |
| C-T7 | Resend pending team invite | Client | P1 | Team & Settings |
| C-T8 | Revoke pending invite (partial) | Client | P1 | Team & Settings |
| C-B1 | View plan + usage | Client | P1 | Billing |
| C-B2 | Upgrade plan | Client | P1 | Billing |
| C-B4 | Add payment method (Stripe Checkout) | Client | P1 | Billing |
| E-O2 | Set up expert profile + domain tags (gap) | Expert | P1 | Onboarding |
| E-O3 | See assigned client orgs (gap) | Expert | P1 | Onboarding |
| E-R8 | Filter queue by org | Expert | P1 | Reviewing & Responding |
| E-R9 | Add internal note to ticket | Expert | P1 | Reviewing & Responding |
| E-R10 | Defer a ticket | Expert | P1 | Reviewing & Responding |
| E-R11 | Reassign ticket to another expert (pool model removed) | Expert | P1 | Reviewing & Responding |
| E-R12 | Queue auto-refreshes | Expert | P1 | Reviewing & Responding |
| E-A4 | Filter tasks by pending approval | Expert | P1 | Escalations & Agentic Tasks |
| E-L2 | Tag correction by error type (gap) | Expert | P1 | Corrections & Learning |
| Expert | Collaboration | |||
| Expert | Collaboration | |||
| E-P1 | View pool membership + queue depth | Expert | P1 | Performance |
| E-P4 | Native mobile app (gap) | Expert | P1 | Performance |
| SA-C5 | Remove expert from client | Superadmin | P1 | Client Management |
| SA-C6 | Reset user password | Superadmin | P1 | Client Management |
| SA-C7 | Change user platform role | Superadmin | P1 | Client Management |
| SA-C9 | Configure named account lead per client (gap) | Superadmin | P1 | Client Management |
| SA-C10 | Resend / revoke invites across orgs | Superadmin | P1 | Client Management |
| SA-E3 | See pool queue depth | Superadmin | P1 | Expert Management |
| SA-E4 | See expert leverage ratios (shipped โ #3199) | Superadmin | P1 | Expert Management |
| SA-E5 | Trigger HP credential verification (gap) | Superadmin | P1 | Expert Management |
| SA-Q1 | View global queue (all orgs) | Superadmin | P1 | Global Queue & Ops |
| SA-Q2 | Filter global queue by risk + status | Superadmin | P1 | Global Queue & Ops |
| SA-B1 | View all client subscriptions + plan tiers | Superadmin | P1 | Billing & Analytics |
| SA-B2 | Create / cancel Lago subscription | Superadmin | P1 | Billing & Analytics |
| SA-B3 | Platform-wide metrics dashboard | Superadmin | P1 | Billing & Analytics |
| SA-P2 | View Prometheus metrics | Superadmin | P1 | Platform Ops |
| SA-P4 | Per-client channel adapter health (gap) | Superadmin | P1 | Platform Ops |
| SA-P5 | Enable/disable tool permissions per client | Superadmin | P1 | Platform Ops |
| C-C3 | Configure notification webhook | Client | P2 | Communication & Channels |
| C-C4 | Connect Microsoft Teams (gap) | Client | P2 | Communication & Channels |
| C-V3 | Conversation volume chart | Client | P2 | Visibility & Reporting |
| C-V4 | AI autonomous handling rate over time (gap) | Client | P2 | Visibility & Reporting |
| C-T4 | View Specialist accumulated context | Client | P2 | Team & Settings |
| C-B3 | Billing history + invoice download (gap) | Client | P2 | Billing |
| Expert | Collaboration | |||
| E-P2 | Personal performance metrics | Expert | P2 | Performance |
| SA-C8 | View client's full conversation history | Superadmin | P2 | Client Management |
| SA-Q3 | Correction stats by client + error type | Superadmin | P2 | Global Queue & Ops |
| SA-B5 | Per-client cost tracking (partial โ #3195/#3200) | Superadmin | P2 | Billing & Analytics |
| SA-P3 | View audit log | Superadmin | P2 | Platform Ops |