h.work User Stories & Jobs-To-Be-Done
Runtime and conversation stories corrected 2026-08-05 against ADR-046. Other feature stories remain a navigation inventory and must be verified against current code/tests before use.
Overviewโ
h.work is an internal Humanity Protocol (HP) platform for delivering managed
Specialist services to client companies. Each named Specialist is backed by
a durable Hermes/AgentFS/SessionDB session. Every successful Hermes reply is
delivered once as that Specialist without pre-delivery Expert review. An HP
Expert may handle an explicit human request or genuine failure and may later
inspect or correct authorized delivered work. Expert visibility is grant-based
through expert_access (see
ADR-007).
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 โ receive truthful canonical work, with optional after-delivery Expert correction and no hidden review queue delaying success.
- 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 the assigned Specialist's stable persona and configured capabilities established when its Hermes session is created so the identity remains consistent without per-turn prompt rewriting. | 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 successful reply through realtime mutation events so the experience feels like messaging a colleague. Socket reconnect performs one bounded catch-up read; idle time performs no polling. | 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 every canonical SessionDB turn in order, including genuine later follow-ups/corrections, so no Specialist message is replaced, hidden, projected, or deduplicated by content/time heuristics. | P1 |
| C-W5 | As a client, I want one consistent Specialist identity. Humanwork must not expose an Expert identity or synthetic "AI/Human review" projection on ordinary replies. | 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 real product-task state from the system that owns that task. Hermes tool/delegation progress must not be re-projected into fabricated conversation rows. | 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 request a human explicitly when needed; a compatibility risk/confidence threshold must not hold or reroute a successful Hermes reply. | 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 real attention work efficiently โ handle explicit human requests and genuine failures, then inspect/correct delivered work when authorized.
- 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 scoped attention items and prioritize by SLA/age.
- Decide explicit human-owned operations โ approve a concrete product action only when that operation is configured to require a human; never gate an ordinary Hermes tool or reply.
- 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 explicit human requests and genuine failures in my scoped attention queue, without ordinary successful turns creating work. | 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 inspect canonical SessionDB content and real failure/tool evidence, then correct an exact Hermes locator or author a genuine follow-up without releasing a held draft. | P0 |
| E-R5 | As an expert, I want to correct an authorized delivered reply by its exact Hermes locator, or append a genuine human-authored follow-up, so that canonical SessionDB history remains truthful and complete. | 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 queue mutation events to update only the affected item, with one bounded catch-up read after reconnect and zero idle polling, so that I see new attention work without repeated full-list reads. | 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 |
Explicit Human Decisionsโ
| ID | Story | Priority |
|---|---|---|
| E-A1 | As an expert, I want to decide a concrete human-owned product operation when its server-side policy explicitly requires me, without narrowing Hermes' other normal tools. | P0 |
| E-A4 | As an expert, I want explicit human-owned decisions listed separately from the canonical conversation, never projected as a held reply or synthetic continuation. | 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 explicit-human-request/failure attention queue | 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 | Inspect canonical reply/failure evidence | Expert | P0 | Reviewing & Responding |
| E-R5 | Correct an exact delivered locator or append a genuine follow-up | 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 | Decide a concrete human-owned operation | Expert | P0 | Explicit Human Decisions |
| 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 | Establish stable Specialist session configuration | 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-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 | Request a human explicitly without a reply gate | 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 | View explicit human-owned decisions separately | Expert | P1 | Explicit Human Decisions |
| 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 |