Contract
What HappyToHelp is being built to do
Every clause of the product HappyToHelp is building toward, and how much of it the code does today. Judged from the code and tests, not from plans.
34 of 74 clauses done
46% (34)39% (29)15% (11)
- 34 done
- 29 partial
- 11 missing
Judged at commit 82de9ed ·
Published clauses
20 done · 2 partial · 0 missing
of 22
Target and push further
14 done · 27 partial · 11 missing
of 52
Product target
- Category
- Customer service help desks and AI support agents
- Replaces
- Zendesk, Intercom (with Fin), Help Scout, Freshdesk (agent baseline: Decagon, Sierra, Pylon)
- First buyer
- A US SMB support lead, costs in USD, moving a Zendesk, Intercom, Help Scout or Freshdesk help desk
Progress by area
3 areasPublished · 1 area
Target and push further · 2 areas
All clauses
Showing 74 of 74 clauses
| Clause | Title | Status | Evidence or gap |
|---|---|---|---|
| Retained product and operating guarantees 20 done · 2 partial · 0 missing | |||
| NATIVE-001published | Native owner installation | Partial | scripts/scripts/tests/tests/tests/Gap: With Cloudflare credentials rer deploy --dry-run reads the target's Workers subdomain, settings and secret names (three GET requests, tests/helpers/installer/fresh-install.mjs), and without them it refuses, so "Deployment dry-run makes no provider requests" does not hold. Local install, setup, dev, reset, export/import and restore are exercised; remote provisioning is qualified separately. |
| IDENTITY-002published | Retained native password identity (owner decision 2026-10-08) | Done | src/tests/ |
| IDENTITY-001published | Scoped authority | Done | src/tests/tests/ |
| FIRST-RUN-001published | A useful first workspace | Done | src/tests/ |
| LOCAL-MAIL-001published | Rer dev mail | Done | src/tests/ |
| CONVERSATION-001published | Durable transcript | Done | src/tests/tests/ |
| DELIVERY-001published | Live delivery and recovery | Done | src/tests/tests/ |
| UI-001published | Existing editable experience | Done | src/src/tests/ |
| MOVE-IN-001published | Reviewed history import | Done | src/tests/tests/tests/ |
| OUTCOMES-001published | Resolution feedback and provenance | Done | src/src/tests/tests/ |
| REPORTS-001published | Workspace calendar reports | Done | src/src/tests/tests/ |
| CONNECTIONS-001published | Workspace integrations | Done | src/tests/tests/tests/ |
| ACTIVATION-001published | Observed owner setup | Done | src/tests/ |
| AI-001published | Configured model execution | Done | src/tests/ |
| KNOWLEDGE-001published | Published knowledge | Done | src/src/tests/tests/ |
| CONTEXT-001published | Attributed customer context | Done | src/tests/ |
| DELEGATION-001published | Explicit local authority | Done | src/src/tests/ |
| TRAINING-001published | Durable evaluation | Done | src/src/tests/ |
| INTEGRATION-001published | Honest external effects | Partial | src/src/tests/tests/Gap: Existing mail/GitHub adapters work at test boundaries; the newly required business connectors are missing. |
| PUBLIC-001published | Public product source | Done | src/tests/tests/ |
| MIGRATION-001published | Prior-data custody | Done | src/tests/tests/ |
| SOURCE-001published | Author-owned capability graph | Done | scripts/ |
| Complete support operations 14 done · 26 partial · 8 missing | |||
| DESK-001target | The shared support desk | Done | src/src/src/tests/tests/tests/tests/ |
| WIDGET-001target | Availability-aware messenger and proactive messages | Partial | src/src/src/src/tests/tests/Gap: Outside the schedule's hours or with new conversations off, the installed widget says the team is away, shows when it is back in the visitor's time, asks for an email before the first message and posts the workspace's away message once per conversation (never emailed, no AI reply, not counted in response times); an assistant answering the conversation keeps answering. Workflow rules still treat that away message as a teammate's reply, and an assistant-only resolution after it is recorded as unknown. Behavior-based hesitation detection exists. Live agent presence, configurable proactive messages with caps and quiet hours, and their reporting do not. |
| MAIL-001target | Complete support email | Partial | src/src/tests/tests/tests/docs/Gap: Forwarding, Gmail and Microsoft 365 OAuth connections, aliases, branded sender, signatures, CC/BCC, header/token threading and cursor/reconnect/backfill/disconnect controls are exercised at the provider edge (tests/journeys/email.mjs). The IMAP/SMTP mailbox (src/modules/integrations/mailboxes/socket.ts) has no journey or fake TLS edge, so its connection, sync and send are unverified. Live paid provider accounts and production cutover are not qualified. |
| MAIL-002target | Reviewable suspended and spam mail | Done | src/src/src/tests/docs/ |
| OUTBOUND-001target | Agent-created and proactive tickets | Partial | src/src/src/tests/tests/docs/Gap: R6 individual email and call creation complete: requester/operator submitter attribution, mailbox and authorized sender, immutable CC/BCC, private call notes and durable send identity/outcomes. Provider-edge journeys inspect sent copies; R6's rer dev browser check of both creation paths has no repository journey and was not repeated for this review. Multi-requester proactive notices, remaining ticket configuration and consented SMS/WhatsApp templates remain outside this round. |
| CHANNELS-001target | Messaging and social support | Missing | Gap: No implementation located. No SMS/Meta support channel implementation located. |
| CHANNELS-002target | B2B shared-channel support | Missing | Gap: src/modules/api-integrations/dispatch.ts; tests/connections/slack.mjs; src/modules/escalations/actions.ts. Slack receives new-conversation notifications and outbound engineering handoff posts only, which this clause excludes; customer intake, bidirectional Slack Connect and Teams are absent. |
| VOICE-001target | Telephone service and unified voice agent | Missing | Gap: No implementation located. No voice routing/agent or Aircall connector implementation located. |
| QUEUE-001target | Assignment rules and available teams | Done | src/src/src/tests/ |
| TRIAGE-001target | Intelligent triage | Done | src/src/tests/tests/docs/ |
| QUEUE-002target | Structured and bulk queue work | Done | src/tests/tests/tests/tests/ |
| QUEUE-003target | Collaboration without conflicting replies | Done | src/src/src/src/tests/tests/ |
| MACRO-001target | Action macros with placeholders | Done | src/src/src/tests/tests/ |
| QUEUE-004target | Snooze and scheduled follow-up | Done | src/src/src/tests/ |
| STATUS-001target | Ticket status lifecycle | Done | src/src/src/tests/tests/tests/ |
| SLA-001target | Business-hour service commitments | Partial | src/src/src/tests/Gap: R5 calendars, first/next/resolution clocks, queue due times, pauses and durable acknowledged alerts are implemented. Rule and SLA notices use R4’s proven-address delivery claims; Slack/Teams per-user notices belong to R11. |
| AUTOMATION-001target | Explainable durable support workflows | Partial | src/src/src/tests/Gap: R5 ordered/versioned event rules, sandbox, publishing, pause/cancel and durable loop-safe execution are implemented. Notify actions use R4’s proven-address delivery claims, with explicit terminal delivery outcomes. Signed-webhook actions are not part of the R5 build-row end state. "Operator replied" rules also run on the workspace's system away reply, which migrations/150_workflow_journal.sql journals as an operator reply. |
| AUTOMATION-002target | Time-based automations | Partial | src/src/src/tests/tests/Gap: Hourly durable time automations, the 48/96 business-hour templates, the seeded four-day close, restart-safe cursors, customer-reply reset, unsafe-repeat refusal and automation actors pass their journeys. The last-agent-update time (src/modules/workflows/time-rules.ts, src/modules/workflows/rule-model.ts) counts the workspace's system away reply, so agent-update automations act on tickets no teammate answered. |
| NOTIFY-001target | Customer acknowledgments and teammate notifications | Partial | src/src/src/src/tests/tests/Gap: R4 supplies editable requester/CC received and solved notices, inbox/email teammate notices, personal preferences, frozen delivery claims and the workflow notification interface. Push and per-user Slack/Teams remain R11. |
| CONVERSATION-002target | Merge and external forwarding | Done | src/src/tests/tests/ |
| CONVERSATION-003target | Problem and incident linking | Partial | src/src/tests/docs/Gap: R10a: problem marking, single and bulk incident links, per-requester placeholder previews, email/widget updates and solve, per-ticket failures, history/audit, erasure and safe restore. Triage suggestions, engineering issue links and later channel transports remain later rounds. |
| CUSTOMER-001target | Customer and company support records | Partial | src/src/src/tests/tests/tests/Gap: Company records, typed attributes, domains, members, all account tickets, company inbox filtering, previewed reversible merge with provenance, and mapped CSV preview/apply/undo are implemented. Imports send nothing; new records participate in erasure, audit and portable storage. Full cross-channel identity governance and live connector context remain incomplete. |
| COMMERCE-001target | Shopify order actions | Missing | Gap: No implementation located. No Shopify order/refund connector implementation located. |
| BILLING-001target | Stripe billing and subscription resolution | Missing | Gap: No implementation located. No active Stripe billing/subscription action connector located; legacy financial imports confer no action authority. |
| CRM-001target | Live CRM and account context | Missing | Gap: No implementation located. No Orbit, HubSpot or Salesforce connector implementation located. |
| ESCALATION-001target | Engineering and team escalations that return | Partial | src/tests/tests/tests/Gap: Teams belongs to R11; live provider accounts remain unqualified. |
| API-001target | Owned API and managed connectors | Partial | src/local-agent/src/tests/tests/Gap: Native API/webhooks, Help Scout export import and connector MCP transport exist; managed catalog, Zapier and continuous Help Scout synchronization do not. |
| MOVE-IN-002target | Switch from every named incumbent | Partial | src/src/tests/tests/tests/tests/Gap: Reviewed Zendesk, Help Scout, Freshdesk and Intercom history import exists (tests/journeys/move-in-admission.mjs); attachment bytes, one-click API connection, final delta cutover, channel repoint, companies and custom fields, activated ownership and configuration move-in are incomplete. |
| MOVE-IN-003target | Replies to pre-migration mail land in the imported ticket | Partial | src/src/src/tests/docs/Gap: R6 vendor scope complete: inert imported message/header, subject-token and reply-address keys for Zendesk, Freshdesk, Help Scout and Intercom. Public upload/review/apply and inbound journeys match all four vendors and hold wrong-customer replies. Header proposals preserve sender-authority gates; Closed remains final with a linked follow-up. Live cutover, broader legacy acceptance and unmatched-migration hints remain unqualified. |
| MOVE-IN-004target | Bring configuration, not only history | Partial | src/tests/Gap: Saved replies and tags move in today; macro actions, views, groups, schedules, SLA policies, forms, triggers and automations do not. |
| PORTAL-001target | Authenticated customer self-service | Done | src/src/src/tests/tests/tests/ |
| FORMS-001target | Customer request forms with custom fields | Partial | src/src/src/src/src/src/tests/tests/tests/Gap: Published forms reuse typed ticket fields with required/conditional questions, translated labels, server validation, email-verified customer identity and fail-closed Turnstile checks for anonymous submissions. Verified customer sessions submit without Turnstile. Order/account lookup fields and explicit version-history management remain incomplete; live Turnstile and mail delivery are not established. |
| KNOWLEDGE-002target | Governed private and multilingual knowledge | Partial | src/src/src/src/src/src/tests/Gap: Public and signed-in/email-domain collections, reviewed translations, article history/restore and slug redirects are implemented. The assistant answers from public-audience articles only, so restricted knowledge never reaches an answer. Per-brand domain publishing and agent-proposed cited changes are absent. |
| KNOWLEDGE-003target | Branded help center, article feedback and knowledge in the ticket | Partial | src/src/src/src/src/src/tests/tests/Gap: Plain-text page templates (home, category, section, article, search and request form), article votes/comments, locale/brand activity analytics and recipient-scoped article insertion are implemented; no journey exercises the request-form template. Per-brand custom domains and ticket-after-reading attribution remain deferred. |
| BRANDS-001target | Multi-brand support operations | Partial | src/tests/Gap: Separate workspaces exist; unified multi-brand governance and routing are absent. |
| ACCESS-001target | Enterprise identity and custom permissions | Partial | src/src/src/src/src/tests/tests/Gap: Native owner/admin/agent, the collaborator role (notes and follow only) and restricted custom roles exist, with refusals audited and owner recovery retained. Connected-application grants are held to the approving member's current role, so narrowing a role narrows its grants at once. Ticket fields carry read and write roles, including custom roles. SSO (SAML/OIDC), SCIM, and brand and team permissions are absent. |
| IDENTITY-003target | Two-factor authentication for native accounts | Done | src/src/src/tests/tests/tests/ |
| MOBILE-001target | Support from a phone | Partial | src/src/tests/tests/Gap: Responsive web journeys exist; native apps, mobile push and protected offline work are absent. |
| OUTCOMES-002target | CSAT across support channels | Partial | src/src/src/src/src/src/src/tests/tests/tests/tests/tests/Gap: Email surveys, expiring single-use signed links, opt-out, low-score results and cycle history coexist with widget ratings. The portal exposes the same eligible unused signed link and opt-out, without minting another invitation. Other messaging-channel surveys remain incomplete. |
| REPORTS-002target | Workload, service and agent outcomes | Partial | src/src/src/tests/docs/Gap: R10a: complete current agent/team/channel/brand/tag workload and backlog, persisted R5 SLA compliance, reopen rate, adjustable ticket timers (a member's own Stop ends only their timer; removal or loss of ticket access ends theirs; a lead ends a teammate's only by naming it, recorded as the lead's in history and audit) and handle time by agent/form/visible intent, timezone/date/team/brand/import filters, complete CSV and permission-scoped daily/weekly mail. Existing response/outcome/CSAT reports retained. Account and procedure-version dimensions await their owning rounds. |
| AGENT-001target | A production support agent with clean handoff | Partial | src/src/src/tests/tests/Gap: Configured AI and scoped local handoff exist; full multichannel, business-action and production-quality coverage is incomplete. |
| PROCEDURE-001target | Natural-language procedures and release simulation | Partial | src/src/src/tests/Gap: Assistant instructions and durable evaluations exist; versioned procedures, their sandbox simulation and controlled rollout do not (the AUTOMATION-001 rule sandbox does not run procedures). |
| AGENT-002target | Inspectable quality and resolution economics | Partial | src/src/src/tests/tests/Gap: Provider-round traces, training details and aggregate reports exist; full production tool/procedure exploration is incomplete. |
| FEEDBACK-001target | Source-linked feedback and release follow-up | Missing | Gap: No implementation located. No Penny/Vector feedback and shipped-feature support follow-up implementation located. |
| ERASURE-001target | Customer erasure with coherent history | Done | src/src/tests/tests/ |
| AUDIT-001target | Security and accountable actions | Done | src/migrations/tests/tests/tests/ |
| PORTABILITY-001target | Complete customer-owned portable support data | Partial | scripts/scripts/scripts/scripts/scripts/tests/tests/tests/tests/Gap: Local rer export and rer import carry D1, R2 and Durable Object storage with schema and digest and restore inertly into a clean installation. A Platform-applied installation (rer_migrations ledger) exports, its archive restores into Platform and native destinations, and incomplete, multiple or mismatched migration ledgers refuse before any write (tests/helpers/platform-archive.mjs; released in v0.4.12). A hosted installation cannot produce that archive: rer export --target remote refuses, and only the SQL and R2 backup procedure (scripts/export-d1.mjs) exists. Base-data equivalence remains held. |
| ASSURANCE-001target | Qualified regulated support deployments | Missing | Gap: No implementation located. No regulated-deployment agreement/control qualification flow or compliance acceptance located. |
| Push further: accountable agents 0 done · 1 partial · 3 missing | |||
| PUSH-001push further | Reproduce, repair and prove customer recovery | Partial | src/src/tests/tests/Gap: Approved local repair, independent readback and human Send exist with an edge fixture; sustained customer recovery verification/reopening is incomplete. |
| PUSH-002push further | Promises survive every handoff | Missing | Gap: No implementation located: obligation records with owner and due time, reminders and follow-up drafts are absent (durable messages and notes in src/modules/conversations/admission.ts are not obligations). |
| PUSH-003push further | Learn from reopenings under human control | Missing | Gap: No implementation located: version-joined diagnosis of reopened cases, proposals and controlled rollout are absent (evaluation runs in src/modules/training-runs/runner.ts are generic). |
| PUSH-004push further | Turn verified edge cases into reviewed knowledge | Missing | Gap: No implementation located: gap clustering from unanswered cases, sourced draft articles and recovery measurement are absent (article authoring in src/modules/knowledge/authoring.ts is manual). |
How statuses are judged
- Done
- It ships in the default install, and a cited test or journey exercises it.
- Partial
- Some of it ships, it ships only behind an opt-in, or there is code with no requirement-level test.
- Missing
- There is no implementation.