@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,159 @@
|
|
|
1
|
+
# Handoff Contract — file-based state for the QA pipeline
|
|
2
|
+
|
|
3
|
+
**Phase 1 foundation.** Every agent in the suite reads its input from disk and writes its output to
|
|
4
|
+
disk. Handoffs are **files**, never chat blocks. This is the rule that keeps the decomposed skills
|
|
5
|
+
from drifting (chat-only handoffs are what broke v2).
|
|
6
|
+
|
|
7
|
+
Read this before emitting or consuming a handoff.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. The run directory
|
|
12
|
+
|
|
13
|
+
The first agent to run in a pipeline (usually `qa-kit`, or `hiver-explore` when there is no spec)
|
|
14
|
+
**mints a run** and creates its directory. Everything for that run lives under it.
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
qa-output/
|
|
18
|
+
.current-run # pointer file: absolute path to the active run dir
|
|
19
|
+
<feature-slug>/
|
|
20
|
+
<run-id>/
|
|
21
|
+
handoff.json # the latest/active handoff (see §3)
|
|
22
|
+
handoffs/<from>-to-<to>.json # one file per boundary crossed (audit trail)
|
|
23
|
+
tracker.xlsx # the shared state / memory (see §4)
|
|
24
|
+
steps/<skill>-<phase>.json # eval step records — what each agent PRODUCED (see eval.md)
|
|
25
|
+
logs/<skill>.jsonl # action log — the forensic trace of what each agent DID
|
|
26
|
+
trace/report.md # qa-eval output, written at pipeline end
|
|
27
|
+
screenshots/ # evidence captured by *-run agents
|
|
28
|
+
flow-recording-<date>.json # optional, from flow-capture
|
|
29
|
+
spec.md # optional, copied from hiver-explore
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### run-id
|
|
33
|
+
Format: `<feature-slug>-<YYYYMMDD-HHMM>`, e.g. `hiver-notes-20260709-1530`.
|
|
34
|
+
Mint it with a shell call so it is real, not guessed:
|
|
35
|
+
```bash
|
|
36
|
+
echo "$(echo "<feature>" | tr 'A-Z ' 'a-z-')-$(date +%Y%m%d-%H%M)"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### The pointer file
|
|
40
|
+
`qa-output/.current-run` contains the absolute path to the active run dir. Any agent (or a hook, or
|
|
41
|
+
`qa-eval`) resolves "which run am I in?" by reading this file. The minting agent writes it; later
|
|
42
|
+
agents read it. If it is missing, the agent asks the user which run to attach to (or mints a new one).
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. Who mints, who reads
|
|
47
|
+
|
|
48
|
+
| Agent | Mints a run? | Reads from | Writes to |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| hiver-explore | yes (if it starts the chain) | help docs + live UI | `spec.md`, `handoff.json` |
|
|
51
|
+
| qa-kit | yes (usual entry point) | spec, diff, interview | `handoff.json` (triage summary) |
|
|
52
|
+
| qa-ui-author / qa-api-author | no | `handoff.json` | `tracker.xlsx`, updated `handoff.json` |
|
|
53
|
+
| qa-ui-run / qa-api-run | no | `tracker.xlsx`, `handoff.json` | `tracker.xlsx` (results), `screenshots/` |
|
|
54
|
+
| qa-bugs | no | `tracker.xlsx` (failing rows) | ClickUp + tracker `Notes`/`Status` |
|
|
55
|
+
| playwright-gen | no | `tracker.xlsx` (passing rows), `handoff.json` | specs in POC + tracker results + PR |
|
|
56
|
+
| qa-eval | no | `steps/*.json`, artifacts | `trace/report.md` |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3. `handoff.json` — the boundary contract
|
|
61
|
+
|
|
62
|
+
Written by the upstream agent, read by the downstream agent so it never re-asks for what is already
|
|
63
|
+
known. One canonical `handoff.json` (the active one) plus an append-only copy per boundary in
|
|
64
|
+
`handoffs/` for audit.
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"run_id": "hiver-notes-20260709-1530",
|
|
69
|
+
"from": "qa-kit",
|
|
70
|
+
"to": "qa-ui-author",
|
|
71
|
+
"feature": "Hiver Notes",
|
|
72
|
+
"slug": "hiver-notes",
|
|
73
|
+
"product": "HIG", // HIG | Omni | Both
|
|
74
|
+
"effort": "standard", // smoke | standard | exhaustive
|
|
75
|
+
"classification": "UI", // UI | API | new-API | mixed (qa-kit only)
|
|
76
|
+
"impacted_services": ["web"],
|
|
77
|
+
"risks": ["right-panel injection timing"],
|
|
78
|
+
"spec_path": "qa-output/hiver-notes/.../spec.md",
|
|
79
|
+
"tracker_path": "qa-output/hiver-notes/.../tracker.xlsx",
|
|
80
|
+
"pr": "GrexIt/web#1234",
|
|
81
|
+
"figma": "https://figma.com/...",
|
|
82
|
+
"cases": [], // TC IDs relevant to this handoff (author→run→bugs)
|
|
83
|
+
"qa_owner": "Niranjan",
|
|
84
|
+
"notes": "free text",
|
|
85
|
+
"open_questions": ["are pinned notes in scope?"]
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Rules:
|
|
90
|
+
- Downstream agents **must** read `handoff.json` before asking the user anything.
|
|
91
|
+
- Each agent updates the fields it owns (e.g. author fills `tracker_path`; run fills nothing here but
|
|
92
|
+
writes results into the tracker), rewrites `handoff.json` with `from`/`to` advanced, and drops a
|
|
93
|
+
copy in `handoffs/<from>-to-<to>.json`.
|
|
94
|
+
- Missing optional fields are fine; record gaps in `notes`/`open_questions` rather than blocking.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 4. `tracker.xlsx` — the shared memory
|
|
99
|
+
|
|
100
|
+
The tracker is the single source of truth for cases and their state. Schema and formatting are defined
|
|
101
|
+
in `tracker-format.md` (unchanged). For the pipeline, the important contract is **column ownership** —
|
|
102
|
+
each stage writes only its own columns:
|
|
103
|
+
|
|
104
|
+
| Column | Owner (writes) | Everyone else |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| TC ID, Section, Test Case, Priority, Pre-conditions, Test Data, Steps, Expected | author | read-only |
|
|
107
|
+
| Initial Behaviour – Testing 1 (✅/❌/⚠️/⏭️) | run | read-only |
|
|
108
|
+
| Behaviour – Testing 2 | human QA | — |
|
|
109
|
+
| Status (Pass/Fail/Bug/Not Tested) | run → then qa-bugs | read-only |
|
|
110
|
+
| Notes / Bug Link | qa-bugs | read-only |
|
|
111
|
+
|
|
112
|
+
A stage never rewrites another stage's columns. This makes each stage independently re-runnable and
|
|
113
|
+
makes the tracker a reliable diff target for `qa-eval`.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 5. Phase-1 wiring checklist (how existing skills adopt this — no behaviour change)
|
|
118
|
+
1. Entry agent mints run dir + `.current-run` + `handoff.json`.
|
|
119
|
+
2. Each skill, at start, reads `.current-run` → run dir → `handoff.json`.
|
|
120
|
+
3. Each skill, at end, updates `handoff.json` + drops the `handoffs/` copy.
|
|
121
|
+
4. Artefacts (tracker, screenshots, spec) are written **into the run dir**, not ad-hoc paths.
|
|
122
|
+
No skill changes *what it does* yet — only *where it reads/writes*. Splitting comes in a later phase.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 6. Per-agent handoff map — the pipeline, boundary by boundary
|
|
127
|
+
|
|
128
|
+
**The contract, in one paragraph.** Every agent: (1) resolves the run via `qa-output/.current-run`;
|
|
129
|
+
(2) reads its input `handoff.json` and never re-asks for cargo already there; (3) does its work,
|
|
130
|
+
writing every artefact into the run dir and appending each meaningful action to `logs/<skill>.jsonl`;
|
|
131
|
+
(4) on finish writes/updates `handoff.json` for the next agent (+ an audit copy in `handoffs/`) and a
|
|
132
|
+
step record in `steps/`. `qa-eval` reads all step records + artefacts at the end. **That read → work
|
|
133
|
+
→ write loop IS the end-to-end contract.**
|
|
134
|
+
|
|
135
|
+
Boundaries (the split skills now exist — each emits its own records):
|
|
136
|
+
|
|
137
|
+
| # | from → to | Trigger | Cargo the upstream writes into `handoff.json` | Artefacts into run dir |
|
|
138
|
+
|---|---|---|---|---|
|
|
139
|
+
| 1 | hiver-explore → qa-kit | no spec; explore done | spec_path, feature, slug, product?, open_questions | spec ref · steps/hiver-explore-spec.json |
|
|
140
|
+
| 2 | qa-kit → qa-ui-author | class = UI or mixed | qa_owner, feature, product, effort, spec_path, risks, figma, cases:[] | steps/qa-kit-triage.json |
|
|
141
|
+
| 3 | qa-kit → qa-api-author | class = API/new-API/mixed | + changed_endpoints | steps/qa-kit-triage.json |
|
|
142
|
+
| 5 | qa-ui-author → qa-ui-run | tracker authored | tracker_path, cases, product (→ picks HIG/Omni adapter) | tracker.xlsx |
|
|
143
|
+
| 6 | qa-ui-run → qa-bugs | any ❌/⚠️ in Testing-1 | failing_cases[], screenshots dir | tracker results · screenshots/ · steps/qa-ui-run-execute.json |
|
|
144
|
+
| 7 | qa-ui-run → flow-capture | opt-in; PASS flows only | pass_flow_ids | flow-recording-<date>.json |
|
|
145
|
+
| 8 | flow-capture → qa-api-run | a PASS recording exists (Gate A) | recording_path, endpoints[], payloads, order | steps/flow-capture.json |
|
|
146
|
+
| 9 | qa-api-author → qa-api-run | spec-driven cases authored | tracker_path, cases, base_url (staging), auth_role | tracker.xlsx (API block) |
|
|
147
|
+
| 10 | qa-api-run → qa-bugs | any ❌/⚠️ | failing_cases[] | tracker results · steps/qa-api-run-execute.json |
|
|
148
|
+
| 11 | qa-ui-run → playwright-gen | passing automatable cases + opt-in | automatable_cases[], repo_root, pom_hints, live_observations | steps/qa-ui-run-execute.json |
|
|
149
|
+
| 12 | (all) → qa-eval | pipeline end (auto) | — reads every steps/*.json + the artefacts | trace/report.md |
|
|
150
|
+
|
|
151
|
+
### When does `qa-api-run` run? (two triggers)
|
|
152
|
+
`qa-api-run` is the API executor. It runs on EITHER trigger:
|
|
153
|
+
- **(a) Spec-driven** — qa-kit routed an API/new-API/mixed change → `qa-api-author` drafted cases → execute them.
|
|
154
|
+
- **(b) Capture-driven** — `flow-capture` produced a PASS recording during `qa-ui-run`. **This is the
|
|
155
|
+
low-prerequisite path: the recording already says exactly what to send (endpoints, payloads, order)
|
|
156
|
+
and what NOT to send** — Gate A means PASS flows only; captured tokens are redacted; the executor
|
|
157
|
+
re-authenticates via `get_token()` instead of replaying the captured bearer; destructive calls are
|
|
158
|
+
gated. When a recording lands, `qa-api-run` should OFFER to execute it against staging — you no
|
|
159
|
+
longer need to reverse-engineer the API or arrange prerequisites beyond a staging token.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Hiver Context — QA Reference
|
|
2
|
+
|
|
3
|
+
> **Domain knowledge base:** for the full feature map see
|
|
4
|
+
> `../knowledge-base/hiver/INDEX.md`. It splits into **two product trees** —
|
|
5
|
+
> `hig/` (Hiver in Gmail) and `omni/` (multi-channel: chat/Slack/voice/WhatsApp/tickets, Outlook,
|
|
6
|
+
> SSO/SCIM) — each mirroring that product's real help-center segments, with a cross-feature
|
|
7
|
+
> connection map for regression blast radius. Triage sets the product (HIG/Omni/Both); read the
|
|
8
|
+
> matching tree. This file below is the quick QA primer; the KB is the comprehensive reference. For
|
|
9
|
+
> deep, current, screen-accurate behaviour of any one feature, run `hiver-explore`.
|
|
10
|
+
|
|
11
|
+
## What is Hiver
|
|
12
|
+
|
|
13
|
+
Hiver is a **Chrome extension** that layers on top of Gmail to turn shared inboxes into a
|
|
14
|
+
collaborative helpdesk. It is NOT a standalone web app — it runs as a Chrome extension injected
|
|
15
|
+
into the Gmail UI. All testing happens with a specific extension version installed.
|
|
16
|
+
|
|
17
|
+
## Key Concepts
|
|
18
|
+
|
|
19
|
+
### SM — Shared Mailbox
|
|
20
|
+
The core unit in Hiver. A shared inbox (e.g. support@company.com) that multiple agents can access.
|
|
21
|
+
Every feature is configured at the SM level. When writing test cases, always specify which SM is
|
|
22
|
+
being used in Pre-conditions.
|
|
23
|
+
|
|
24
|
+
### Plans: HIG vs Omni
|
|
25
|
+
- **HIG** (Hiver in Gmail) — the Gmail-native plan. Extension runs inside Gmail.
|
|
26
|
+
- **Omni** — the multi-channel plan that supports email + other channels.
|
|
27
|
+
- Some features are plan-gated. If the spec says "Both HIG and Omni", test on both.
|
|
28
|
+
- If a feature behaves differently on each plan, write separate test cases.
|
|
29
|
+
|
|
30
|
+
### Admin vs Agent Roles
|
|
31
|
+
- **Admin** — configures settings, integrations, automations. Access to Settings panel.
|
|
32
|
+
- **Agent** — day-to-day user. Handles conversations. Does NOT have access to Settings.
|
|
33
|
+
- These are always separate test sections (Section A for Admin, Section B for Agent).
|
|
34
|
+
- A single account can have both roles in test environments.
|
|
35
|
+
|
|
36
|
+
### Right Panel
|
|
37
|
+
The Hiver sidebar that appears on the right side of a Gmail conversation. Shows conversation
|
|
38
|
+
details, custom fields, app integrations, notes, etc. Many features surface here for agents.
|
|
39
|
+
|
|
40
|
+
### Conversations
|
|
41
|
+
Hiver calls email threads "conversations". When the spec says "conversation", it means an email
|
|
42
|
+
thread visible in the SM inbox.
|
|
43
|
+
|
|
44
|
+
## Test Personas (from Playwright POC)
|
|
45
|
+
|
|
46
|
+
The POC uses named personas. Reference these in test pre-conditions:
|
|
47
|
+
|
|
48
|
+
| Persona | Role | Notes |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| Tony | Admin + Primary | Primary test account. Has admin access. |
|
|
51
|
+
| Steve | Agent | Secondary agent account for multi-user tests |
|
|
52
|
+
| Thor | Agent | Third agent account for multi-user tests |
|
|
53
|
+
|
|
54
|
+
> **Analytics *events* (Gainsight) are out of scope — analytics *features* are NOT.** Gainsight has
|
|
55
|
+
> been removed from Hiver, so do **not** write internal event-tracking cases and do not treat
|
|
56
|
+
> "events fire" as a testable QA area; if a spec still lists Gainsight events, ignore them and note
|
|
57
|
+
> them out of scope. This does **not** exclude a customer-facing analytics *feature* — an Analytics
|
|
58
|
+
> dashboard, reports, metrics, or charts the user sees. Those are normal UI surfaces: test them
|
|
59
|
+
> (rendering, filters, and that the numbers reconcile / compute per spec).
|
|
60
|
+
|
|
61
|
+
## Extension Environment
|
|
62
|
+
|
|
63
|
+
- Extension is loaded as a `.zip` or `.crx` file, not from the Chrome Web Store
|
|
64
|
+
- Test environments use specific extension versions provided by devs (e.g. v7.5.6)
|
|
65
|
+
- Pre-conditions for every TC should include: `Extension: v[version]`
|
|
66
|
+
- If the user provides a `.zip` path, it must be extracted and loaded via chrome://extensions/
|
|
67
|
+
with Developer Mode enabled
|
|
68
|
+
|
|
69
|
+
## Third-Party App Integrations
|
|
70
|
+
|
|
71
|
+
Hiver integrates with: Salesforce, HubSpot, Jira, Asana, ClickUp, Salesforce, GoHighLevel,
|
|
72
|
+
AppFolio, Slack, and more.
|
|
73
|
+
|
|
74
|
+
When a feature integrates with multiple apps:
|
|
75
|
+
- Each app may behave slightly differently (different OAuth flows, different field names)
|
|
76
|
+
- Write one TC per app for the auth flow
|
|
77
|
+
- Write one shared TC for common behaviour (e.g. "field mapping") with a note listing which apps it applies to
|
|
78
|
+
- Always test auth failure + token expiry separately from the happy path
|
|
79
|
+
|
|
80
|
+
## Common Test Setup Requirements
|
|
81
|
+
|
|
82
|
+
Before testing most features, you need:
|
|
83
|
+
- Admin account (Tony persona) logged into Gmail with Hiver extension loaded
|
|
84
|
+
- SM created and accessible
|
|
85
|
+
- If testing agent flows: agent account (Steve or Thor) in a separate Chrome profile
|
|
86
|
+
- If testing app integrations: the third-party app authenticated at the SM level
|
|
87
|
+
|
|
88
|
+
## Known Hiver Extension Quirks (from Playwright POC knowledgebase)
|
|
89
|
+
|
|
90
|
+
Refer to `~/Documents/poc-playwright/knowledgebase-claude/HIVER-QUIRKS.md`
|
|
91
|
+
for the full list. Key quirks to be aware of:
|
|
92
|
+
|
|
93
|
+
1. **Bulk action toolbar is async** — appears after an async update cycle, not immediately
|
|
94
|
+
2. **React re-render race conditions** — dropdowns can disappear after a re-render
|
|
95
|
+
3. **Floating panels intercept clicks** — some panels block clicks on elements behind them
|
|
96
|
+
4. **Dynamic vs static sidebar tabs** — some tabs only appear conditionally; navigation
|
|
97
|
+
can reset sidebar state
|
|
98
|
+
|
|
99
|
+
These are relevant when writing browser test steps — account for wait states.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Shared Test Tracker Format
|
|
2
|
+
|
|
3
|
+
This is the single source of truth for the Excel test tracker. **Both `qa-ui-author` and `qa-api-author`
|
|
4
|
+
MUST produce their tracker using this schema** so that every QA engineer on the team ships an
|
|
5
|
+
identical-looking file. Do not invent columns or reorder them.
|
|
6
|
+
|
|
7
|
+
Use the `xlsx` skill to generate the file. Read the xlsx skill's SKILL.md before writing code.
|
|
8
|
+
|
|
9
|
+
**Filename:** `TestTracker_[FeatureName]_[YYYY-MM-DD].xlsx`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Sheet 1 — Test Cases
|
|
14
|
+
|
|
15
|
+
Columns are grouped into **core** (always present, same order), a **track-specific** block, and
|
|
16
|
+
a **shared tail** (always present, same order). The only difference between a UI tracker and an
|
|
17
|
+
API tracker is the middle block.
|
|
18
|
+
|
|
19
|
+
### Core columns (both tracks — always in this order)
|
|
20
|
+
|
|
21
|
+
| # | Column | Notes |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 1 | TC ID | Section letter + number, e.g. `A-01`, `B-03` |
|
|
24
|
+
| 2 | Section | The test-area group name |
|
|
25
|
+
| 3 | Test Case | One clear sentence: what is being validated |
|
|
26
|
+
| 4 | Priority | `P0` / `P1` / `P2` |
|
|
27
|
+
| 5 | Pre-conditions | What must be true before this test can run, **written as a bulleted list — one condition per line** (use line breaks within the cell, each line starting with `• `). **Plain, non-technical language** so someone without a technical background can follow it. Still include the specifics (e.g. `• Hiver extension version 7.5.6 is installed`, `• You are logged in as an Admin`, `• Shared Mailbox "Support" exists`; for API: `• Testing on the staging environment`, `• You have an Admin login token`). |
|
|
28
|
+
| 6 | Test Data | The exact values to use, in **plain language a non-technical person understands** — spell out what each value is for, don't just dump raw IDs. E.g. `Admin email: tony@acme.com`, `Column name to add: "Priority"`, `Customer record ID: 10432 (the test customer "Acme Corp")`. |
|
|
29
|
+
|
|
30
|
+
### Track-specific block
|
|
31
|
+
|
|
32
|
+
**UI track (`qa-ui-author`) — insert after Test Data:**
|
|
33
|
+
|
|
34
|
+
| # | Column | Notes |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| 7 | Test Steps | Numbered list in one cell (line breaks within the cell) |
|
|
37
|
+
| 8 | Expected Result | Numbered list in one cell — one outcome per line |
|
|
38
|
+
| 9 | Initial Behaviour – Testing 1 | **Yellow** `#FFF9C4`. Filled by the browser agent (automated first pass). |
|
|
39
|
+
| 10 | Behaviour – Testing 2 | **Light blue** `#E3F2FD`. Filled by the QA engineer during manual verification. |
|
|
40
|
+
| 11 | Screenshots | File paths / "Attach in ticket" |
|
|
41
|
+
|
|
42
|
+
**API track (`qa-api-author`) — insert after Test Data:**
|
|
43
|
+
|
|
44
|
+
| # | Column | Notes |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 7 | Method | `GET` / `POST` / `PUT` / `PATCH` / `DELETE` |
|
|
47
|
+
| 8 | Endpoint | Path with placeholders, e.g. `/api/v2/channels/{id}` |
|
|
48
|
+
| 9 | Auth / Role | Token type + role used (e.g. `Admin bearer`, `Agent bearer`, `none`) |
|
|
49
|
+
| 10 | Request Payload | JSON body / query params in one cell |
|
|
50
|
+
| 11 | Expected Status | e.g. `201`, `200`, `403`, `422` |
|
|
51
|
+
| 12 | Expected Response | Key assertions on the body (fields, values, error code) — one per line |
|
|
52
|
+
| 13 | Actual Response | **Yellow** `#FFF9C4`. Filled when the case is executed (status + body snippet). |
|
|
53
|
+
|
|
54
|
+
### Shared tail (both tracks — always last, in this order)
|
|
55
|
+
|
|
56
|
+
| # | Column | Notes |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| … | Status | **Grey.** Values: `Pass` / `Fail` / `Bug` / `Blocked` / `Not Tested` |
|
|
59
|
+
| … | Notes / Bug Link | ClickUp ticket link or notes |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Formatting (identical for both tracks)
|
|
64
|
+
|
|
65
|
+
- Frozen top header row.
|
|
66
|
+
- Section header rows: merged across all columns, **dark navy `#1F3864`**, white bold text.
|
|
67
|
+
- Priority tint on the **TC ID + Priority** cells only:
|
|
68
|
+
- P0 → light red `#FDECEA`
|
|
69
|
+
- P1 → light amber `#FFF9C4`
|
|
70
|
+
- P2 → light green `#E8F5E9`
|
|
71
|
+
- Wrap text ON in all cells.
|
|
72
|
+
- Suggested widths (px): TC ID 60 · Section 120 · Test Case 220 · Pre-conditions 180 ·
|
|
73
|
+
Test Data 160 · Test Steps 300 · Expected Result 300 · Payload 260 · Expected Response 260 ·
|
|
74
|
+
Testing/Actual columns 200 · Status 100 · Notes 200.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Sheet 2 — Legend & Guide
|
|
79
|
+
|
|
80
|
+
Include, verbatim:
|
|
81
|
+
|
|
82
|
+
**QA owner:** `[name]` — *(the person running this QA pass; carried from the qa-kit handoff)*
|
|
83
|
+
|
|
84
|
+
**Generated at effort level:** `[Smoke / Standard / Exhaustive]` — *(state which; see effort
|
|
85
|
+
definitions below)*
|
|
86
|
+
|
|
87
|
+
| Status | Meaning |
|
|
88
|
+
|---|---|
|
|
89
|
+
| Pass | Behaviour/response matches Expected exactly |
|
|
90
|
+
| Fail | Behaviour/response does not match Expected |
|
|
91
|
+
| Bug | Defect confirmed — add ClickUp ticket link in Notes |
|
|
92
|
+
| Blocked | Cannot run — environment or dependency issue |
|
|
93
|
+
| Not Tested | Not yet executed |
|
|
94
|
+
|
|
95
|
+
| Priority | Definition |
|
|
96
|
+
|---|---|
|
|
97
|
+
| P0 | Must pass before release. Feature is broken/unusable without it. |
|
|
98
|
+
| P1 | Should pass. Real-user impact but has a workaround or is low-frequency. |
|
|
99
|
+
| P2 | Nice-to-have. Edge case or cosmetic. Can be deferred. |
|
|
100
|
+
|
|
101
|
+
**Effort levels** (set at intake; controls which cases are in this file):
|
|
102
|
+
|
|
103
|
+
| Level | Includes | Use when |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| Smoke | P0 only — the critical path / "the ~10 that matter" | Hotfix, tiny change, time-boxed pass |
|
|
106
|
+
| Standard | P0 + P1 | Default for most features |
|
|
107
|
+
| Exhaustive | P0 + P1 + P2 + all edge cases | High-risk feature, release-gating |
|
|
108
|
+
|
|
109
|
+
UI-only notes:
|
|
110
|
+
- "Testing 1" is the browser agent's automated first pass; "Testing 2" is the QA engineer's
|
|
111
|
+
manual verification.
|
|
112
|
+
- Run P0 cases first, then P1, then P2.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Sheet 3 — Summary (optional but recommended)
|
|
117
|
+
|
|
118
|
+
A small table the QA engineer can read at a glance:
|
|
119
|
+
|
|
120
|
+
| Section | P0 | P1 | P2 | Total | Pass | Fail | Bug | Blocked | Not Tested |
|
|
121
|
+
|---|---|---|---|---|---|---|---|---|---|
|
|
122
|
+
|
|
123
|
+
One row per section, plus a totals row.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Triage Guide — Classify the Change & Find the Blast Radius
|
|
2
|
+
|
|
3
|
+
The orchestrator uses this to turn "here's a feature/PR" into a **classification** (UI / API /
|
|
4
|
+
new-API / mixed), a list of **impacted services**, and a **product** (HIG / Omni / Both). Combine
|
|
5
|
+
the diff, the QA interview, the spec, and Figma — no single source is enough.
|
|
6
|
+
|
|
7
|
+
> The path maps below are a **starting heuristic** based on the Hiver repo layout. Always verify
|
|
8
|
+
> against the actual diff and repo — directory names move. If a path isn't in the map, open it and
|
|
9
|
+
> judge by content (does it render UI, or serve an endpoint?).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 1 — Read the change (read-only)
|
|
14
|
+
|
|
15
|
+
**From a PR:**
|
|
16
|
+
```bash
|
|
17
|
+
gh pr view <url-or-number> --json title,body,files # title, description, changed files
|
|
18
|
+
gh pr diff <url-or-number> # the actual diff
|
|
19
|
+
```
|
|
20
|
+
**From a local branch:**
|
|
21
|
+
```bash
|
|
22
|
+
git diff <base>...<branch> # base is usually master or main
|
|
23
|
+
git diff --name-only <base>...<branch> # just the file list, fast
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
If neither is available, triage from the spec + interview and record "no diff" as a gap (the
|
|
27
|
+
classification is then a best guess to confirm with the QA).
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Step 2 — Classify by what the changed files are
|
|
32
|
+
|
|
33
|
+
### Signals → UI change → route `qa-ui-author`
|
|
34
|
+
- Files under the **frontend** app (`web/…`): `.jsx`, `.tsx`, `.js` components, Redux
|
|
35
|
+
actions/reducers, `.scss`/`.css`, templates.
|
|
36
|
+
- Changes to user-visible copy, layout, right-panel widgets, modals, settings screens.
|
|
37
|
+
- Figma is attached and the diff is mostly presentational.
|
|
38
|
+
|
|
39
|
+
### Signals → API change → route `qa-api-author`
|
|
40
|
+
- Files under the **Rails backend** (`hot-api-mono/app/…`): controllers, models, `*.jbuilder`
|
|
41
|
+
views, serializers, `routes.rb`, policies, services/producers/consumers.
|
|
42
|
+
- Backend services: `sync-engine`, `automations-api`, `custom-integrations`.
|
|
43
|
+
- Changes to request/response shape, validation, auth/policy, DB schema/migrations.
|
|
44
|
+
|
|
45
|
+
### Signals → **new-API** (a sub-type of API) → route `qa-api-author`, flag `[new]`
|
|
46
|
+
- A **new route** added to `routes.rb` / a new controller action.
|
|
47
|
+
- A new `*.jbuilder` view or serializer for a new resource.
|
|
48
|
+
- A new endpoint version (e.g. a `v2` path alongside an existing `v1`).
|
|
49
|
+
- Treat new-API as higher-risk: full Section A/B/C coverage even at lower effort.
|
|
50
|
+
|
|
51
|
+
### Signals → **mixed** → route BOTH
|
|
52
|
+
- The diff touches frontend **and** backend (very common for a full feature: new endpoint +
|
|
53
|
+
the UI that calls it).
|
|
54
|
+
- A new backend endpoint plus a new right-panel/settings surface that consumes it.
|
|
55
|
+
|
|
56
|
+
When in doubt between API and mixed, ask the QA: "Does this change have a screen a user interacts
|
|
57
|
+
with, a backend endpoint, or both?"
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Step 3 — Map changed paths → impacted services (for the handoff)
|
|
62
|
+
|
|
63
|
+
Name the services so the sub-skills and the QA know the blast radius. Starting map (verify):
|
|
64
|
+
|
|
65
|
+
| Path / area (in the diff) | Impacted service to record | Track |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `web/…` (React/Redux) | `web` (frontend) + the feature area (e.g. right-panel, settings) | qa-ui-author |
|
|
68
|
+
| `hot-api-mono/app/controllers/…` | `hot-api-mono` + the controller/resource (e.g. channels) | qa-api-author |
|
|
69
|
+
| `hot-api-mono/app/models/…` / migrations | `hot-api-mono` data layer — flag regression + data integrity | qa-api-author |
|
|
70
|
+
| `hot-api-mono/**/*.jbuilder` / serializers | response contract — flag backward-compat | qa-api-author |
|
|
71
|
+
| `sync-engine/…` | `sync-engine` — flag downstream sync side effects | qa-api-author |
|
|
72
|
+
| `automations-api/…` | `automations-api` — automations/triggers (watch `OMNI`/`HIG` constants) | qa-api-author |
|
|
73
|
+
| `custom-integrations/…` | `custom-integrations` + the third-party app | qa-api-author |
|
|
74
|
+
|
|
75
|
+
Cross-reference for where tests live:
|
|
76
|
+
- **API SHIELD** (`api-s.h.i.e.l.d`) organizes tests by domain: `tests/channels`, `tests/admirals`,
|
|
77
|
+
`tests/platforms`, `tests/incredibles`, `tests/sync`, `tests/team_name`. Map the impacted resource
|
|
78
|
+
to the closest domain folder — `qa-api-author` Phase 7 uses this when scaffolding pytest.
|
|
79
|
+
- **poc-playwright** page objects are `pages/hiver-*.page.ts` — useful context for `qa-ui-author`.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Step 4 — Detect the product (HIG / Omni / Both)
|
|
84
|
+
|
|
85
|
+
In priority order, then **confirm with the QA**:
|
|
86
|
+
1. **Diff signals** — `OMNI` / `HIG` constants, tenant flags, or paths that are clearly one product
|
|
87
|
+
(e.g. an Outlook-specific module → Omni).
|
|
88
|
+
2. **Spec "Plans" field** — if the spec says HIG / Omni / Both, use it.
|
|
89
|
+
3. **QA interview** — just ask if 1–2 are silent.
|
|
90
|
+
|
|
91
|
+
If the feature is flagged for **Both** and behaviour may differ, tell the relevant track to write
|
|
92
|
+
per-product cases (the sub-skills handle this) and consider a cross-tenant negative case.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Step 5 — Surface the key risks
|
|
97
|
+
|
|
98
|
+
From the diff + interview, note the highest-blast-radius items for the Triage Summary:
|
|
99
|
+
- Schema/migration changes → regression + data-integrity risk.
|
|
100
|
+
- Changed response shape → backward-compat risk for existing clients.
|
|
101
|
+
- Auth/policy changes → authorization risk (Agent doing Admin things).
|
|
102
|
+
- Shared/often-used endpoints or components → broad regression risk.
|
|
103
|
+
- Third-party integration touched → external dependency risk.
|
|
104
|
+
|
|
105
|
+
These become the "Key risks" line in the handoff and seed the sub-skill's Risk Register.
|