prowler-tour
Report-only. This skill never edits tour files or UI files; it inspects
the change, reports drift it finds between tours and the covered UI, and
recommends actions for the developer to apply.
Early-exit rule
Run this check first. Most UI edits are not tour-related — exit cheaply.
Glob ui/lib/tours/*.tour.ts.
For each tour, check whether any coversFiles glob pattern matches any
file in the current change.
If no tour matches, respond exactly:
No tour affected — skipping alignment check
and exit. Do not proceed to the checklist.
If at least one tour matches, continue to "Drift checklist" for that tour.
Drift checklist
For each affected tour, evaluate every item. Skip items that obviously do
not apply, but list explicitly which items were checked.
- Orphan selectors — every step's
target (which composes to
data-tour-id="<tour-id>-<step.target>") must resolve to a real element
in the codebase. Grep ui/ for the expected attribute value; report
any step whose target is missing.
- Renamed selectors — a
data-tour-id attribute was edited in this
change. Match it back to any tour step referencing the old value.
- Outdated copy — a popover
title/description references a button
label, heading, or term that no longer exists on the covered page.
- Obsolete steps — a step describes a section, panel, or workflow
that was removed.
- Missing steps — a new feature was added on the covered surface
without a corresponding step (e.g. a new panel, a new primary action,
a new wizard stage).
- Reordered flow — the user's path through the feature changed (e.g.
query builder moved before scan selection) and the step order no
longer reflects it.
Version-bump decision tree
Apply per tour after listing drift:
- NO bump when the change is cosmetic. Examples: fix a typo, soften
copy, rename a
data-tour-id selector while keeping the same step,
swap one screenshot for another, tighten wording.
- BUMP
version when the user-visible flow changes materially.
Examples: a new step was added or removed; the order changed; an
anchored target was retargeted to a different panel; the tour now
covers a new feature on the surface.
When in doubt, ask: "Would a user who already saw the previous version
miss something useful by not seeing this one?" If yes, bump.
Output format
When emitting a report, follow the exact structure in
references/output-format.md. The structure is mandatory because the
report is consumed downstream and tolerates no field reordering.
What this skill MUST NOT do
- Do not edit
*.tour.ts files. This skill is report-only.
- Do not edit UI files to add or rename
data-tour-id attributes.
- Do not invent new tours. Authoring a new tour is a separate, deliberate
decision — the developer makes it, not the skill.
- Do not flag drift in tours whose
coversFiles do not match any file
in the current change. Stick to the early-exit rule.
See also
references/output-format.md — exact report template (read when
emitting a report).
references/tours-architecture.md — code map for the tour abstraction
under ui/lib/tours/.
assets/tour-template.ts — boilerplate for authoring a new *.tour.ts.
1---
2name: prowler-tour
3description: >
4 Keeps product-tour definitions aligned with the UI features they describe.
5 Trigger: When modifying UI components that have associated tours, editing tour
6 definition files, or renaming data-tour-id attributes.
7license: Apache-2.0
8metadata:
9 author: prowler-cloud
10 version: "1.0"
11 scope: [root, ui]
12 auto_invoke:
13 - "Editing a UI file containing data-tour-id attributes"
14 - "Adding, updating, or removing a tour definition (*.tour.ts)"
15 - "Renaming or removing a data-tour-id attribute value"
16 - "Changing button labels or section headings on a tour-covered page"
17 - "Restructuring routes or layouts covered by a tour"
18allowed-tools: Read, Glob, Grep
19---
20
21# prowler-tour
22
23**Report-only.** This skill never edits tour files or UI files; it inspects
24the change, reports drift it finds between tours and the covered UI, and
25recommends actions for the developer to apply.
26
27## Early-exit rule
28
29Run this check first. Most UI edits are not tour-related — exit cheaply.
30
311. Glob `ui/lib/tours/*.tour.ts`.
322. For each tour, check whether any `coversFiles` glob pattern matches any
33 file in the current change.
343. If no tour matches, respond **exactly**:
35
36 > No tour affected — skipping alignment check
37
38 and exit. Do not proceed to the checklist.
394. If at least one tour matches, continue to "Drift checklist" for that tour.
40
41## Drift checklist
42
43For each affected tour, evaluate every item. Skip items that obviously do
44not apply, but list explicitly which items were checked.
45
461. **Orphan selectors** — every step's `target` (which composes to
47 `data-tour-id="<tour-id>-<step.target>"`) must resolve to a real element
48 in the codebase. Grep `ui/` for the expected attribute value; report
49 any step whose target is missing.
502. **Renamed selectors** — a `data-tour-id` attribute was edited in this
51 change. Match it back to any tour step referencing the old value.
523. **Outdated copy** — a popover `title`/`description` references a button
53 label, heading, or term that no longer exists on the covered page.
544. **Obsolete steps** — a step describes a section, panel, or workflow
55 that was removed.
565. **Missing steps** — a new feature was added on the covered surface
57 without a corresponding step (e.g. a new panel, a new primary action,
58 a new wizard stage).
596. **Reordered flow** — the user's path through the feature changed (e.g.
60 query builder moved before scan selection) and the step order no
61 longer reflects it.
62
63## Version-bump decision tree
64
65Apply per tour after listing drift:
66
67- **NO bump** when the change is cosmetic. Examples: fix a typo, soften
68 copy, rename a `data-tour-id` selector while keeping the same step,
69 swap one screenshot for another, tighten wording.
70- **BUMP `version`** when the user-visible flow changes materially.
71 Examples: a new step was added or removed; the order changed; an
72 anchored target was retargeted to a different panel; the tour now
73 covers a new feature on the surface.
74
75When in doubt, ask: "Would a user who already saw the previous version
76miss something useful by not seeing this one?" If yes, bump.
77
78## Output format
79
80When emitting a report, follow the exact structure in
81`references/output-format.md`. The structure is mandatory because the
82report is consumed downstream and tolerates no field reordering.
83
84## What this skill MUST NOT do
85
86- Do not edit `*.tour.ts` files. This skill is report-only.
87- Do not edit UI files to add or rename `data-tour-id` attributes.
88- Do not invent new tours. Authoring a new tour is a separate, deliberate
89 decision — the developer makes it, not the skill.
90- Do not flag drift in tours whose `coversFiles` do not match any file
91 in the current change. Stick to the early-exit rule.
92
93## See also
94
95- `references/output-format.md` — exact report template (read when
96 emitting a report).
97- `references/tours-architecture.md` — code map for the tour abstraction
98 under `ui/lib/tours/`.
99- `assets/tour-template.ts` — boilerplate for authoring a new `*.tour.ts`.