@codyswann/lisa 2.134.10 → 2.136.0

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 (71) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa-agy/plugin.json +1 -1
  5. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  8. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  14. package/plugins/lisa-expo/skills/exploratory-qa/SKILL.md +56 -4
  15. package/plugins/lisa-expo-agy/plugin.json +1 -1
  16. package/plugins/lisa-expo-agy/skills/exploratory-qa/SKILL.md +56 -4
  17. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo-copilot/skills/exploratory-qa/SKILL.md +56 -4
  19. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-expo-cursor/skills/exploratory-qa/SKILL.md +56 -4
  21. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric/skills/exploratory-qa/SKILL.md +18 -1
  24. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-agy/skills/exploratory-qa/SKILL.md +18 -1
  26. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-harper-fabric-copilot/skills/exploratory-qa/SKILL.md +18 -1
  28. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric-cursor/skills/exploratory-qa/SKILL.md +18 -1
  30. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  32. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  33. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-repo-topic/SKILL.md +15 -7
  38. package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +29 -1
  39. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  40. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/SKILL.md +15 -7
  41. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +29 -1
  42. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/SKILL.md +15 -7
  44. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +29 -1
  45. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/SKILL.md +15 -7
  47. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +29 -1
  48. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails/skills/exploratory-qa/SKILL.md +56 -4
  51. package/plugins/lisa-rails-agy/plugin.json +1 -1
  52. package/plugins/lisa-rails-agy/skills/exploratory-qa/SKILL.md +56 -4
  53. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails-copilot/skills/exploratory-qa/SKILL.md +56 -4
  55. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails-cursor/skills/exploratory-qa/SKILL.md +56 -4
  57. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  60. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  65. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  67. package/plugins/src/expo/skills/exploratory-qa/SKILL.md +56 -4
  68. package/plugins/src/harper-fabric/skills/exploratory-qa/SKILL.md +18 -1
  69. package/plugins/src/openclaw/skills/lisa-openclaw-connect-repo-topic/SKILL.md +15 -7
  70. package/plugins/src/openclaw/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +29 -1
  71. package/plugins/src/rails/skills/exploratory-qa/SKILL.md +56 -4
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,8 +63,28 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
84
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
85
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
86
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
87
+ every width.
68
88
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
89
  patterns should be consistent across the app and follow common conventions. Flag anything
70
90
  non-standard or that differs screen-to-screen.
@@ -84,11 +104,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
104
 
85
105
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
106
  unknown, use a practical baseline: phone, tablet/narrow, desktop, plus any app-specific cutoff.
87
- - At each breakpoint, walk the key paths again and confirm the experience holds: expected
107
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
108
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
109
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
110
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
111
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
112
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
113
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
114
 
91
- ### 5. Watch Load & Latency
115
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
116
+
117
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
118
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
119
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
120
+
121
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
122
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
123
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
124
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
125
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
126
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
127
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
128
+ filter card.
129
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
130
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
131
+ its chevron, a label cut mid-word.
132
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
133
+ with no gap between them.
134
+
135
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
136
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
137
+ Improvement** — a user literally cannot see or click all of it.
138
+
139
+ ### 6. Watch Load & Latency
92
140
 
93
141
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
142
  route-specific content, and visually stable/full route content.
@@ -122,6 +170,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
170
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
171
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
172
 
173
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
174
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
175
+ is an `Improvement`.
176
+
125
177
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
178
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
179
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,8 +63,28 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
84
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
85
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
86
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
87
+ every width.
68
88
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
89
  patterns should be consistent across the app and follow common conventions. Flag anything
70
90
  non-standard or that differs screen-to-screen.
@@ -84,11 +104,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
104
 
85
105
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
106
  unknown, use a practical baseline: phone, tablet/narrow, desktop, plus any app-specific cutoff.
87
- - At each breakpoint, walk the key paths again and confirm the experience holds: expected
107
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
108
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
109
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
110
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
111
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
112
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
113
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
114
 
91
- ### 5. Watch Load & Latency
115
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
116
+
117
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
118
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
119
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
120
+
121
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
122
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
123
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
124
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
125
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
126
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
127
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
128
+ filter card.
129
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
130
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
131
+ its chevron, a label cut mid-word.
132
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
133
+ with no gap between them.
134
+
135
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
136
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
137
+ Improvement** — a user literally cannot see or click all of it.
138
+
139
+ ### 6. Watch Load & Latency
92
140
 
93
141
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
142
  route-specific content, and visually stable/full route content.
@@ -122,6 +170,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
170
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
171
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
172
 
173
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
174
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
175
+ is an `Improvement`.
176
+
125
177
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
178
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
179
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,8 +63,28 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
84
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
85
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
86
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
87
+ every width.
68
88
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
89
  patterns should be consistent across the app and follow common conventions. Flag anything
70
90
  non-standard or that differs screen-to-screen.
@@ -84,11 +104,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
104
 
85
105
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
106
  unknown, use a practical baseline: phone, tablet/narrow, desktop, plus any app-specific cutoff.
87
- - At each breakpoint, walk the key paths again and confirm the experience holds: expected
107
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
108
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
109
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
110
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
111
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
112
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
113
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
114
 
91
- ### 5. Watch Load & Latency
115
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
116
+
117
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
118
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
119
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
120
+
121
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
122
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
123
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
124
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
125
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
126
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
127
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
128
+ filter card.
129
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
130
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
131
+ its chevron, a label cut mid-word.
132
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
133
+ with no gap between them.
134
+
135
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
136
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
137
+ Improvement** — a user literally cannot see or click all of it.
138
+
139
+ ### 6. Watch Load & Latency
92
140
 
93
141
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
142
  route-specific content, and visually stable/full route content.
@@ -122,6 +170,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
170
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
171
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
172
 
173
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
174
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
175
+ is an `Improvement`.
176
+
125
177
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
178
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
179
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,8 +63,28 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
84
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
85
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
86
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
87
+ every width.
68
88
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
89
  patterns should be consistent across the app and follow common conventions. Flag anything
70
90
  non-standard or that differs screen-to-screen.
@@ -84,11 +104,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
104
 
85
105
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
106
  unknown, use a practical baseline: phone, tablet/narrow, desktop, plus any app-specific cutoff.
87
- - At each breakpoint, walk the key paths again and confirm the experience holds: expected
107
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
108
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
109
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
110
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
111
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
112
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
113
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
114
 
91
- ### 5. Watch Load & Latency
115
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
116
+
117
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
118
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
119
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
120
+
121
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
122
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
123
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
124
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
125
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
126
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
127
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
128
+ filter card.
129
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
130
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
131
+ its chevron, a label cut mid-word.
132
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
133
+ with no gap between them.
134
+
135
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
136
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
137
+ Improvement** — a user literally cannot see or click all of it.
138
+
139
+ ### 6. Watch Load & Latency
92
140
 
93
141
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
142
  route-specific content, and visually stable/full route content.
@@ -122,6 +170,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
170
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
171
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
172
 
173
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
174
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
175
+ is an `Improvement`.
176
+
125
177
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
178
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
179
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.134.10",
3
+ "version": "2.136.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,8 +63,28 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
84
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
85
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
86
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
87
+ every width.
68
88
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
89
  patterns should be consistent across the app and follow common conventions. Flag anything
70
90
  non-standard or that differs screen-to-screen.
@@ -84,11 +104,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
104
 
85
105
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
106
  unknown, use a practical baseline: phone, tablet/narrow, desktop, plus any app-specific cutoff.
87
- - At each breakpoint, walk the key paths again and confirm the experience holds: expected
107
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
108
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
109
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
110
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
111
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
112
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
113
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
114
 
91
- ### 5. Watch Load & Latency
115
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
116
+
117
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
118
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
119
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
120
+
121
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
122
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
123
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
124
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
125
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
126
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
127
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
128
+ filter card.
129
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
130
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
131
+ its chevron, a label cut mid-word.
132
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
133
+ with no gap between them.
134
+
135
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
136
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
137
+ Improvement** — a user literally cannot see or click all of it.
138
+
139
+ ### 6. Watch Load & Latency
92
140
 
93
141
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
142
  route-specific content, and visually stable/full route content.
@@ -122,6 +170,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
170
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
171
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
172
 
173
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
174
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
175
+ is an `Improvement`.
176
+
125
177
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
178
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
179
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: exploratory-qa
3
- description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
3
+ description: First-time-user exploratory QA walkthrough for web apps that FEEDS THE LIFECYCLE. Use when asked to experience an app the way a brand-new human user would — landing cold on the home page and clicking through to find anything confusing, broken, or hard to understand (human-facing jargon, contextless extracted data, machine-style labels, slow or unclear loads, late meaningful content, cramped or cut-off UI, inconsistent/non-standard UX, awkward scroll behavior, unclear affordances, dead-end flows that strand a user — e.g. a login page with no way to register or recover a password) across all breakpoints. Instead of writing a report file, it files every finding as a tracked work item via lisa:tracker-write (bugs and usability/UX issues). A `ready` parameter controls whether those tickets are created build-ready (auto-picked-up by lisa:intake) or left in the backlog for human triage (default). For gaps in the automated Playwright test suite, use the e2e-coverage-gaps skill instead.
4
4
  ---
5
5
 
6
6
  # Exploratory QA
@@ -63,6 +63,23 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
63
63
  from the default UI or add context such as excerpts, labels, grouping, or provenance.
64
64
  - **Navigation clarity:** is it obvious how to get somewhere and back? Dead ends, hidden entry points,
65
65
  surprising redirects, broken links, no clear "home".
66
+ - **Flow completeness & expected counterparts:** a screen that gates access or shows one side of a
67
+ standard paired flow must offer the other side — or a clear path to it. A brand-new user must never
68
+ hit a dead end with no next step. Flag missing companion actions, especially on auth and entry
69
+ screens:
70
+ - **Sign-in with no sign-up:** a login page with no "Create account" / "Register" link strands
71
+ anyone who does not already have an account; likewise a registration page with no link back to
72
+ sign in.
73
+ - **No account recovery:** login with no "Forgot password?", no way to reset, and no way to resend a
74
+ verification email.
75
+ - **No exit from a state:** a signed-in app with no visible sign-out, or a modal / wizard / detail
76
+ view with no back, close, or cancel.
77
+ - **One-way actions:** create/add with no matching edit or delete (or the reverse) where a user
78
+ would reasonably expect both.
79
+ - **Unreachable entry points:** a feature only reachable by guessing a URL, or an empty state with
80
+ no primary action to populate it.
81
+ When the missing counterpart makes a core task impossible for a whole class of users (e.g. a new
82
+ user literally cannot create an account), file a `Bug`; otherwise file a usability `Improvement`.
66
83
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
84
  unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
85
  eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container