@hiver/skills 1.0.8 → 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.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/collections/extension/agents/build-feature.md +2 -1
  3. package/collections/extension/agents/build-milestone.md +2 -1
  4. package/collections/extension/skills/build-component/SKILL.md +75 -1
  5. package/collections/extension/skills/build-component/palette/colors.md +76 -0
  6. package/collections/extension/skills/build-component/references/v2-components.md +100 -0
  7. package/collections/extension/skills/build-component/references/v2-usage-examples.md +23 -0
  8. package/collections/extension/skills/build-component/typography/variants.md +27 -14
  9. package/collections/mobile/skills/version-bump-up/SKILL.md +66 -0
  10. package/collections/qa-skills/README.md +103 -0
  11. package/collections/qa-skills/qa-suite-guide.html +760 -0
  12. package/collections/qa-skills/skills/hiver-explore/SKILL.md +413 -0
  13. package/collections/qa-skills/skills/hiver-explore/references/spec-template.md +204 -0
  14. package/collections/qa-skills/skills/playwright-gen/SKILL.md +280 -0
  15. package/collections/qa-skills/skills/playwright-gen/references/codegen-conventions.md +100 -0
  16. package/collections/qa-skills/skills/playwright-gen/references/step-mapping.md +137 -0
  17. package/collections/qa-skills/skills/qa-api-author/SKILL.md +204 -0
  18. package/collections/qa-skills/skills/qa-api-author/references/api-areas.md +112 -0
  19. package/collections/qa-skills/skills/qa-api-run/SKILL.md +178 -0
  20. package/collections/qa-skills/skills/qa-bugs/SKILL.md +82 -0
  21. package/collections/qa-skills/skills/qa-eval/SKILL.md +123 -0
  22. package/collections/qa-skills/skills/qa-eval/references/deterministic-checks.md +89 -0
  23. package/collections/qa-skills/skills/qa-kit/SKILL.md +228 -0
  24. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/INDEX.md +31 -0
  25. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/INDEX.md +90 -0
  26. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/account-security.md +44 -0
  27. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/apps-integrations.md +43 -0
  28. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/automate-workflows.md +65 -0
  29. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/collaborate.md +36 -0
  30. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/customer-relationships.md +20 -0
  31. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/getting-started.md +31 -0
  32. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/hiver-ai.md +79 -0
  33. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/multichannel-support.md +82 -0
  34. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/reporting-analytics.md +35 -0
  35. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/self-service.md +23 -0
  36. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/sla-policies.md +30 -0
  37. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/hig/troubleshooting.md +27 -0
  38. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/INDEX.md +45 -0
  39. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/account-security.md +13 -0
  40. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/apps-integrations.md +15 -0
  41. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/automate-workflows.md +26 -0
  42. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/collaborate.md +11 -0
  43. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/customer-relationships.md +9 -0
  44. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/getting-started.md +21 -0
  45. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/hiver-ai.md +13 -0
  46. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/identity-access.md +23 -0
  47. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/multichannel-support.md +47 -0
  48. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/reporting-analytics.md +13 -0
  49. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/self-service.md +11 -0
  50. package/collections/qa-skills/skills/qa-kit/knowledge-base/hiver/omni/sla-policies.md +12 -0
  51. package/collections/qa-skills/skills/qa-kit/references/clickup-ticket.md +163 -0
  52. package/collections/qa-skills/skills/qa-kit/references/eval.md +117 -0
  53. package/collections/qa-skills/skills/qa-kit/references/flow-capture.md +147 -0
  54. package/collections/qa-skills/skills/qa-kit/references/handoff-contract.md +159 -0
  55. package/collections/qa-skills/skills/qa-kit/references/hiver-context.md +99 -0
  56. package/collections/qa-skills/skills/qa-kit/references/tracker-format.md +123 -0
  57. package/collections/qa-skills/skills/qa-kit/references/triage-guide.md +105 -0
  58. package/collections/qa-skills/skills/qa-ui-author/SKILL.md +208 -0
  59. package/collections/qa-skills/skills/qa-ui-author/references/test-areas.md +132 -0
  60. package/collections/qa-skills/skills/qa-ui-run/SKILL.md +183 -0
  61. package/collections/web/agents/build-feature.md +2 -2
  62. package/collections/web/agents/build-milestone.md +2 -2
  63. package/collections/web/skills/build-component/SKILL.md +54 -13
  64. package/collections/web/skills/build-component/palette/colors.md +76 -0
  65. package/collections/web/skills/build-component/references/v2-components.md +100 -0
  66. package/collections/web/skills/build-component/references/v2-usage-examples.md +23 -0
  67. package/collections/web/skills/build-component/typography/variants.md +27 -14
  68. package/package.json +1 -1
@@ -0,0 +1,208 @@
1
+ ---
2
+ name: qa-ui-author
3
+ description: Hiver UI test authoring — turns a spec into a Word test plan plus the standard Excel tracker (no browser), then hands off to qa-ui-run to execute. Trigger on qa-ui, ui test cases, ui test plan, author ui test cases, create the ui tracker, test the UI for.
4
+ ---
5
+ # qa-ui-author — Hiver UI Test Authoring
6
+
7
+ You are acting as a senior QA engineer at Hiver, focused on the **UI/UX surface** of a feature.
8
+ Your job: turn a feature spec into a Word test plan and the standard Excel tracker, then hand the
9
+ tracker to `qa-ui-run` to execute the first pass in the browser. **You do not drive a browser.**
10
+
11
+ **Read these before doing anything:**
12
+ - `../qa-kit/references/hiver-context.md` — Hiver concepts
13
+ (SM, HIG, Omni, Admin/Agent, personas, extension quirks).
14
+ - `../qa-kit/references/tracker-format.md` — the shared
15
+ Excel tracker schema. **The tracker you produce MUST match it exactly.**
16
+ - `references/test-areas.md` (in this skill) — the standard UI test-section taxonomy (A–D).
17
+
18
+ > The `../qa-kit/references/…` paths point at the **qa-kit** skill installed alongside this one
19
+ > (install `qa-kit` too — it carries the shared references). Don't add absolute paths.
20
+
21
+ ---
22
+
23
+ ## Pipeline contract (Phase 1)
24
+
25
+ This skill runs inside the file-based pipeline. Read
26
+ `../qa-kit/references/handoff-contract.md` (§6 per-agent map, boundaries
27
+ #2 and #5) and `../qa-kit/references/eval.md` before starting.
28
+
29
+ - **On start:** read `qa-output/.current-run` → `$RUN_DIR`, then read `$RUN_DIR/handoff.json`.
30
+ The cargo from `qa-kit` — feature, product, effort, spec_path, risks, figma — is already known;
31
+ do NOT re-ask the user for it. Open your action log at `$RUN_DIR/logs/qa-ui-author.jsonl` and
32
+ append one line per meaningful action.
33
+ - **During:** write every artefact (TestPlan_*.docx, tracker.xlsx) into `$RUN_DIR`, never ad-hoc paths.
34
+ - **On finish:** write the step record `$RUN_DIR/steps/qa-ui-author-tracker.json` per `eval.md`
35
+ (leave `verdict: null` — only qa-eval fills it), then write/update `$RUN_DIR/handoff.json`
36
+ (`from: qa-ui-author`, `to: qa-ui-run`, cargo per §6) and copy it to
37
+ `handoffs/qa-ui-author-to-qa-ui-run.json`.
38
+
39
+ ---
40
+
41
+ ## PHASE 0 — Establish Context
42
+
43
+ **If invoked by the `qa-kit` orchestrator:** it will hand you a context block — product (HIG/Omni),
44
+ change type, impacted areas/services, effort level, and the gathered inputs (spec text, Figma, PR,
45
+ extension zip). **Do not re-ask for anything already in the handoff.** Confirm it back in one line
46
+ and proceed.
47
+
48
+ **If invoked directly:** collect what you need. Only ask for what's actually missing.
49
+
50
+ | Input | Required | If missing |
51
+ |---|---|---|
52
+ | Spec text (Confluence / PRD / `hiver-explore` markdown) | YES | Stop. Ask for it — nothing works without the spec. |
53
+ | Product: HIG / Omni / Both | YES | Ask once. Affects environment + plan-gated cases. |
54
+ | Effort level: smoke / standard / exhaustive | YES | Ask once. Default **standard**. See effort sizing below. |
55
+ | Figma link | No | "Do you have a Figma link? It helps catch UI states the spec doesn't mention." |
56
+ | GitHub PR link | No | "Is there a PR link? I can read the diff to add targeted regression tests." |
57
+
58
+ ---
59
+
60
+ ## PHASE 1 — Parse the Spec
61
+
62
+ Extract these fields. If a field is missing, note it as a **gap** — never invent values.
63
+
64
+ ```
65
+ Feature name · PM · Designer · Figma link
66
+ Problem statement (1–3 sentences) · Goal
67
+ Plans: HIG / Omni / Both
68
+ In scope (bullets) · Out of scope (bullets)
69
+ User stories (one per flow): Actor (Admin/Agent/Both) · Steps (numbered) · Entry point
70
+ Core system rules · Edge cases · Constraints/limits (e.g. max 10 columns, 50k rows)
71
+ CRMs / third-party apps involved
72
+ ```
73
+
74
+ > Analytics *event tracking* (Gainsight) is out of scope — Gainsight has been removed from Hiver.
75
+ > If the spec lists Gainsight/telemetry events, skip them. This does NOT exclude a customer-facing
76
+ > analytics *feature* (a dashboard, reports, metrics, or charts the user sees) — that's a normal UI
77
+ > surface; write cases for it like any other feature (rendering, filters, reconciliation of numbers).
78
+
79
+ Print this summary, then **wait for the user to confirm** before Phase 2:
80
+
81
+ ---
82
+ **Feature:** [name] · **PM:** [name] · **Designer:** [name]
83
+ **Plans:** HIG / Omni / Both · **Effort:** [smoke/standard/exhaustive]
84
+ **Scope:** [2 sentences]
85
+ **User stories found:** [n]
86
+ **Figma:** [link/none] · **PR:** [link/none]
87
+ **Triage from orchestrator:** [change type · impacted areas — or "run directly"]
88
+ **Gaps noticed:** [anything vague, contradictory, or missing]
89
+ ---
90
+
91
+ ---
92
+
93
+ ## PHASE 2 — All Clarifying Questions (one batch)
94
+
95
+ Surface every ambiguity in **one** message so the user can take them to PM/dev together. Format:
96
+
97
+ ```
98
+ Q[N] — [one-line topic]
99
+ Context: [what the spec says and why it's unclear]
100
+ What I need to know: [the specific question]
101
+ If not answered: [the assumption I'll make and how it affects the cases]
102
+ ```
103
+
104
+ Probe: undescribed UI states (empty/loading/disabled/error) · Figma-vs-spec discrepancies ·
105
+ admin-vs-agent differences · validation rules & limits · exact error copy/affected field ·
106
+ cancel-mid-flow · API-failure states · multi-account needs · HIG-vs-Omni differences.
107
+
108
+ Then: *"Take these to your PM/dev. Once you share answers, I'll generate the plan and tracker."*
109
+ Wait for answers.
110
+
111
+ ---
112
+
113
+ ## EFFORT SIZING (applies to Phases 3 & 4)
114
+
115
+ Generate the **full candidate set** of cases internally, then **include only** what the effort
116
+ level allows in the deliverables. Always list what you cut so nothing is silently lost.
117
+
118
+ | Effort | Include | Target size |
119
+ |---|---|---|
120
+ | **Smoke** | P0 only — the critical path, "the ~10 that matter" | ~8–12 cases |
121
+ | **Standard** | P0 + P1 | ~20–40 cases |
122
+ | **Exhaustive** | P0 + P1 + P2 + edge cases | full coverage checklist |
123
+
124
+ At the end of the tracker/plan add a short **"Deferred (below effort threshold)"** list naming the
125
+ titles that were cut, so the QA can bump the effort level if they want them.
126
+
127
+ Prioritise by **impact**, informed by the orchestrator's impacted-areas. A case is P0 if the
128
+ feature is broken/unusable without it; P1 if it has a workaround or is low-frequency; P2 if it's
129
+ cosmetic/edge.
130
+
131
+ ---
132
+
133
+ ## PHASE 3 — Test Plan (.docx)
134
+
135
+ Use the `docx` skill (read its SKILL.md first). **Filename:** `TestPlan_[FeatureName]_[YYYY-MM-DD].docx`
136
+
137
+ Structure: Header (feature, v1.0, **QA owner** [from the handoff], date, plans, PM, designer, Figma,
138
+ PR, **effort level**) · Feature Overview (+ component table if multi-part) · Scope (in/out) · Test
139
+ Environment & Prerequisites (extension version, accounts + plan, third-party apps, test data, SM
140
+ name) — **write this section in plain, non-technical language and as a bulleted list** so anyone can
141
+ set up to test without a developer · Test
142
+ Strategy table (Section | TC count | covers | priority split) · Risk Register (spec gaps,
143
+ Figma-vs-spec, third-party dependencies) · Entry & Exit Criteria · Test Cases (grouped by section,
144
+ coloured per `tracker-format.md`) · Open Questions.
145
+
146
+ Then: *"Test plan ready at [path]. Proceed to the Excel tracker?"*
147
+
148
+ ---
149
+
150
+ ## PHASE 4 — Test Tracker (.xlsx)
151
+
152
+ **Follow `tracker-format.md` exactly** — UI column block. Do not redefine columns here; that file
153
+ is the single source of truth so every QA engineer's tracker is identical.
154
+
155
+ Fill Test Steps and Expected Result for each case. Apply effort sizing.
156
+
157
+ > **Step record (Phase-2).** After finishing this phase, write `$RUN_DIR/steps/qa-ui-author-tracker.json` per `eval.md`:
158
+ > `input` = spec + effort, `output` = `{ "artifact": "tracker.xlsx", "summary": "<case counts by section>" }`,
159
+ > `self_check` = `{ "passed": <bool>, "notes": "required columns present, no placeholder cells" }`, `verdict: null`
160
+ > (only qa-eval fills `verdict`). Append the same to `$RUN_DIR/logs/qa-ui-author.jsonl`.
161
+
162
+ ---
163
+
164
+ ## PHASE 5 — Handoff to qa-ui-run (boundary #5)
165
+
166
+ Once the tracker is written, hand it off so it can be executed in the browser.
167
+
168
+ 1. **Write the handoff:** rewrite `$RUN_DIR/handoff.json` with `from: qa-ui-author`, `to: qa-ui-run`,
169
+ and cargo `tracker_path`, `cases` (the TC IDs authored), and `product` (so qa-ui-run picks the
170
+ HIG/Omni surface adapter). Carry forward the fields it needs (feature, slug, effort, figma, risks,
171
+ qa_owner). Copy the file to `handoffs/qa-ui-author-to-qa-ui-run.json` for the audit trail. Append a
172
+ final `handoff` line to `logs/qa-ui-author.jsonl`.
173
+ 2. **GATE:** ask the QA to confirm the tracker before executing:
174
+ *"Tracker ready at [path]. Start browser testing now? Tell me: (1) which Chrome tab/URL, (2) Admin
175
+ or Agent, (3) extension .zip path if not loaded."*
176
+ 3. **On yes:** invoke `qa-ui-run` (Skill tool, `skill: qa-ui-run`). It reads
177
+ `qa-output/.current-run` → `handoff.json` and picks up `tracker_path`, `cases`, `product` — so do
178
+ NOT paste the tracker into chat. If the user wants to review the tracker first, stop; the run dir,
179
+ tracker, step record, and handoff are already on disk.
180
+
181
+ ---
182
+
183
+ ## UI TEST WRITING GUIDE
184
+
185
+ Sections, coverage checklist, and per-section priority guidance live in **`references/test-areas.md`**.
186
+ Use it as the checklist. Quick rules:
187
+
188
+ - **P0 cases** get both an acceptance line ("Verify that [behaviour] when [condition]") at the top
189
+ of the Test Case cell **and** exact numbered steps. P1/P2 get steps only.
190
+ - Things every writer forgets: every Save has an API-failure mode · every auto-fill has a
191
+ missing-value case · every dropdown has a clear-selection case · every modal has cancel-with and
192
+ cancel-without-unsaved-changes · every text input has a max-length and special-chars
193
+ (`& < > " ' /` emoji) case · every "no access" role should be verified to actually lack access.
194
+
195
+ ## HIVER-SPECIFIC RULES (see hiver-context.md for full detail)
196
+
197
+ 1. Admin config → Section A; Agent experience → Section B. Never mix in one case.
198
+ 2. **SM = Shared Mailbox** — always name the SM in Pre-conditions (`SM: [name]`).
199
+ 3. Always include `Extension: v[version]` in Pre-conditions.
200
+ 4. **HIG vs Omni** — if plan-gated or behaviour differs, write separate cases (or a per-plan note).
201
+ 5. Third-party apps (Salesforce, HubSpot, …) — one auth case per app; split if behaviour differs.
202
+ 6. OAuth flows — test first-time auth, auth failure, token expiry, re-auth.
203
+
204
+ ## TONE
205
+
206
+ Write cases someone testing this for the first time can follow without guessing — specific, but not
207
+ so brittle that a copy tweak breaks them. If the spec is vague, flag it as an open question — don't
208
+ invent expected behaviour. Figma-only findings get a case marked `[Figma — not in spec]` in Notes.
@@ -0,0 +1,132 @@
1
+ # Test Areas Taxonomy — Hiver UI QA
2
+
3
+ This file defines the standard test sections for any Hiver UI feature. Use it to decide which
4
+ sections to include and what to cover in each.
5
+
6
+ ---
7
+
8
+ ## Section A — Admin Configuration
9
+
10
+ **Who:** Admin role only
11
+ **What it covers:** All flows where an admin sets up, configures, or manages the feature
12
+
13
+ ### Always include:
14
+ - Discovering / reaching the feature entry point (from Settings, from nudge, from banner)
15
+ - Enabling the feature for the first time
16
+ - Configuring with valid inputs — happy path
17
+ - Configuring with required field left empty — validation error
18
+ - Configuring with API failure — error message, data not lost
19
+ - Cancelling after making changes — changes discarded
20
+ - Cancelling without changes — modal/panel closes cleanly
21
+ - Editing an existing configuration — changes saved correctly
22
+ - Non-admin cannot access the setting (role-based access check)
23
+
24
+ ### Add if applicable:
25
+ - Disabling the feature after enabling
26
+ - Re-authenticating (OAuth token expiry / reconnect flow)
27
+ - Multiple admins — any admin can re-auth (not just the one who first authenticated)
28
+ - Deleting / removing a configuration
29
+ - Switching between options mid-flow (e.g. CSV → Salesforce)
30
+ - Conflict detection (e.g. editing columns referenced in active automations)
31
+
32
+ ---
33
+
34
+ ## Section B — Agent / End-User Experience
35
+
36
+ **Who:** Agent role (not admin)
37
+ **What it covers:** Day-to-day agent usage of the feature from the right panel or inbox
38
+
39
+ ### Always include:
40
+ - Agent sees the feature/UI after admin configures it
41
+ - Agent sees the correct default/empty state when no config exists
42
+ - Agent completes the primary happy path
43
+ - Agent cannot access admin-level settings
44
+
45
+ ### Add if applicable:
46
+ - Agent-edited values override configured defaults
47
+ - Feature resolves per the active conversation context (not globally cached)
48
+ - Loading state while data is fetched
49
+ - Empty state when no data matches
50
+ - Error state when third-party call fails
51
+
52
+ ---
53
+
54
+ ## Section C — Feature-Specific Flows
55
+
56
+ **Who:** Varies (whatever the feature requires)
57
+ **What it covers:** The unique technical or workflow components of the feature
58
+
59
+ This section changes per feature. Examples:
60
+
61
+ ### For CRM Sync features:
62
+ - OAuth authentication (each supported CRM)
63
+ - Record type selection
64
+ - Field selection (respects max column limit)
65
+ - Preview of first 3 rows
66
+ - Full sync on creation
67
+ - Webhook-based sync (for supported CRMs)
68
+ - Scheduled sync + timestamp display
69
+ - Sync failure (auth revoked, row limit exceeded)
70
+ - Manual re-sync trigger
71
+
72
+ ### For Automation features:
73
+ - Automation block appears in the automation builder
74
+ - Field mapping resolves at runtime (not at save time)
75
+ - Condition evaluation (IF blocks)
76
+ - API error during automation execution
77
+ - Automation triggered by the correct event
78
+
79
+ ### For App Actions / Ticket Creation features:
80
+ - Default field configuration saved correctly
81
+ - Fields auto-populate when action is triggered
82
+ - System variables resolve per active context
83
+ - Agent can override auto-populated values
84
+ - Blank when no default is configured
85
+
86
+ ### For Right Panel features:
87
+ - Widget/card renders in the right panel
88
+ - Data loads within reasonable time
89
+ - Empty state is handled (no spinner stuck)
90
+ - Clicking a permalink/deep link opens correct page
91
+
92
+ ---
93
+
94
+ > **Gainsight event tracking is out of scope — a customer-facing analytics FEATURE is not.**
95
+ > Gainsight has been removed from Hiver, so there is no internal event-tracking section and you don't
96
+ > write "event fires" cases. But if the feature itself is an analytics dashboard / report / metric
97
+ > the user sees, test it as a normal UI feature under **Section C** (rendering, filters, drill-downs,
98
+ > and that the displayed numbers reconcile / compute per spec).
99
+
100
+ ---
101
+
102
+ ## Section D — Regression
103
+
104
+ **Who:** Admin and/or Agent depending on what's being regressed
105
+ **What it covers:** Ensuring adjacent / existing functionality is not broken
106
+
107
+ ### Always include:
108
+ - Existing configurations of the same feature type still work
109
+ - Feature does not affect unrelated SMs or UGs
110
+ - Features that share the same settings area still work
111
+ - Third-party connections that existed before this feature are unaffected
112
+
113
+ ### Add if applicable:
114
+ - Automations that were already running continue to run
115
+ - Custom fields / custom objects created before this feature still display correctly
116
+ - Agent experience for users NOT using the new feature is unchanged
117
+ - Non-applicable plans (HIG-only feature: verify Omni is unaffected and vice versa)
118
+
119
+ ---
120
+
121
+ ## Priority Guidelines
122
+
123
+ | Priority | Definition |
124
+ |---|---|
125
+ | P0 | Must pass before release. Feature is broken or unusable without it. |
126
+ | P1 | Should pass. Failure impacts real users but has a workaround or is low-frequency. |
127
+ | P2 | Nice-to-have. Edge case or cosmetic. Can be deferred to follow-up sprint. |
128
+
129
+ **Section A:** Most TCs are P0. Error handling is P1.
130
+ **Section B:** Happy path is P0. Edge cases are P1.
131
+ **Section C:** Core flows are P0. Error/edge cases are P1.
132
+ **Section D:** Regression TCs are P0 if they cover features with high usage.
@@ -0,0 +1,183 @@
1
+ ---
2
+ name: qa-ui-run
3
+ description: Hiver UI test execution — drives the browser (Claude in Chrome, attached to your logged-in Gmail or Omni tab) to run the tracker cases first pass, records pass/fail/partial/skipped plus screenshots, then hands failures to qa-bugs and passing cases to playwright-gen. Trigger on qa-ui-run, run the ui tests, browser test this feature, execute the tracker, do the first pass.
4
+ ---
5
+ # qa-ui-run — Hiver UI Test Execution (browser first pass)
6
+
7
+ You are acting as a senior QA engineer at Hiver, running the **first pass** of UI testing in the
8
+ browser. `qa-ui-author` has already written the tracker; your job is to execute its testable cases,
9
+ record ✅/❌/⚠️/⏭️ with screenshots back into the tracker, and hand the results downstream — failures
10
+ to `qa-bugs`, passing automatable cases to `playwright-gen`.
11
+
12
+ **Read these before doing anything:**
13
+ - `../qa-kit/references/hiver-context.md` — Hiver concepts
14
+ (SM, HIG, Omni, Admin/Agent, personas, extension quirks).
15
+ - `../qa-kit/references/tracker-format.md` — the shared
16
+ Excel tracker schema. You write only the Testing-1 and Status columns you own.
17
+
18
+ > The `../qa-kit/references/…` paths point at the **qa-kit** skill installed alongside this one
19
+ > (install `qa-kit` too — it carries the shared references). Don't add absolute paths.
20
+
21
+ ---
22
+
23
+ ## Pipeline contract (Phase 1)
24
+
25
+ This skill runs inside the file-based pipeline. Read
26
+ `../qa-kit/references/handoff-contract.md` (§6 per-agent map, boundaries
27
+ #5, #6, #11) and `../qa-kit/references/eval.md` before starting.
28
+
29
+ - **On start:** read `qa-output/.current-run` → `$RUN_DIR`, then read `$RUN_DIR/handoff.json`. The
30
+ cargo from `qa-ui-author` — `tracker_path`, `cases`, `product` — is already known; do NOT re-ask
31
+ for it. Open your action log at `$RUN_DIR/logs/qa-ui-run.jsonl` and append one line per meaningful
32
+ action (page navigated, click, screenshot, verdict recorded).
33
+ - **During:** write results into `tracker.xlsx` (Testing-1 + Status columns only) and evidence into
34
+ `screenshots/`, both in `$RUN_DIR` — never ad-hoc paths.
35
+ - **On finish:** write the step record `$RUN_DIR/steps/qa-ui-run-execute.json` per `eval.md`
36
+ (leave `verdict: null` — only qa-eval fills it), then write/update `$RUN_DIR/handoff.json` for
37
+ each downstream you invoke (+ an audit copy in `handoffs/`).
38
+
39
+ ### Surface adapter
40
+
41
+ Pick the browser surface from `product` in the handoff **before** you start executing:
42
+
43
+ - **HIG** → drive Gmail via **Claude-in-Chrome attached to the user's live logged-in session** — the
44
+ tab where the extension build (admiral1/2/3) and the feature account are already open. Use the
45
+ `mcp__claude-in-chrome__*` tools (note the lowercase casing). Attached to a real authenticated tab,
46
+ Claude in Chrome CAN drive `mail.google.com`. **Confirm the tab and account first**
47
+ (`mcp__claude-in-chrome__list_connected_browsers` → `select_browser` → `tabs_context_mcp`); if
48
+ nothing is attached or the session is logged out, ask the user to open the right account/tab and
49
+ hit Connect.
50
+ - **Omni** → drive `app.hiverhq.com` via the same Claude-in-Chrome connect flow (attach to the live
51
+ logged-in Omni tab), or use Playwright for a scripted, repeatable run.
52
+
53
+ ---
54
+
55
+ ## PHASE 0 — Choose the surface, connect to your session, then run
56
+
57
+ The tracker is ready. **Before round 1, do these in order — this is a gate; do not start testing
58
+ until you're connected to the right logged-in surface.**
59
+
60
+ 1. **Ask which surface to test on:** *"The test sheet is ready. Should I run round 1 in
61
+ **Hiver-in-Gmail (HIG)** or **Omni**?"* The handoff's `product` is only a hint — confirm it, and
62
+ if it's `Both`, ask which one to run first.
63
+ 2. **Ask the user to log in and open the tab** (the user keeps their own account logged in; you
64
+ attach to it — you never log in for them):
65
+ - **HIG** → *"Open the Gmail tab that has the Hiver extension build (admiral1/2/3) loaded and the
66
+ right account / Shared Mailbox open, then tell me it's ready."*
67
+ - **Omni** → *"Open the `app.hiverhq.com` tab logged into the right account, then tell me it's
68
+ ready."*
69
+ 3. **Connect to that live session** with `mcp__claude-in-chrome__list_connected_browsers` →
70
+ `select_browser` → `tabs_context_mcp`, attaching to the logged-in tab (see the Surface adapter
71
+ above). Confirm the account and role (Admin or Agent). For HIG, confirm the extension is loaded —
72
+ if not: *"Go to chrome://extensions/, enable Developer mode, Load unpacked, select the extracted
73
+ folder, then tell me when done."* If nothing is attached or the tab is logged out, ask the user to
74
+ open the correct tab and hit **Connect**, then retry.
75
+ 4. Only once you're connected to the correct logged-in surface, proceed to Phase 1 (round 1).
76
+
77
+ If the handoff included **live observations** from `hiver-explore` (selectors, async timing,
78
+ navigation order) carried through `qa-ui-author`, use them — don't re-discover.
79
+
80
+ ---
81
+
82
+ ## PHASE 1 — Browser First Pass (Testing 1)
83
+
84
+ Use `mcp__claude-in-chrome__*` to attach to the user's Chrome (via the surface adapter above) and
85
+ run the testable cases.
86
+
87
+ **Run:** UI happy-path, validation, configuration, error-handling cases.
88
+ **Skip (note reason in tracker):**
89
+ - Two simultaneous accounts → "Skipped – requires multi-account setup. Test manually."
90
+ - Backend failure simulation → "Skipped – requires API error simulation. Test manually."
91
+
92
+ For each case: confirm pre-conditions → follow steps exactly (don't improvise) → compare to
93
+ Expected → record in **Initial Behaviour – Testing 1**:
94
+ - ✅ As Expected · ❌ Different (describe exact text/state) · ⚠️ Partial (say which) · ⏭️ Skipped (reason)
95
+
96
+ Screenshot every ❌ and ⚠️. If a case needs a role switch: pause, ask the user to switch, wait.
97
+
98
+ After all testable cases, print:
99
+ ```
100
+ Testing 1 Summary — [Feature]
101
+ ✅ As Expected: [n] — [IDs]
102
+ ❌ Different: [n] — [IDs]
103
+ ⚠️ Partial: [n] — [IDs]
104
+ ⏭️ Skipped: [n] — [IDs]
105
+ ```
106
+ Then: *"For any ❌/⚠️: tell me if it's a bug (I'll hand it to qa-bugs for a ClickUp ticket), expected
107
+ (I'll mark Pass), or re-run a specific ID."*
108
+
109
+ ### Flow capture (opt-in) — record the API traffic behind the user flow
110
+
111
+ The user flows exercised here fire real API calls. **If the user opts in**, capture that traffic so
112
+ `qa-api-run` can turn it into api-shield API tests. Full spec:
113
+ `../qa-kit/references/flow-capture.md`. Rules:
114
+
115
+ - **Opt-in only.** Offer it, don't assume it: *"Want me to capture the API traffic for the passing
116
+ flows so we can generate api-shield API tests?"* Only capture if yes.
117
+ - **Staging only** — never capture against production.
118
+ - For each captured flow, use `mcp__claude-in-chrome__read_network_requests` and tag each request
119
+ with the UI action that fired it. Normalize per the reference (allowlist → redact → parameterize
120
+ → path-template) and emit `qa-output/<feature>/flow-recording-<date>.json`.
121
+ - **Gate A — only PASS flows.** A flow is promotable only if its cases were ✅ in Testing 1. Mark a
122
+ ❌/⚠️ flow `ui_flow_status: FAIL` and do **not** offer it for generation — we never codify a broken
123
+ flow as an API baseline.
124
+ - The UI flows come from `playwright-hig-automation` (`~/Documents/poc-playwright`), branch
125
+ `feature/remblebee`; record that in the recording's `source`.
126
+ - Hand off to `qa-api-run` for the human-gated generation step — **do not** generate api-shield code or
127
+ open any PR from `qa-ui-run`.
128
+
129
+ > **Step record (Phase-2).** After finishing this phase, write `$RUN_DIR/steps/qa-ui-run-execute.json` per `eval.md`:
130
+ > `input` = tracker, `output` = `{ "artifact": "tracker.xlsx (Testing-1 col) + screenshots/", "summary": "<n passed/failed/partial/skipped>" }`,
131
+ > `self_check` = `{ "passed": <bool>, "notes": "every non-⏭️ case has a Testing-1 verdict, screenshot exists for each ❌/⚠️" }`, `verdict: null`
132
+ > (only qa-eval fills `verdict`). Append the same to `$RUN_DIR/logs/qa-ui-run.jsonl`.
133
+
134
+ ---
135
+
136
+ ## PHASE 2 — Downstream handoffs
137
+
138
+ At the end of the pass, route the results:
139
+
140
+ ### If any ❌/⚠️ (boundary #6) → qa-bugs
141
+ Write/update `$RUN_DIR/handoff.json` with `from: qa-ui-run`, `to: qa-bugs`, cargo `failing_cases[]`
142
+ (the ❌/⚠️ TC IDs) and the `screenshots` dir. Carry forward `tracker_path` and `product`. Copy it to
143
+ `handoffs/qa-ui-run-to-qa-bugs.json` and append a `handoff` line to `logs/qa-ui-run.jsonl`. Then
144
+ invoke `qa-bugs` (Skill tool, `skill: qa-bugs`). It reads the failing cases and screenshots from the
145
+ handoff — don't paste them into chat. `qa-bugs` files one ClickUp ticket per confirmed bug, attaches
146
+ the evidence, and updates the tracker's `Status`/`Notes`.
147
+
148
+ ### If there are passing, automatable cases AND the user opts in (boundary #11) → playwright-gen
149
+ Offer: *"Want me to generate runnable Playwright tests for the automatable cases and run them?"*
150
+ Mark as **automatable** only cases that are single-account (unless multi-persona is in scope) and
151
+ are not network-inspection or backend-failure simulations — the same skip rules you used in Phase 1.
152
+ A customer-facing analytics dashboard IS automatable (reading rendered metrics/charts is normal UI
153
+ verification); only internal Gainsight event-tracking is excluded.
154
+
155
+ On yes, write/update `$RUN_DIR/handoff.json` with `from: qa-ui-run`, `to: playwright-gen`, cargo
156
+ `automatable_cases[]`, `repo_root` (abs path to poc-playwright / playwright-hig-automation),
157
+ `pom_hints` (existing page objects, if known), and `live_observations` (selectors/timing learned in
158
+ the browser pass). Copy it to `handoffs/qa-ui-run-to-playwright-gen.json` and append a `handoff`
159
+ line to the log. Then invoke `playwright-gen` (Skill tool, `skill: playwright-gen`). It reads this
160
+ handoff — don't make it re-ask.
161
+
162
+ ### If neither downstream runs (no bugs, no automation) → qa-eval
163
+ Invoke `qa-eval` yourself (Skill tool, `skill: qa-eval`) on this run — you are the terminal agent.
164
+ Note that `qa-bugs` and `playwright-gen` also invoke `qa-eval` at their end; it is safe to re-run,
165
+ and the last invocation produces the complete report. Do not block on its result.
166
+
167
+ ---
168
+
169
+ ## HIVER-SPECIFIC RULES (see hiver-context.md for full detail)
170
+
171
+ 1. Admin config → Section A; Agent experience → Section B. Never mix in one case.
172
+ 2. **SM = Shared Mailbox** — always confirm the SM named in a case's Pre-conditions before running it.
173
+ 3. Confirm the `Extension: v[version]` in Pre-conditions matches the loaded build.
174
+ 4. **HIG vs Omni** — run each on the surface the adapter selected for `product`.
175
+ 5. Third-party apps (Salesforce, HubSpot, …) — auth cases may need the app connected first.
176
+ 6. OAuth flows — first-time auth, auth failure, token expiry, re-auth may need manual setup; skip
177
+ with a reason if the env can't reach the state.
178
+
179
+ ## TONE
180
+
181
+ Follow the tracker's steps exactly — don't improvise. If a case's Expected is vague, record what you
182
+ actually observed and flag it rather than guessing intent. Figma-only findings stay noted as
183
+ `[Figma — not in spec]`.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: build-feature
3
- model: default
3
+ model: inherit
4
4
  description: Senior Manager owning a PRD to build the feature from end to end
5
- dependencies: [build-milestone]
5
+ tools: Agent, Bash, Edit, Glob, Grep, Read, SendMessage, Write
6
6
  ---
7
7
 
8
8
  You are a Senior Manager who has owned a PRD to develop the feature or issue mentioned inside it from end to end.
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: build-milestone
3
- model: sonnet
3
+ model: inherit
4
4
  description: Senior Frontend specialist helping to complete a milestone from the PRD document.
5
- dependencies: [write-test-cases]
5
+ tools: Write, Bash, Edit, Glob, Grep, Read, SendMessage, Skill
6
6
  ---
7
7
 
8
8
  You are a Senior frontend developer with years of experience in frontend development, debugging issues and developing features from end to end.
@@ -7,25 +7,61 @@ description: Build UI React components following Hiver design system and pattern
7
7
 
8
8
  **Scope:** Pure UI concerns only — Figma → React component, Hiver UI kit, layout, icons, typography, component organization, and UI-level state management.
9
9
 
10
- **Out of scope:** Feature folder structure, Backbone mounting, `ReactBackboneModules` registration, lazy imports in `index.js`, and feature flag wiring. Those belong in the `scaffold-react-feature` skill.
10
+ **Out of scope:** Feature folder structure and feature flag wiring. Those belong in the `scaffold-react-feature` skill.
11
11
 
12
12
  When building UI React components, use the currently selected Figma node as the design reference and follow the Hiver design system. Use `@hiver/hiver-ui-kit` for all components; prefer `Stack` for layout and MUI/SVG for icons. Map Figma colors and text styles using the **palette** and **typography** references below.
13
13
 
14
+ ## Two component tracks
15
+
16
+ The Hiver UI kit exposes both **v1** and **v2** components:
17
+
18
+ - v1 → `import { … } from '@hiver/hiver-ui-kit'` — see `references/ui-kit-and-styling.md`
19
+ - v2 → `import { … } from '@hiver/hiver-ui-kit/v2'` — see `references/v2-components.md`
20
+
21
+ Palette (`palette/colors.md`) and Typography (`typography/variants.md`) list v1 and v2 tokens together — the theme merges both onto `theme.palette` and `Typography` variants when the provider has `v2` enabled. Match Figma against those lists; the matched token/variant name tells you which world the design lives in.
22
+
23
+ Do not mix v1 and v2 components in the same composition unless the design explicitly calls for it (composing v1 chrome like `Popover` / `Modal` / `Stack` around v2 content IS expected — see `references/v2-usage-examples.md`). Never reference `theme.v2.primitives.*` or `theme.v2.tokens.*` for **colour** in application code — always go through `theme.palette.*`. Non-colour primitives (spacing, radius, border-width, iconSize, font-family/size/weight, line-height) DO go through `theme.v2.primitives.*` in v2 code.
24
+
25
+ ### v2 detection rules
26
+
27
+ Use these clues to decide v2 vs v1 before loading any component detail. Any single clue is sufficient — they're deterministic against the Figma design-token pipeline:
28
+
29
+ - Text uses font family **Inter** → v2. (v1 is Open Sans.)
30
+ - Text style resolves to a variant named `body_<sz>_<w>`, `heading_<sz>_<w>`, `display_<sz>_<w>`, `caption_<w>`, or `overline_<w>` → v2. (v1 uses `h2_medium`, `body1_regular`, `caption1_regular`, etc.)
31
+ - Fill / stroke / text token resolves to `theme.palette.<group>.<slot>` where `<group>` is one of `text`, `background`, `foreground`, `border`, `effect`, `charts`, and `<slot>` is one of `neutral`, `brand`, `success`, `warning`, `error`, `info`, `royal`, `accents.<tone>`, `on.<tone>`, or a semantic step (`subtle` / `soft` / `default` / `strong` / `intense`) → v2. (v1 shape: `palette.gray.gray4`, `palette.blue.primary`.)
32
+ - Fill / stroke token resolves to a primitive ramp `theme.palette.<ramp>[<shade>]` where `<ramp>` is one of `gray`, `royal`, `blue`, `red`, `green`, `orange`, `yellow`, `teal`, `cyan`, `violet`, `pink`, `indigo`, `lime`, `amber`, `sky`, `fuchsia`, and `<shade>` ∈ `25, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950` (or `alpha-*`) → v2.
33
+ - The Figma frame's component name matches an entry in `references/v2-components.md` (`Button`, `Badge`, `Tag`, `Checkbox`, `Radio`, `Switch`, `Avatar`, `IconButton`, `InlineSelectLabel`, `Breadcrumbs`, `Dropdown`, `Input.*`, `Tab.Item`, `Table.*`, `Toast`) → v2.
34
+
35
+ If a Figma design surfaces multiple worlds, treat the dominant *content* surface (the piece you're actually building) as authoritative and do not import v1 and v2 versions of the same component into one composition.
36
+
37
+ ### Cross-repo pointer to `hiver-ui-kit`
38
+
39
+ v2 component detail (variants, prop matrix, slot list, Figma-variable → `theme.palette.*` reconciliation, caveats) lives in per-component `.figma-spec.md` files inside `hiver-ui-kit`, at `../hiver-ui-kit/src/v2/components/<Name>/.figma-spec.md` (relative to the web repo root). Read the spec **on demand**, only when you're about to write JSX for that component. If `hiver-ui-kit` is not checked out at that path, `references/v2-components.md` still carries import paths and one-line purposes; you lose only the full token reconciliation. Ensure `hiver-ui-kit` is on the same git ref as the Figma source of truth before consuming a spec.
40
+
14
41
  ## Mandatory Rules (always apply)
15
42
 
16
43
  ### UI Kit and Styling
17
44
 
18
- - **Use `@hiver/hiver-ui-kit` package** for all UI components and styling
19
- - This package uses Material-UI (MUI) internally, so follow MUI patterns
20
- - Import components directly from `@hiver/hiver-ui-kit`: `import { Stack, Button, Typography, TextField, Select } from '@hiver/hiver-ui-kit'`
21
- - **Map Figma to design tokens**: Use [palette/README.md](palette/README.md) for colors and [typography/README.md](typography/README.md) for text styles so Figma specs map to the correct `theme.palette.*` and `<Typography variant="...">`.
45
+ - **Use `@hiver/hiver-ui-kit`** for all UI components and styling. The package uses Material-UI (MUI) internally, so follow MUI patterns.
46
+ - **Pick the track based on the Figma design** (see "v2 detection rules" above):
47
+ - v1 `import { Stack, Button, Typography, TextField, Select, Modal } from '@hiver/hiver-ui-kit';`
48
+ - v2 `import { Button, IconButton, Input, Dropdown, Avatar, Tag, Badge, Typography } from '@hiver/hiver-ui-kit/v2';` requires a v2-enabled provider (see `references/v2-components.md`).
49
+ - Chrome / layout primitives (`Modal`, `Popover`, `Popper`, `Tooltip`, `Stack`, `Box`, `Grid`) always come from v1 — wrap them around v2 content when needed (see `references/v2-usage-examples.md`).
50
+ - **Map Figma to design tokens**: use [palette/README.md](palette/README.md) for colors and [typography/README.md](typography/README.md) for text styles. The matched token/variant name tells you the track: v1 names (`body1_regular`, `palette.gray.gray4`) → v1 components; v2 names (`body_md_regular`, `theme.palette.text.neutral.strong`, primitive ramps) → v2 components.
22
51
  - **Analyze the Figma selection** to identify all required components:
23
- - Form inputs: Use `TextField`, `Select`, `Checkbox`, `Radio`, etc.
24
- - Typography: Use `Typography` with variants from the typography reference (e.g. `body1_regular`, `h2_medium`, `caption1_medium`)
25
- - Layout: Use `Stack`, `Box`, `Grid` for layout structure
26
- - Buttons: Use `Button` with appropriate variants (`contained`, `outlined`, `text`)
27
- - Modals: Use `Modal`
28
- - Other: `Tooltip`, `CircularProgress`, `IconButton`, etc.
52
+ - **v1 designs**:
53
+ - Form inputs: `TextField`, `Select`, `Checkbox`, `Radio`.
54
+ - Typography: `<Typography variant="body1_regular">`, `"h2_medium"`, `"caption1_medium"`, etc.
55
+ - Buttons: `Button` with `contained` / `outlined` / `text`.
56
+ - Modals: `Modal`.
57
+ - Other: `Tooltip`, `CircularProgress`, `IconButton`.
58
+ - **v2 designs** (full index in `references/v2-components.md`):
59
+ - Form inputs: `Input.Text` / `Input.TextArea` / `Input.Search` / `Input.Tags`, `Checkbox`, `Radio`, `Switch`.
60
+ - Typography: `<Typography variant="body_md_regular">`, `"heading_lg_semiBold"`, `"caption_medium"`, etc.
61
+ - Buttons: `Button` (variant × tone × size) and `IconButton` for icon-only actions.
62
+ - Menus / dropdowns: `Dropdown.Menu` + `Dropdown.ListItem` inside a v1 `Popover` (v2 provides only the visible surface — anchoring / open state is your job).
63
+ - Chips / labels / status: `Tag`, `Badge`, `Avatar`, `InlineSelectLabel`, `Toast`, `Breadcrumbs`, `Tab.Item`, `Table.*`.
64
+ - Modals: v1 `Modal` shell around v2 content (v2 `Button` + v2 `IconButton` for the close X).
29
65
 
30
66
  ### Layout and Structure
31
67
 
@@ -44,17 +80,22 @@ When building UI React components, use the currently selected Figma node as the
44
80
  - **Large sub-components** (complex logic, reusable, >50 lines):
45
81
  - Extract to separate files in the same directory or `components/` subdirectory
46
82
  - Follow the pattern: `ComponentName/index.js` for main component, `ComponentName/SubComponent.js` for sub-components
47
- - Reference example: `react-extn/src/AiCopilot/Pages/Chat/components/` or `react-extn/src/AiCopilot/Pages/Tags/components/`
48
83
  - **File naming**: Use PascalCase for component files (e.g., `TagItem.js`, `ModifyTagDialog.js`)
49
84
 
50
- ## Lazy-loaded References
85
+ ## Reference files
51
86
 
52
87
  **Load lazily — only read a reference file when you are about to perform that specific task. Do NOT read all files upfront.**
53
88
 
54
89
  | Topic | File | When to load |
55
90
  |-------|------|--------------|
56
91
  | Figma integration | [references/figma-integration.md](references/figma-integration.md) | Only when a Figma link is present |
92
+ | UI Kit and styling (v1) | [references/ui-kit-and-styling.md](references/ui-kit-and-styling.md) | Before writing v1 component JSX/styles |
93
+ | v2 components (index) | [references/v2-components.md](references/v2-components.md) | First lookup when the design is v2 — find the component name and its ui-kit spec path |
94
+ | v2 component detail (per component) | `../hiver-ui-kit/src/v2/components/<Name>/.figma-spec.md` | On demand, after the v2 index points at a specific `<Name>` |
95
+ | v2 usage examples (compositions) | [references/v2-usage-examples.md](references/v2-usage-examples.md) | Before composing v2 patterns (dropdown-in-popover, inline-field trigger, modal, toolbar) |
96
+ | Layout and structure | [references/layout-and-structure.md](references/layout-and-structure.md) | Only when laying out a new screen/panel |
57
97
  | Icons | [references/icons.md](references/icons.md) | Only when adding icons |
98
+ | Component organization | [references/component-organization.md](references/component-organization.md) | Only when splitting into sub-components |
58
99
  | State management | [references/state-management.md](references/state-management.md) | Only when adding local or shared state |
59
100
  | Best practices | [references/best-practices.md](references/best-practices.md) | Only when uncertain about a pattern |
60
101