@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,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-&lt;date&gt;.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.