@codyswann/lisa 2.134.8 → 2.134.10

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 (51) 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-agy/plugin.json +1 -1
  15. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-harper-fabric/skills/exploratory-qa/SKILL.md +38 -3
  20. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric-agy/skills/exploratory-qa/SKILL.md +38 -3
  22. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric-copilot/skills/exploratory-qa/SKILL.md +38 -3
  24. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-cursor/skills/exploratory-qa/SKILL.md +38 -3
  26. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-rails-agy/plugin.json +1 -1
  39. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  44. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  48. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  49. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  51. package/plugins/src/harper-fabric/skills/exploratory-qa/SKILL.md +38 -3
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "lodash": ">=4.18.1"
84
84
  },
85
85
  "name": "@codyswann/lisa",
86
- "version": "2.134.8",
86
+ "version": "2.134.10",
87
87
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
88
88
  "main": "dist/index.js",
89
89
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -64,7 +64,10 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
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
66
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
67
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
69
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
70
+ every width.
68
71
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
72
  patterns should be consistent across the app and follow common conventions. Flag anything
70
73
  non-standard or that differs screen-to-screen.
@@ -84,11 +87,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
87
 
85
88
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
89
  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
90
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
91
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
92
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
93
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
94
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
95
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
96
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
97
 
91
- ### 5. Watch Load & Latency
98
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
99
+
100
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
101
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
102
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
103
+
104
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
105
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
106
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
107
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
108
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
109
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
110
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
111
+ filter card.
112
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
113
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
114
+ its chevron, a label cut mid-word.
115
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
116
+ with no gap between them.
117
+
118
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
119
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
120
+ Improvement** — a user literally cannot see or click all of it.
121
+
122
+ ### 6. Watch Load & Latency
92
123
 
93
124
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
125
  route-specific content, and visually stable/full route content.
@@ -122,6 +153,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
153
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
154
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
155
 
156
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
157
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
158
+ is an `Improvement`.
159
+
125
160
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
161
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
162
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -64,7 +64,10 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
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
66
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
67
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
69
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
70
+ every width.
68
71
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
72
  patterns should be consistent across the app and follow common conventions. Flag anything
70
73
  non-standard or that differs screen-to-screen.
@@ -84,11 +87,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
87
 
85
88
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
89
  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
90
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
91
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
92
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
93
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
94
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
95
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
96
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
97
 
91
- ### 5. Watch Load & Latency
98
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
99
+
100
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
101
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
102
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
103
+
104
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
105
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
106
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
107
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
108
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
109
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
110
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
111
+ filter card.
112
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
113
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
114
+ its chevron, a label cut mid-word.
115
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
116
+ with no gap between them.
117
+
118
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
119
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
120
+ Improvement** — a user literally cannot see or click all of it.
121
+
122
+ ### 6. Watch Load & Latency
92
123
 
93
124
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
125
  route-specific content, and visually stable/full route content.
@@ -122,6 +153,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
153
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
154
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
155
 
156
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
157
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
158
+ is an `Improvement`.
159
+
125
160
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
161
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
162
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -64,7 +64,10 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
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
66
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
67
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
69
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
70
+ every width.
68
71
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
72
  patterns should be consistent across the app and follow common conventions. Flag anything
70
73
  non-standard or that differs screen-to-screen.
@@ -84,11 +87,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
87
 
85
88
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
89
  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
90
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
91
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
92
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
93
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
94
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
95
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
96
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
97
 
91
- ### 5. Watch Load & Latency
98
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
99
+
100
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
101
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
102
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
103
+
104
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
105
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
106
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
107
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
108
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
109
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
110
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
111
+ filter card.
112
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
113
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
114
+ its chevron, a label cut mid-word.
115
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
116
+ with no gap between them.
117
+
118
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
119
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
120
+ Improvement** — a user literally cannot see or click all of it.
121
+
122
+ ### 6. Watch Load & Latency
92
123
 
93
124
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
125
  route-specific content, and visually stable/full route content.
@@ -122,6 +153,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
153
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
154
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
155
 
156
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
157
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
158
+ is an `Improvement`.
159
+
125
160
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
161
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
162
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -64,7 +64,10 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
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
66
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
67
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
69
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
70
+ every width.
68
71
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
72
  patterns should be consistent across the app and follow common conventions. Flag anything
70
73
  non-standard or that differs screen-to-screen.
@@ -84,11 +87,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
87
 
85
88
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
89
  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
90
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
91
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
92
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
93
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
94
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
95
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
96
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
97
 
91
- ### 5. Watch Load & Latency
98
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
99
+
100
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
101
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
102
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
103
+
104
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
105
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
106
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
107
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
108
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
109
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
110
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
111
+ filter card.
112
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
113
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
114
+ its chevron, a label cut mid-word.
115
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
116
+ with no gap between them.
117
+
118
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
119
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
120
+ Improvement** — a user literally cannot see or click all of it.
121
+
122
+ ### 6. Watch Load & Latency
92
123
 
93
124
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
125
  route-specific content, and visually stable/full route content.
@@ -122,6 +153,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
153
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
154
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
155
 
156
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
157
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
158
+ is an `Improvement`.
159
+
125
160
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
161
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
162
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
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": "lisa-rails",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
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": "lisa-rails",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
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": "lisa-rails",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
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": "lisa-typescript",
3
- "version": "2.134.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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.8",
3
+ "version": "2.134.10",
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"
@@ -64,7 +64,10 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
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
66
  - **Visual/layout quality:** cut-off or truncated text, overlap, cramped/crowded density, offscreen or
67
- unreachable controls, accidental horizontal scroll, awkward empty space.
67
+ unreachable controls, accidental horizontal scroll, awkward empty space. **Do not judge this by
68
+ eyeballing a screenshot alone** — a control clipped by a few pixels or pushed just past a container
69
+ edge looks fine in a thumbnail. Confirm it with the programmatic layout-integrity sweep in §5 at
70
+ every width.
68
71
  - **Consistency / standard UX:** components, spacing, button styles, terminology, and interaction
69
72
  patterns should be consistent across the app and follow common conventions. Flag anything
70
73
  non-standard or that differs screen-to-screen.
@@ -84,11 +87,39 @@ mistakes, and tries the obvious thing. Cover at least these dimensions unless th
84
87
 
85
88
  - Discover breakpoints from the app (design tokens, CSS, responsive layout changes) when possible; if
86
89
  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
90
+ - **Do not test only the named breakpoints.** Clipping and overflow most often appear at the
91
+ *in-between* widths — where a row can no longer fit its contents but has not yet collapsed to the
92
+ next layout. Sweep a range of widths (e.g. 360, 390, 414, 600, 768, 834, 1024, 1280, 1440) plus a
93
+ few intermediate steps (e.g. ~900–1180) and re-check the key paths at each.
94
+ - At each width, walk the key paths again and confirm the experience holds: expected
88
95
  shell/navigation variant, critical controls visible and reachable, no unintended horizontal
89
96
  overflow, intentional scroll containers still usable, nothing cut off or crowded.
90
97
 
91
- ### 5. Watch Load & Latency
98
+ ### 5. Run Layout-Integrity Checks — Don't Eyeball Alone
99
+
100
+ A screenshot glance misses controls clipped by a few pixels or pushed just past a container edge. At
101
+ **every width**, in addition to looking, take DOM measurements via the browser automation tool
102
+ (Playwright, Chrome MCP, etc.) and treat any of these as a finding:
103
+
104
+ - **Document / container overflow:** `document.documentElement.scrollWidth > clientWidth`, or a
105
+ horizontal scrollbar on a container that should not scroll → accidental horizontal overflow.
106
+ - **Clipped or offscreen controls:** for every interactive control (buttons, links, inputs, selects,
107
+ menu items), compare its `getBoundingClientRect()` against the viewport and against each ancestor
108
+ that has `overflow: hidden | clip | auto | scroll`. If any edge of the control falls outside those
109
+ bounds, it is partially or fully clipped / unreachable — even when the page looks fine in a thumbnail.
110
+ This is exactly the case that gets missed: a submit/apply button whose right edge is cut off by its
111
+ filter card.
112
+ - **Truncated meaningful text:** an element whose `scrollWidth > clientWidth` (or that renders an
113
+ ellipsis) where the hidden text carries meaning — e.g. a select showing "Any CRD state" jammed into
114
+ its chevron, a label cut mid-word.
115
+ - **Colliding controls:** a label or value overlapping an adjacent control (icon, chevron, button)
116
+ with no gap between them.
117
+
118
+ Record which width(s) trigger each, the offending element, and a screenshot. **A primary or
119
+ interactive control that is clipped, offscreen, or unreachable is a `Bug`, not merely an
120
+ Improvement** — a user literally cannot see or click all of it.
121
+
122
+ ### 6. Watch Load & Latency
92
123
 
93
124
  - Measure separate milestones: visible app shell, `document.readyState`, first meaningful
94
125
  route-specific content, and visually stable/full route content.
@@ -122,6 +153,10 @@ validation gate; never call a vendor `*-write-*` skill directly). Map each findi
122
153
  | User-visible **bug** (broken behavior) | `Bug` | the `ready` flag (default `false`) |
123
154
  | **Usability / UX / clarity issue** | `Improvement` | the `ready` flag (default `false`) |
124
155
 
156
+ A control that is **clipped, offscreen, or otherwise unreachable** (per §5) counts as broken behavior
157
+ → file it as a `Bug`, not an `Improvement`. Pure crowding/clarity with the control still fully usable
158
+ is an `Improvement`.
159
+
125
160
  Each finding is a flat leaf (no children), so `build_ready` applies directly — pass it explicitly on
126
161
  every create. Each ticket MUST be a complete spec (the validator rejects thin tickets):
127
162