@hiver/skills 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/collections/common/skills/discuss-problem/SKILL.md +4 -0
- package/collections/extension/agents/build-feature.md +2 -1
- package/collections/extension/agents/build-milestone.md +2 -1
- package/collections/extension/skills/build-component/SKILL.md +75 -1
- package/collections/extension/skills/build-component/palette/colors.md +76 -0
- package/collections/extension/skills/build-component/references/v2-components.md +100 -0
- package/collections/extension/skills/build-component/references/v2-usage-examples.md +23 -0
- package/collections/extension/skills/build-component/typography/variants.md +27 -14
- package/collections/mobile/skills/version-bump-up/SKILL.md +66 -0
- package/collections/qa-skills/README.md +103 -0
- package/collections/qa-skills/qa-suite-guide.html +760 -0
- package/collections/qa-skills/skills/hiver-explore/SKILL.md +413 -0
- package/collections/qa-skills/skills/hiver-explore/references/spec-template.md +204 -0
- package/collections/qa-skills/skills/playwright-gen/SKILL.md +280 -0
- package/collections/qa-skills/skills/playwright-gen/references/codegen-conventions.md +100 -0
- package/collections/qa-skills/skills/playwright-gen/references/step-mapping.md +137 -0
- package/collections/qa-skills/skills/qa-api-author/SKILL.md +204 -0
- package/collections/qa-skills/skills/qa-api-author/references/api-areas.md +112 -0
- package/collections/qa-skills/skills/qa-api-run/SKILL.md +178 -0
- package/collections/qa-skills/skills/qa-bugs/SKILL.md +82 -0
- package/collections/qa-skills/skills/qa-eval/SKILL.md +123 -0
- package/collections/qa-skills/skills/qa-eval/references/deterministic-checks.md +89 -0
- package/collections/qa-skills/skills/qa-kit/SKILL.md +228 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/INDEX.md +31 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/INDEX.md +90 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/account-security.md +44 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/apps-integrations.md +43 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/automate-workflows.md +65 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/collaborate.md +36 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/customer-relationships.md +20 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/getting-started.md +31 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/hiver-ai.md +79 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/multichannel-support.md +82 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/reporting-analytics.md +35 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/self-service.md +23 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/sla-policies.md +30 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/troubleshooting.md +27 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/INDEX.md +45 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/account-security.md +13 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/apps-integrations.md +15 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/automate-workflows.md +26 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/collaborate.md +11 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/customer-relationships.md +9 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/getting-started.md +21 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/hiver-ai.md +13 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/identity-access.md +23 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/multichannel-support.md +47 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/reporting-analytics.md +13 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/self-service.md +11 -0
- package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/sla-policies.md +12 -0
- package/collections/qa-skills/skills/qa-kit/references/clickup-ticket.md +163 -0
- package/collections/qa-skills/skills/qa-kit/references/eval.md +117 -0
- package/collections/qa-skills/skills/qa-kit/references/flow-capture.md +147 -0
- package/collections/qa-skills/skills/qa-kit/references/handoff-contract.md +159 -0
- package/collections/qa-skills/skills/qa-kit/references/hiver-context.md +99 -0
- package/collections/qa-skills/skills/qa-kit/references/tracker-format.md +123 -0
- package/collections/qa-skills/skills/qa-kit/references/triage-guide.md +105 -0
- package/collections/qa-skills/skills/qa-ui-author/SKILL.md +208 -0
- package/collections/qa-skills/skills/qa-ui-author/references/test-areas.md +132 -0
- package/collections/qa-skills/skills/qa-ui-run/SKILL.md +183 -0
- package/collections/web/agents/build-feature.md +2 -2
- package/collections/web/agents/build-milestone.md +2 -2
- package/collections/web/skills/build-component/SKILL.md +54 -13
- package/collections/web/skills/build-component/palette/colors.md +76 -0
- package/collections/web/skills/build-component/references/v2-components.md +100 -0
- package/collections/web/skills/build-component/references/v2-usage-examples.md +23 -0
- package/collections/web/skills/build-component/typography/variants.md +27 -14
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Omni · Collaborate With Your Team
|
|
2
|
+
|
|
3
|
+
> Segment `/collaboration?product=hiver-omni` — 3 articles (note the Omni slug is `/collaboration`).
|
|
4
|
+
> Mechanics match HIG — see [../hig/collaborate.md](../hig/collaborate.md).
|
|
5
|
+
|
|
6
|
+
**Articles:** Collaborating on conversations in Hiver Omni · Collaborate using Shared Notes · Collaborate on email responses using Shared Drafts
|
|
7
|
+
|
|
8
|
+
- **Shared Notes & @mentions** and **Shared Drafts** work as in HIG, across Omni conversations/channels.
|
|
9
|
+
- **Roles:** Both. **Connected:** notifications, Collaboration Space, templates.
|
|
10
|
+
- **Note:** the Omni collaborate section surfaced **no Approvals sub-category** (present in HIG). Whether **Approvals** is available in Omni is **(unverified)** — confirm via `hiver-explore`.
|
|
11
|
+
- **Source:** https://help.hiverhq.com/collaboration/collaborate-on-conversations-using-shared-notes?product=hiver-omni · https://help.hiverhq.com/collaboration/shared-drafts?product=hiver-omni
|
package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/customer-relationships.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Omni · Manage Customer Relationships
|
|
2
|
+
|
|
3
|
+
> Segment `/manage-customer-relationships?product=hiver-omni` — 1 sub-category (Manage customers 1) + CSAT, 2 articles.
|
|
4
|
+
> Mechanics match HIG — see [../hig/customer-relationships.md](../hig/customer-relationships.md).
|
|
5
|
+
|
|
6
|
+
- **Manage customers** — view/manage customer details (contact directory) in Omni, enriched by CRM apps.
|
|
7
|
+
- **CSAT** — customer satisfaction surveys + CSAT reports; delivered in replies/after close; feeds Analytics.
|
|
8
|
+
- **Roles:** Admin (configure); Agent (view/manual CSAT). **Connected:** CRM apps, CSAT report, replies.
|
|
9
|
+
- **Source:** https://help.hiverhq.com/manage-customer-relationships?product=hiver-omni · https://help.hiverhq.com/manage-customer-relationships/using-customer-satisfaction-surveys-csat
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Omni · Getting Started
|
|
2
|
+
|
|
3
|
+
> Segment `/getting-started?product=hiver-omni` — 5 sub-categories, 16 articles.
|
|
4
|
+
> **Provenance:** Omni taxonomy captured live from the Hiver Omni help view (Jul 2026); detail from
|
|
5
|
+
> the search index. **(unverified)** items need a `hiver-explore` live pass.
|
|
6
|
+
> Shared mechanics are documented in [../hig/getting-started.md](../hig/getting-started.md); this file
|
|
7
|
+
> covers the **Omni differences**.
|
|
8
|
+
|
|
9
|
+
**Sub-categories:** Setting up Hiver Omni (3 cats, 11) · First steps (5)
|
|
10
|
+
|
|
11
|
+
### Setting up Hiver Omni (key difference vs HIG)
|
|
12
|
+
- **What it is:** Omni onboarding can connect **either a Gmail or an Outlook (Microsoft) email client** — HIG is Gmail-only. Dedicated guides exist for each, including an Outlook step-by-step, connecting an Outlook shared mailbox, and **Microsoft Admin Center approval**.
|
|
13
|
+
- **Key concepts:** connect Gmail **or** Outlook, Shared Mailbox connection, Microsoft Admin Center approval (Outlook), mailbox permissions/scopes, adding team members & roles, `?product=hiver-omni` doc marker.
|
|
14
|
+
- **Roles:** Admin (connect mailbox, approve in Microsoft Admin Center, add members); Agent (onboarded after).
|
|
15
|
+
- **Connected features:** Shared Inbox, team members & roles, mailbox permissions, all Omni channels.
|
|
16
|
+
- **Source:** https://help.hiverhq.com/setting-up-hiver-omni?product=hiver-omni · https://help.hiverhq.com/getting-started/setting-up-hiver-for-outlook-a-step-by-step-guide?product=hiver-omni · https://help.hiverhq.com/for-outlook/connecting-an-outlook-shared-mailbox-to-hiver?product=hiver-omni · https://help.hiverhq.com/for-outlook/approve-hiver-microsoft-admin?product=hiver-omni
|
|
17
|
+
|
|
18
|
+
### First steps
|
|
19
|
+
- **What it is:** Post-connect setup — sender ID, adding team members & managing roles in Omni, My Settings, mobile app.
|
|
20
|
+
- **Roles:** Admin (members/roles); both (My Settings). **Connected:** Shared Inbox, roles, My Settings.
|
|
21
|
+
- **Source:** https://help.hiverhq.com/first-steps/adding-team-members-and-managing-roles-in-hiver-omni?product=hiver-omni · https://help.hiverhq.com/first-steps/my-settings-in-hiver?product=hiver-omni
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Omni · Hiver AI
|
|
2
|
+
|
|
3
|
+
> Segment `/ai-features?product=hiver-omni` — 2 sub-categories (AI Agents 3, AI Copilot 4), 7 articles.
|
|
4
|
+
> (Note the Omni slug is `/ai-features`.) Feature detail matches HIG — see
|
|
5
|
+
> [../hig/hiver-ai.md](../hig/hiver-ai.md). Omni surfaces a smaller documented set than HIG.
|
|
6
|
+
|
|
7
|
+
**Sub-categories:** AI Agents (3) · AI Copilot (4)
|
|
8
|
+
|
|
9
|
+
- **AI Copilot** — Ask AI (grounded in knowledge sources), AI Compose, AI Summarizer, suggested replies. See [../hig/hiver-ai.md](../hig/hiver-ai.md#ai-copilot).
|
|
10
|
+
- **AI Agents** — autonomous classify/prioritize/route; AI Suggested Responses, AI Tagging, AI Thank-you Detector. See [../hig/hiver-ai.md](../hig/hiver-ai.md#ai-agents-autonomous).
|
|
11
|
+
- **AI in Automations** — **AI Tasks** and AI Extract are exposed in Omni automations (see [omni/automate-workflows.md](automate-workflows.md)).
|
|
12
|
+
- **Roles:** Admin (enable/config); Agent (assistive use). All gated by the Hiver AI add-on.
|
|
13
|
+
- **Source:** https://help.hiverhq.com/ai-features?product=hiver-omni · https://help.hiverhq.com/ai-copilot/introducing-ask-ai?product=hiver-omni
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Omni · Identity & Access (Omni-only segment)
|
|
2
|
+
|
|
3
|
+
> Segment `/identity-access?product=hiver-omni` — 2 sub-categories, 15 articles.
|
|
4
|
+
> **This segment does not exist in the HIG product** — it's an Omni/enterprise differentiator for
|
|
5
|
+
> controlling how users log in and are provisioned. Taxonomy captured live (Jul 2026); provider
|
|
6
|
+
> breadth from the live nav, detail from the search index (thin — much is **(unverified)**, resolve
|
|
7
|
+
> via `hiver-explore`).
|
|
8
|
+
|
|
9
|
+
**Sub-categories:** Single Sign-On (SSO) — 7 categories, 14 articles · User provisioning (SCIM) — 1 article
|
|
10
|
+
|
|
11
|
+
### Single Sign-On (SSO)
|
|
12
|
+
- **What it is:** One login for the team via an existing **identity provider (IdP)** — no separate Hiver passwords. The **7 sub-categories** strongly imply multiple IdPs (e.g. Okta, Google, Azure AD/Entra, OneLogin, etc.), each with its own SAML setup guide. Only the Okta path was grounded in search; the specific other IdPs and the generic SAML flow are **(unverified)** — enumerate them live.
|
|
13
|
+
- **Key concepts:** SSO, IdP, SAML, no separate passwords, per-IdP configuration, enforce-SSO.
|
|
14
|
+
- **Roles:** Admin (configures SSO). **Connected:** User management, roles & permissions, SCIM.
|
|
15
|
+
- **Source:** https://help.hiverhq.com/identity-access?product=hiver-omni · https://help.hiverhq.com/okta-integration/configuration-of-okta-integration
|
|
16
|
+
|
|
17
|
+
### User provisioning (SCIM)
|
|
18
|
+
- **What it is:** Automatically add, update, and remove Hiver users through your directory provider (e.g. Okta) — directory-driven user lifecycle so joiners/movers/leavers sync into Hiver without manual admin.
|
|
19
|
+
- **Key concepts:** SCIM, directory provider, auto create/update/deactivate users, provisioning.
|
|
20
|
+
- **Roles:** Admin. **Connected:** SSO, user/account management, roles & permissions.
|
|
21
|
+
- **Source:** https://help.hiverhq.com/identity-access?product=hiver-omni · https://help.hiverhq.com/okta-integration/configuration-of-okta-integration
|
|
22
|
+
|
|
23
|
+
> **QA note:** SSO/SCIM is high-risk enterprise surface — test enforce-SSO, IdP-initiated vs SP-initiated login, deprovisioning (a removed directory user must lose Hiver access), role mapping, and fallback/lockout paths. Confirm which IdPs are actually supported via `hiver-explore` before scoping.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Omni · Offer Multi-Channel Support
|
|
2
|
+
|
|
3
|
+
> Segment `/offer-multi-channel-support?product=hiver-omni` — 8 sub-categories, 24 articles.
|
|
4
|
+
> **This is where Omni diverges most from HIG.** Taxonomy captured live (Jul 2026); detail from the
|
|
5
|
+
> search index. **(unverified)** items need a `hiver-explore` live pass.
|
|
6
|
+
|
|
7
|
+
**Sub-categories & items:** Manage emails (2 cats, 9) · Manage live chat (4) · **Manage Slack messages (5)** · Manage voice calls (2) · **Manage Tickets (1)** · **Create Web Forms (1)** · Using omnichannel search · Managing work with **My Work**
|
|
8
|
+
|
|
9
|
+
### Manage emails
|
|
10
|
+
- Same core email mechanics as HIG — assignment, status (Open/Pending/Closed), tags, views, split, templates, managing emails. See [../hig/multichannel-support.md](../hig/multichannel-support.md#manage-emails). Omni email works on **Gmail or Outlook** clients.
|
|
11
|
+
- **Source:** https://help.hiverhq.com/working-with-emails/manage-emails-in-hiver-shared-inbox?product=hiver-omni
|
|
12
|
+
|
|
13
|
+
### Manage live chat messages
|
|
14
|
+
- Real-time chat channel — embeddable widget, Chat Inbox, chat auto-assignment, chatbots, chat templates, chat CSAT, collision alerts. See [../hig/multichannel-support.md](../hig/multichannel-support.md#manage-live-chat-messages).
|
|
15
|
+
- **Roles:** Admin (setup); Agent (reply). **Source:** https://help.hiverhq.com/hiver-chat/setting-up-live-chat
|
|
16
|
+
|
|
17
|
+
### Manage Slack messages (Omni-only channel)
|
|
18
|
+
- **What it is:** In Omni, **Slack is a support channel** — handle Slack activity from within Hiver (hub at `/slack?product=hiver-omni`). Distinct from the Slack *notification* integration (which only pushes Hiver events into Slack). Exact channel setup steps **(unverified)**.
|
|
19
|
+
- **Key concepts:** Slack channel vs Slack notification integration, Slack Inbox.
|
|
20
|
+
- **Roles:** Admin (setup **— unverified**); Agent (handle). **Connected:** Shared Inbox, Slack analytics, automations.
|
|
21
|
+
- **Source:** https://help.hiverhq.com/slack?product=hiver-omni
|
|
22
|
+
|
|
23
|
+
### Manage voice calls (Voice Inbox — Aircall)
|
|
24
|
+
- **What it is:** Admins create a **Voice Inbox** (powered by Aircall) to manage customer calls like a shared inbox; Hiver logs incoming, outgoing, missed calls and voicemails, with Voice Inbox views and settings.
|
|
25
|
+
- **Roles:** Admin (create/configure); Agent (handle/log calls). **Connected:** Aircall, Views, analytics.
|
|
26
|
+
- **Source:** https://help.hiverhq.com/voice-channel/setup-a-voice-inbox · https://help.hiverhq.com/voice-channel/voice-inbox-views-and-call-management
|
|
27
|
+
|
|
28
|
+
### Manage Tickets (Omni-only)
|
|
29
|
+
- **What it is:** Create and manage **tickets** in Omni. Incoming conversations across channels behave as tickets — land in **Unassigned**, get assigned (manual/auto), carry status (Open/Pending/Closed), and are filterable as Views. A distinct ticket-creation article was thin in search — **(depth unverified)** but the "Manage Tickets" area exists live.
|
|
30
|
+
- **Key concepts:** ticket, Unassigned/Mine/Team/Pending/Closed, assignee, status, auto-assignment.
|
|
31
|
+
- **Roles:** Both. **Connected:** Shared Inbox, Views, auto-assignment, automations, SLA.
|
|
32
|
+
- **Source:** https://help.hiverhq.com/offer-multi-channel-support?product=hiver-omni (Manage Tickets)
|
|
33
|
+
|
|
34
|
+
### Create Web Forms (Omni-only)
|
|
35
|
+
- **What it is:** Build **web forms** to collect customer details and requests, feeding conversations/tickets into Hiver. Exists live in the Omni nav; a dedicated article was not grounded in search — **(depth unverified)**. Related self-service intake: Customer Portal.
|
|
36
|
+
- **Key concepts:** web form, request intake, custom fields, form → ticket.
|
|
37
|
+
- **Roles:** Admin (build form); customers (submit). **Connected:** Tickets, Customer Portal, custom fields.
|
|
38
|
+
- **Source:** https://help.hiverhq.com/offer-multi-channel-support?product=hiver-omni (Create Web Forms)
|
|
39
|
+
|
|
40
|
+
### Omnichannel search & My Work (Omni-only surfaces)
|
|
41
|
+
- **Omnichannel search** — search/locate conversations **across all channels** (email, chat, Slack, voice) in one interface; filter by assignee/tags/status, save as Views.
|
|
42
|
+
- **My Work** — a unified personal work surface aggregating what's assigned to you across channels (related to the **Mine** view + My Settings). Dedicated article thin in search — **(depth unverified)**.
|
|
43
|
+
- **Roles:** Agent (personal). **Connected:** Views, all channels, notifications.
|
|
44
|
+
- **Source:** https://help.hiverhq.com/offer-multi-channel-support?product=hiver-omni (Using omnichannel search · Managing work with My Work)
|
|
45
|
+
|
|
46
|
+
### Manage WhatsApp
|
|
47
|
+
- WhatsApp channel (WhatsApp Inbox; Meta Developer Portal setup). See [../hig/multichannel-support.md](../hig/multichannel-support.md#manage-whatsapp-messages). **Source:** https://help.hiverhq.com/whatsapp-channel/setup-your-whatsapp-inbox
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Omni · Reporting & Analytics
|
|
2
|
+
|
|
3
|
+
> Segment `/reporting-and-analytics?product=hiver-omni` — 3 sub-categories, 11 articles.
|
|
4
|
+
> Omni adds **per-channel analytics**. Core mechanics match HIG — see
|
|
5
|
+
> [../hig/reporting-analytics.md](../hig/reporting-analytics.md).
|
|
6
|
+
|
|
7
|
+
**Sub-categories:** Slack analytics (1) · Email analytics (4) · Chat analytics (3) · + overview, Custom dashboards, FAQs
|
|
8
|
+
|
|
9
|
+
- **Per-channel analytics (Omni difference):** separate **Slack analytics**, **Email analytics**, and **Chat analytics** — vs HIG's email-only analytics + live-chat. Track workload/performance per channel.
|
|
10
|
+
- **Custom Dashboards** — monitor across inboxes; publish read-only links. (As in HIG, dashboards historically cover email inboxes — verify chat/Slack inclusion in Omni via `hiver-explore`.)
|
|
11
|
+
- **Report types** — Conversations, Users, Tags, Contacts, SLA, CSAT, Sentiment; CSV export (plan-dependent columns; scheduled exports Enterprise-only).
|
|
12
|
+
- **Roles:** Admin. **Connected:** all channels, Tags, SLA, CSAT, AI Sentiment.
|
|
13
|
+
- **Source:** https://help.hiverhq.com/reporting-and-analytics?product=hiver-omni · https://help.hiverhq.com/reporting-analytics/custom-dashboards
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Omni · Enable Self-Service
|
|
2
|
+
|
|
3
|
+
> Segment `/enable-self-service?product=hiver-omni` — 2 sub-categories, 5 articles.
|
|
4
|
+
> Mechanics match HIG — see [../hig/self-service.md](../hig/self-service.md).
|
|
5
|
+
|
|
6
|
+
**Sub-categories:** Help Center (4) · Customer Portal (1)
|
|
7
|
+
|
|
8
|
+
- **Help Center** — publish customer-facing help articles/FAQs; articles can surface in the Live Chat widget and feed Ask AI knowledge sources.
|
|
9
|
+
- **Customer Portal** — web self-service space where customers submit and track requests (related to Omni **Web Forms** and **Tickets**).
|
|
10
|
+
- **Roles:** Admin (manage). **Connected:** Live Chat, Ask AI, Web Forms, Tickets.
|
|
11
|
+
- **Source:** https://help.hiverhq.com/knowledge-base/setting-up-your-knowledge-base · https://help.hiverhq.com/customer-portal/how-to-set-up-a-customer-portal-in-hiver
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Omni · Manage SLA Policies
|
|
2
|
+
|
|
3
|
+
> Segment `/manage-sla-policies?product=hiver-omni` — 3 articles.
|
|
4
|
+
> Mechanics match HIG — see [../hig/sla-policies.md](../hig/sla-policies.md). Omni applies SLAs across
|
|
5
|
+
> its channels (email, chat, voice, Slack), not email only.
|
|
6
|
+
|
|
7
|
+
**Articles:** Creating SLA Policies · Monitoring and managing SLAs · How SLA timers and breach alerts work (Agent view)
|
|
8
|
+
|
|
9
|
+
- **What it is:** SLA policies define response/resolution targets; timers and breach alerts show on conversations; Overdue/Due Soon views surface at-risk items. In Omni these apply across channels.
|
|
10
|
+
- **Roles:** Admin (create/manage/permissions); Agent (sees timers/alerts).
|
|
11
|
+
- **Connected features:** Business Hours, Automations (escalation), Views, SLA report, all channels.
|
|
12
|
+
- **Source:** https://help.hiverhq.com/working-with-slas/creating-sla-policies · https://help.hiverhq.com/manage-sla-policies?product=hiver-omni
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# ClickUp Bug Ticket Template
|
|
2
|
+
|
|
3
|
+
Use this template when generating bug tickets for a confirmed bug. **Every bug ticket must carry its
|
|
4
|
+
screenshot/evidence** — a bug without visual evidence is not ready to file.
|
|
5
|
+
|
|
6
|
+
## How to file (two modes)
|
|
7
|
+
|
|
8
|
+
**Preferred — create the ticket and attach the screenshot automatically (ClickUp MCP connected):**
|
|
9
|
+
|
|
10
|
+
1. Check the ClickUp MCP is available (search for `clickup_*` tools; a quick
|
|
11
|
+
`clickup_get_workspace_hierarchy` confirms the connection). If it isn't, use the fallback below.
|
|
12
|
+
2. Confirm the target **List** with the user once (e.g. "the Bugs list in the QA space") — don't
|
|
13
|
+
guess where tickets go.
|
|
14
|
+
3. Create the task with `clickup_create_task` using the fields in the template below (name =
|
|
15
|
+
`[TC ID] — [Test Case Name]`, description = the body, priority, tags/labels).
|
|
16
|
+
4. **Attach the screenshot(s)** to the created task with `clickup_attach_task_file`, passing the
|
|
17
|
+
screenshot file path(s) captured during testing. Do this for **every** ❌/⚠️ bug.
|
|
18
|
+
5. Report the created task URL back to the user, and note in the tracker: Status → `Bug`, Notes →
|
|
19
|
+
the ClickUp link.
|
|
20
|
+
|
|
21
|
+
**Fallback — copy-paste (ClickUp MCP not connected):** generate one markdown code block per bug so
|
|
22
|
+
the user can paste it into ClickUp, and **explicitly tell them to attach the listed screenshot
|
|
23
|
+
file(s)** to the ticket after pasting. List the exact file paths in the Screenshots section so they
|
|
24
|
+
know what to drag in.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Template
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
## Bug: [TC ID] — [Test Case Name]
|
|
32
|
+
|
|
33
|
+
**Priority:** [P0 / P1 / P2]
|
|
34
|
+
**Environment:** Hiver Extension v[version] | Gmail | Plan: [HIG / Omni / Both]
|
|
35
|
+
**SM:** [SM name used during testing]
|
|
36
|
+
**Assignee:** [leave blank — QA to fill]
|
|
37
|
+
**Labels:** bug, [feature-area]
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### Summary
|
|
42
|
+
[One sentence: what fails and what the user sees. Example: "When admin saves the CRM sync
|
|
43
|
+
configuration with Salesforce, the success message does not appear and the modal stays open."]
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
### Steps to Reproduce
|
|
48
|
+
|
|
49
|
+
1. [Exact step — name the button, field, or menu path]
|
|
50
|
+
2. [Continue until the bug is triggered]
|
|
51
|
+
3. [Be specific enough that a dev can reproduce without guessing]
|
|
52
|
+
|
|
53
|
+
**Test Data used:** [any specific values, account emails, field values, etc.]
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### Expected Behaviour
|
|
58
|
+
[Copy from the Expected Result column of the test case. Number each expected outcome.]
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
### Actual Behaviour
|
|
63
|
+
[Copy from the "Initial Behaviour – Testing 1" column. Describe exactly what happened: exact
|
|
64
|
+
error text, what was visible, what was missing, what state the UI ended up in.]
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### Screenshots / Evidence
|
|
69
|
+
**Required.** List the screenshot file path(s) captured during testing — these get **attached to
|
|
70
|
+
the ClickUp ticket** (via `clickup_attach_task_file` in the preferred flow, or dragged in manually
|
|
71
|
+
in the fallback). For UI/design bugs attach the screenshot of the failing state (design bugs:
|
|
72
|
+
attach the Figma-vs-build comparison); for API bugs attach the request/response evidence
|
|
73
|
+
(a saved response snippet or screenshot). If no screenshot was captured, re-run the case to capture
|
|
74
|
+
the bug before filing — don't file a bug without evidence.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Additional Context
|
|
79
|
+
[Any relevant spec section, system rule, or Figma node this relates to. Example: "Spec states
|
|
80
|
+
'On failure: Error displayed with specific reason. Admin can retry.' — error is not displayed."]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Priority Guide for Bugs
|
|
86
|
+
|
|
87
|
+
| Priority | When to use |
|
|
88
|
+
|---|---|
|
|
89
|
+
| P0 | Core functionality is broken. Feature cannot be used. Blocks release. |
|
|
90
|
+
| P1 | Feature works but with significant issue. Workaround exists. Should fix before release. |
|
|
91
|
+
| P2 | Minor issue, cosmetic, or edge case. Can be deferred. |
|
|
92
|
+
|
|
93
|
+
## Labels to add
|
|
94
|
+
|
|
95
|
+
Always add: `bug`
|
|
96
|
+
|
|
97
|
+
Add feature-area label based on what section the TC is in:
|
|
98
|
+
- Section A → `admin-config`
|
|
99
|
+
- Section B → `agent-experience`
|
|
100
|
+
- Section C → `[feature-specific]` (e.g. `crm-sync`, `automation`, `app-actions`)
|
|
101
|
+
- Section D → `analytics`
|
|
102
|
+
- Section E → `regression`
|
|
103
|
+
|
|
104
|
+
## Example Ticket
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
## Bug: A-04 — Admin saves CRM sync config but success message does not appear
|
|
108
|
+
|
|
109
|
+
**Priority:** P0
|
|
110
|
+
**Environment:** Hiver Extension v7.5.6 | Gmail | Plan: HIG
|
|
111
|
+
**SM:** test-support-sm
|
|
112
|
+
**Assignee:**
|
|
113
|
+
**Labels:** bug, admin-config, crm-sync
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Summary
|
|
118
|
+
When admin completes the Salesforce CRM sync setup and clicks Save, the success toast is not
|
|
119
|
+
shown and the modal remains open. The Custom Object is created in the background, but admin
|
|
120
|
+
receives no confirmation.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### Steps to Reproduce
|
|
125
|
+
|
|
126
|
+
1. Log in to Gmail with admin account (tony@test.com)
|
|
127
|
+
2. Go to Settings → Integrations → Custom Objects
|
|
128
|
+
3. Click "Create Custom Object"
|
|
129
|
+
4. Enter CO name: "Test CRM Object"
|
|
130
|
+
5. Select "Salesforce" as the import source
|
|
131
|
+
6. Complete Salesforce OAuth (use test Salesforce account)
|
|
132
|
+
7. Select record type: Contacts
|
|
133
|
+
8. Select 3 fields: Name, Email, Company
|
|
134
|
+
9. Click "Save"
|
|
135
|
+
|
|
136
|
+
**Test Data used:** Salesforce test account: sf-test@hiver.com | 3 fields selected
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Expected Behaviour
|
|
141
|
+
1. Success toast appears: "Custom Object created successfully"
|
|
142
|
+
2. Modal closes
|
|
143
|
+
3. New Custom Object appears in the Custom Objects list
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
### Actual Behaviour
|
|
148
|
+
- Modal remained open after clicking Save
|
|
149
|
+
- No success or error message appeared
|
|
150
|
+
- After refreshing the page, the Custom Object was visible in the list (created in background)
|
|
151
|
+
- No way for admin to know the save succeeded without manually refreshing
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### Screenshots / Evidence
|
|
156
|
+
screenshot-A04-step9.png
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### Additional Context
|
|
161
|
+
Spec states: "On success: Custom Object is ready to use." and the test plan notes the success
|
|
162
|
+
message should be visible. The object IS created but the confirmation UI is missing.
|
|
163
|
+
```
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Output-Quality Eval — step records, rubrics, and the qa-eval judge
|
|
2
|
+
|
|
3
|
+
**Phase 1 foundation.** "Performance" in this suite means **the quality/correctness of the output an
|
|
4
|
+
agent produced**, NOT how fast it ran. This file defines how each agent records what it produced and
|
|
5
|
+
how `qa-eval` grades it, so that when the workflow produces a bad result we know **exactly which agent
|
|
6
|
+
produced it**.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Step record — what each agent writes
|
|
11
|
+
|
|
12
|
+
When an agent finishes an action (a phase that produces an artefact or a decision), it appends a step
|
|
13
|
+
record at `<run>/steps/<skill>-<phase>.json`:
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"run_id": "hiver-notes-20260709-1530",
|
|
18
|
+
"skill": "qa-ui-author",
|
|
19
|
+
"phase": "tracker",
|
|
20
|
+
"input": { "spec": "spec.md", "handoff": "handoff.json", "effort": "standard" },
|
|
21
|
+
"output": { "artifact": "tracker.xlsx", "summary": "38 cases A12/B8/C14/D4" },
|
|
22
|
+
"self_check": { "passed": true, "notes": "no unfilled placeholders; all sections present" },
|
|
23
|
+
"verdict": null
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- `output.artifact` points at the real file the judge will open.
|
|
28
|
+
- `self_check` is a **hint from the agent about itself** — never the verdict.
|
|
29
|
+
- `verdict` is left `null`. **Only `qa-eval` fills it.** An agent does not grade its own work as truth.
|
|
30
|
+
|
|
31
|
+
### Step record vs action log — two different things
|
|
32
|
+
There are **two** trails per agent, and they answer different questions:
|
|
33
|
+
- **Step record** (`steps/<skill>-<phase>.json`, above) = *what the agent produced* — the output
|
|
34
|
+
artefact + summary. This is what `qa-eval` grades.
|
|
35
|
+
- **Action log** (`logs/<skill>.jsonl`) = *what the agent did* — one appended line per meaningful
|
|
36
|
+
action (tool called, page navigated, script run, decision made, file written):
|
|
37
|
+
`{"ts":"<iso>","skill":"qa-ui-run","action":"click","detail":"Add-note trigger, TC-14"}`.
|
|
38
|
+
This is the forensic trace. When `qa-eval` returns a FAIL, the action log is where you read
|
|
39
|
+
*why* it broke — the exact action before things went wrong.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. Rubrics — what "good output" means, per agent
|
|
44
|
+
|
|
45
|
+
Rubrics live in this file so all agents share one definition. Each rubric item is tagged **[B]locking**
|
|
46
|
+
(its violation → FAIL) or **[Q]uality** (its violation → at most DEGRADED).
|
|
47
|
+
|
|
48
|
+
| Agent | Judged artefact | Rubric |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| **hiver-explore** | `spec.md` | [B] no unfilled `<placeholders>` · [B] every claim tagged [D]/[L] · [Q] selectors captured · [Q] doc-vs-live noted |
|
|
51
|
+
| **qa-kit** | `handoff.json` triage | [B] classification matches the diff · [B] product (HIG/Omni) set · [Q] impacted services listed · [Q] key risks surfaced |
|
|
52
|
+
| **qa-ui-author** | `tracker.xlsx` | [B] matches `tracker-format.md` columns · [B] zero unfilled placeholders · [B] every case has Priority + Expected · [Q] covers areas A–D for the feature · [Q] case count fits effort · [Q] preconditions name SM + extension version |
|
|
53
|
+
| **qa-api-author** | `tracker.xlsx` | [B] API column block present + correct · [B] each case has method/endpoint/expected status · [Q] auth + error-contract cases present · [Q] count fits effort |
|
|
54
|
+
| **qa-ui-run** | tracker Testing-1 + screenshots | [B] every non-⏭️ case has a Testing-1 verdict · [B] no case silently dropped · [B] a screenshot exists for each ❌/⚠️ · [Q] observations are concrete, not vague |
|
|
55
|
+
| **qa-api-run** | tracker results | [B] ran against staging (not prod) · [B] status+body recorded per executed case · [B] destructive calls were gated · [Q] response snippets included |
|
|
56
|
+
| **qa-bugs** | ClickUp ticket | [B] repro + expected + actual present · [B] maps to a real failing TC · [B] screenshot/evidence attached · [Q] priority + labels set |
|
|
57
|
+
| **playwright-gen** | spec + run result | [B] spec compiles and runs · [B] no hallucinated page-object methods · [Q] assertions map to Expected · [Q] self-heal attempts logged with reasons |
|
|
58
|
+
|
|
59
|
+
Feature-specific coverage (the [Q] "covers the feature" items) is judged against the `spec.md` /
|
|
60
|
+
handoff scope, not a fixed list.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 3. Verdicts — PASS / DEGRADED / FAIL
|
|
65
|
+
|
|
66
|
+
`qa-eval` returns exactly one verdict per step, judging the **output artefact** against the rubric:
|
|
67
|
+
|
|
68
|
+
- **PASS** — every [B] item satisfied and most [Q] items too. The output is correct and usable
|
|
69
|
+
downstream as-is.
|
|
70
|
+
- **DEGRADED** — every [B] item satisfied, but one or more [Q] items missed. The output is **usable
|
|
71
|
+
but weaker than it should be** (e.g. vague observations, a thin risk register, a missing P2 edge
|
|
72
|
+
case). Downstream can proceed; the gap is noted for improvement.
|
|
73
|
+
- **FAIL** — **one or more [B] (blocking) items violated.** The output is missing, malformed, or wrong
|
|
74
|
+
in a way that makes it unsound to build on. Examples:
|
|
75
|
+
- a tracker missing required columns, or with unfilled `<placeholders>`
|
|
76
|
+
- execution results where cases have **no recorded verdict** (we don't actually know if they passed)
|
|
77
|
+
- a triage that **misclassified** the change (UI vs API)
|
|
78
|
+
- a bug ticket with no reproduction steps or no evidence
|
|
79
|
+
- a generated spec that **doesn't compile / run**, or that calls page-object methods that don't exist
|
|
80
|
+
|
|
81
|
+
FAIL is about the **deliverable being unsound** — not about a crash or a slow run.
|
|
82
|
+
|
|
83
|
+
### FAIL policy: **warn and continue**
|
|
84
|
+
A FAIL does **not** halt the pipeline. `qa-eval` flags it loudly in the report and the human decides
|
|
85
|
+
whether to re-run that stage, patch by hand, or accept it. Rationale: the pipeline is human-supervised;
|
|
86
|
+
a false-FAIL should never block a QA who can see the artefact is actually fine. (This policy is
|
|
87
|
+
configurable later; for now: warn, never block.)
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 4. qa-eval — the judge
|
|
92
|
+
|
|
93
|
+
- **Runs automatically at the end of every pipeline** (after the last agent), and can also be invoked
|
|
94
|
+
on demand.
|
|
95
|
+
- Resolves the run via `.current-run`, reads every `steps/*.json`, opens each referenced artefact, and
|
|
96
|
+
grades it against its rubric.
|
|
97
|
+
- **Independence:** the judge is a separate agent from the one being judged; it re-derives the verdict
|
|
98
|
+
from the artefact itself, using `self_check` only as a hint to double-check.
|
|
99
|
+
- **Two check types:**
|
|
100
|
+
- **Deterministic** (a small script, not the model): placeholder scan, tracker column conformance,
|
|
101
|
+
case-count vs effort, "does the spec compile/run", screenshot-exists. Exact and cheap.
|
|
102
|
+
- **Judgement** (LLM-as-judge): classification correctness, coverage adequacy, observation quality,
|
|
103
|
+
assertion↔Expected mapping. Model reserved for the subjective calls.
|
|
104
|
+
- **Output:** `<run>/trace/report.md` — a per-agent table (agent · phase · verdict · defect) plus a
|
|
105
|
+
rollup naming the **first FAIL** as where the workflow's output quality broke.
|
|
106
|
+
|
|
107
|
+
Example report:
|
|
108
|
+
```
|
|
109
|
+
Run hiver-notes-20260709-1530 — output quality
|
|
110
|
+
hiver-explore spec PASS
|
|
111
|
+
qa-kit triage PASS
|
|
112
|
+
qa-ui-author tracker PASS
|
|
113
|
+
qa-ui-run execute FAIL 6/38 cases have no Testing-1 verdict ← broke here
|
|
114
|
+
qa-bugs tickets DEGRADED ticket TC-14 missing labels
|
|
115
|
+
Rollup: output quality broke at qa-ui-run (execute). Missing verdicts: TC-14,17,19,22,30,33.
|
|
116
|
+
Policy: warn-and-continue — pipeline was not halted.
|
|
117
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# flow-capture — API tests from real UI user flows
|
|
2
|
+
|
|
3
|
+
**What this is.** An opt-in add-on that turns a **round-1 UI user-flow run** into **api-shield API
|
|
4
|
+
tests**. While the UI flow is exercised in the browser, the real API traffic it fires is captured,
|
|
5
|
+
cleaned, and — only after a human approves — turned into a draft PR on the api-shield framework.
|
|
6
|
+
|
|
7
|
+
This add-on is used by two skills:
|
|
8
|
+
- **`qa-ui-run`** — captures traffic during its browser first pass (Phase 5).
|
|
9
|
+
- **`qa-api-run`** — turns an approved recording into api-shield tests + a draft PR.
|
|
10
|
+
|
|
11
|
+
It exists because the round-1 click-through already drives the real app; the traffic it produces is
|
|
12
|
+
ground-truth for the API contract (real payload + real response) that we would otherwise have to
|
|
13
|
+
guess. See also `hiver-context.md` (Hiver concepts) and `tracker-format.md` (the API column block).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Repos involved (keep these straight)
|
|
18
|
+
|
|
19
|
+
| Purpose | Repo | Local clone | Branch |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| UI user-flow automation (the *source* of the traffic) | `GrexIt/playwright-hig-automation` | `~/Documents/poc-playwright` | `feature/remblebee` |
|
|
22
|
+
| API test framework (where generated tests + PR land) | api-shield | `~/Documents/api-s.h.i.e.l.d` | a **new** branch per flow, e.g. `qa/<flow>-api-tests` |
|
|
23
|
+
|
|
24
|
+
The api-shield PR is a **separate branch on the api-shield repo** — it is *not* pushed to
|
|
25
|
+
`feature/remblebee`. `feature/remblebee` is only the UI-flow source.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Pipeline and the two human gates
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
STAGE 1 — CAPTURE (qa-ui-run Phase 5, opt-in)
|
|
33
|
+
Run the UI user flow → capture network via read_network_requests → tag each request with the
|
|
34
|
+
UI action that fired it → normalize → emit qa-output/<feature>/flow-recording-<date>.json
|
|
35
|
+
|
|
36
|
+
── GATE A ── the UI flow must have PASSED Testing 1 (✅). A ❌/⚠️ flow is NOT eligible —
|
|
37
|
+
we never codify a broken flow as an API baseline.
|
|
38
|
+
|
|
39
|
+
── GATE B ── a human reads the recorded flow (endpoints, payloads, responses, in order)
|
|
40
|
+
and confirms the behaviour is correct.
|
|
41
|
+
|
|
42
|
+
STAGE 2 — GENERATE (qa-api-run, opt-in — HUMAN IN THE LOOP)
|
|
43
|
+
Ask explicitly: "Create the api-shield PR for this flow? (yes / no)"
|
|
44
|
+
• no → stop. Leave the recording in qa-output for later. Nothing is written to api-shield.
|
|
45
|
+
• yes → generate spec + payload fixture → open a DRAFT PR on api-shield → dev verifies.
|
|
46
|
+
Never auto-merge. The PR is always a draft requiring dev sign-off.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The principle mirrors `playwright-gen`: **we only codify what is green.** Capture is cheap and can
|
|
50
|
+
run on any pass; *promotion to an api-shield PR* is the gated, human-approved step.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## The recording (the intermediate artefact)
|
|
55
|
+
|
|
56
|
+
The recording decouples capture from generation — inspect and fix it before any code is written.
|
|
57
|
+
|
|
58
|
+
```jsonc
|
|
59
|
+
{
|
|
60
|
+
"feature": "conversation-assignment",
|
|
61
|
+
"product": "HIG", // or Omni
|
|
62
|
+
"env": "staging", // hard gate — capture must be against staging, never prod
|
|
63
|
+
"ui_flow_status": "PASS", // Gate A: only PASS recordings are promotable
|
|
64
|
+
"source": { // where the UI flow came from
|
|
65
|
+
"repo": "playwright-hig-automation",
|
|
66
|
+
"branch": "feature/remblebee",
|
|
67
|
+
"spec": "specs/<flow>.spec.ts" // if driven by a Playwright spec; else "manual"
|
|
68
|
+
},
|
|
69
|
+
"recorded_flow": [
|
|
70
|
+
{
|
|
71
|
+
"action": "Assign conversation to Agent B", // the UI intent = the user flow
|
|
72
|
+
"calls": [
|
|
73
|
+
{
|
|
74
|
+
"method": "PATCH",
|
|
75
|
+
"path_template": "/gx/api/sm/{sm_id}/conversations/{conv_id}",
|
|
76
|
+
"request_body": { "assignee_id": "{agent_id}" }, // parameterized, no real IDs
|
|
77
|
+
"response_status": 200,
|
|
78
|
+
"assert_fields": { "assignee_id": "{agent_id}", "status": "assigned" },
|
|
79
|
+
"variables_used": ["sm_id", "conv_id", "agent_id"]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"variables": { "sm_id": "…", "conv_id": "…", "agent_id": "…" } // resolved from config, redacted
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Normalization rules (deterministic — run these before writing the recording)
|
|
91
|
+
|
|
92
|
+
Apply in order. If any step cannot guarantee its invariant, **stop and surface it** — do not write.
|
|
93
|
+
|
|
94
|
+
1. **Allowlist filter.** Keep only Hiver API hosts/paths (the v2 / approvals / `*.hiverhq.com/api`
|
|
95
|
+
endpoints). Drop analytics, Gainsight, static assets, polling/heartbeat. One click fires ~30
|
|
96
|
+
requests; keep the few that matter.
|
|
97
|
+
2. **Redact.** Strip `Authorization`, `Cookie`, csrf, `set-cookie`. Replace, never persist. Run a
|
|
98
|
+
final self-check: if any secret-shaped value survives, **refuse to write the recording**.
|
|
99
|
+
3. **Parameterize.** Detect volatile values (IDs in path, emails, SM IDs, timestamps) → named
|
|
100
|
+
placeholders + a `variables` map. This is heuristic and **will misfire** — surface every guess
|
|
101
|
+
for human confirmation at Gate B; do not commit them silently.
|
|
102
|
+
4. **Path-template + dedup key.** `…/conversations/12345` → `…/conversations/{conv_id}`. The key
|
|
103
|
+
`(method + path_template + action)` decides update-existing-spec vs new-spec.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Generating api-shield tests (Stage 2, on "yes" at the human gate)
|
|
108
|
+
|
|
109
|
+
Match the api-shield pattern exactly (read a sibling spec first — e.g.
|
|
110
|
+
`tests/incredibles/specs/test_approvals_creation.py` — don't invent structure):
|
|
111
|
+
|
|
112
|
+
- **Payload** → `tests/<domain>/helpers/payloads/<flow>.json`
|
|
113
|
+
- **Spec** → `tests/<domain>/specs/test_<flow>.py`, reusing `hiver_login` / `get_token` /
|
|
114
|
+
`RequestUtility` and loading the payload via `read_json`.
|
|
115
|
+
- **Domain** — pick from the impacted services / triage; ask if ambiguous.
|
|
116
|
+
- **Auth translation (the crux).** The captured `Authorization: Bearer …` is **never** replayed.
|
|
117
|
+
The generated test authenticates itself via the framework's `hiver_login` → `get_token()` flow,
|
|
118
|
+
and maps the captured user email → `get_incredibles_email` / config.
|
|
119
|
+
- **Assertions.** Assert the captured status + a **small set of stable response fields** (like the
|
|
120
|
+
existing specs assert `error` / `message`). Never assert the whole body — it's brittle.
|
|
121
|
+
- **Marker.** Add a header comment
|
|
122
|
+
`# GENERATED FROM RECORDING <id> — happy-path characterization, review before merge`
|
|
123
|
+
and a `@pytest.mark.recorded` marker.
|
|
124
|
+
- **Draft PR.** Branch `qa/<flow>-api-tests` on api-shield → commit → `gh pr create --draft`. The PR
|
|
125
|
+
body links the source recording, lists the endpoints covered, and includes a dev-review checklist.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## What this add-on does and does NOT do (state these in the PR)
|
|
130
|
+
|
|
131
|
+
- **Capture = happy path only.** It cannot produce 401/403/422/boundary cases — `qa-api-run`'s normal
|
|
132
|
+
generator still owns those. Recording *complements* generated cases; it does not replace them.
|
|
133
|
+
- **Capture ≠ correct.** A recording is what the API *did*, not what it *should* do. So the PR is a
|
|
134
|
+
**regression/characterization** baseline and always a **draft requiring dev sign-off**.
|
|
135
|
+
- **Async flows.** Some actions fire background jobs; the immediate response may not reflect final
|
|
136
|
+
state. Flag these rather than asserting the transient body.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Safety gates (all must hold)
|
|
141
|
+
|
|
142
|
+
1. Capture is **opt-in** (until redaction + parameterization are trusted; flip to auto later).
|
|
143
|
+
2. Capture runs against **staging only** — never production.
|
|
144
|
+
3. **Gate A**: only PASS (✅) UI flows are promotable.
|
|
145
|
+
4. **Gate B**: a human confirms the recorded flow is correct.
|
|
146
|
+
5. **Human-in-the-loop generation**: explicit yes/no before any api-shield write or PR.
|
|
147
|
+
6. The api-shield PR is always a **draft**; a dev verifies before merge. Never auto-merge.
|