@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,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:
|
|
3
|
+
model: inherit
|
|
4
4
|
description: Senior Manager owning a PRD to build the feature from end to end
|
|
5
|
-
|
|
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:
|
|
3
|
+
model: inherit
|
|
4
4
|
description: Senior Frontend specialist helping to complete a milestone from the PRD document.
|
|
5
|
-
|
|
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
|
|
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
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
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
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
##
|
|
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
|
|