laxy-verify 1.1.18 → 1.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,119 +1,163 @@
1
- # laxy-verify
2
-
3
- CLI verification for frontend apps.
4
-
5
- `laxy-verify` runs production build checks, Lighthouse, tiered verify E2E, and plan-gated verification features for Free, Pro, and Pro+ accounts.
6
- It is designed around three user questions:
7
-
8
- - Free: "Will it break in production?"
9
- - Pro: "Would a client accept this?"
10
- - Pro+: "Can I ship this today?"
11
-
12
- ```bash
13
- npx laxy-verify --init --run
1
+ # laxy-verify
2
+
3
+ A frontend verification CLI that catches build breaks, regressions, and client-visible issues before you ship.
4
+
5
+ `laxy-verify` runs production build checks, Lighthouse, tiered verify E2E, and plan-gated verification for Free, Pro, and Pro+ accounts.
6
+ It is built around three simple questions:
7
+
8
+ - Free: "Any critical issues right now?"
9
+ - Pro: "Ready to show a client?"
10
+ - Pro+: "Ready for production?"
11
+
12
+ ```bash
13
+ npx laxy-verify --init --run
14
14
  npx laxy-verify .
15
15
  npx laxy-verify . --plan-override pro
16
16
  npx laxy-verify login
17
- npx laxy-verify whoami
18
- npx laxy-verify --help
19
- ```
20
-
21
- ## Quick Start
22
-
23
- ### 1. Initialize
24
-
25
- ```bash
26
- cd your-project
27
- npx laxy-verify --init
28
- ```
29
-
30
- This generates `.laxy.yml` and a GitHub Actions workflow.
31
-
32
- ### 2. Run locally
33
-
34
- ```bash
35
- npx laxy-verify .
36
- ```
37
-
38
- ### 3. Add to CI
39
-
40
- Commit the generated workflow. Each PR gets a verification run, grade output, and optional GitHub reporting.
41
-
42
- ## Verification Tiers
43
-
44
- | Plan | Question it answers |
45
- |------|---------------------|
46
- | Free | Will it break in production? |
47
- | Pro | Would a client accept this? |
48
- | Pro+ | Can I ship this today? |
17
+ npx laxy-verify whoami
18
+ npx laxy-verify --help
19
+ ```
20
+
21
+ What you get from one run:
22
+
23
+ - a verification grade: `Gold`, `Silver`, `Bronze`, or `Unverified`
24
+ - a decision-oriented verdict such as `client-ready`, `release-ready`, `hold`, or `investigate`
25
+ - `.laxy-result.json` for automation
26
+ - `laxy-verify-report.md` on paid plans for human review and AI handoff
27
+
28
+ ## Quick Start
29
+
30
+ ### 1. Run it on a frontend app
31
+
32
+ ```bash
33
+ cd your-project
34
+ npx laxy-verify .
35
+ ```
36
+
37
+ This runs the default verification flow in the current app directory.
38
+
39
+ ### 2. Generate config and CI workflow
40
+
41
+ ```bash
42
+ npx laxy-verify --init
43
+ ```
44
+
45
+ This creates:
46
+
47
+ - `.laxy.yml`
48
+ - `.github/workflows/laxy-verify.yml`
49
+
50
+ ### 3. Commit the workflow
51
+
52
+ Once committed, each PR gets a verification run, grade output, and optional GitHub reporting.
53
+
54
+ ### 4. Unlock paid plan features
55
+
56
+ ```bash
57
+ npx laxy-verify login
58
+ npx laxy-verify whoami
59
+ ```
60
+
61
+ For CI, set `LAXY_TOKEN` instead of using interactive login.
62
+
63
+ ```yaml
64
+ env:
65
+ LAXY_TOKEN: ${{ secrets.LAXY_TOKEN }}
66
+ ```
67
+
68
+ ## What It Checks
69
+
70
+ - production build success
71
+ - Lighthouse thresholds
72
+ - verify E2E scenarios for real user flows
73
+ - Pro+ viewport and visual regression evidence
74
+ - plan-aware verdicts for local runs and CI
75
+
76
+ ## Verification Tiers
77
+
78
+ | Plan | Question it answers |
79
+ |------|---------------------|
80
+ | Free | Any critical issues right now? |
81
+ | Pro | Ready to show a client? |
82
+ | Pro+ | Ready for production? |
49
83
 
50
84
  ## Grades
51
85
 
52
86
  | Grade | Meaning |
53
87
  |-------|---------|
54
88
  | Gold | Build passed + E2E passed + Lighthouse passed + Pro+ viewport evidence passed |
55
- | Silver | Build passed + E2E passed |
56
- | Bronze | Build passed |
57
- | Unverified | Build failed |
58
-
59
- ## Paid Features
60
-
61
- Log in with your Laxy account to unlock paid plan features.
62
-
63
- ```bash
64
- npx laxy-verify login
65
- npx laxy-verify whoami
66
- npx laxy-verify logout
67
- ```
68
-
69
- | Feature | Free | Pro | Pro+ |
70
- |---------|------|-----|------|
71
- | Build verification | Yes | Yes | Yes |
72
- | Lighthouse | 1 run | 3 runs | 3 runs |
73
- | Verify E2E | Smoke | Deeper client-send checks | Deeper client-send checks |
74
- | Detailed report view | No | Yes | Yes |
75
- | `laxy-verify-report.md` export | No | Yes | Yes |
76
- | Multi-viewport verification | No | No | Yes |
77
- | Visual diff | No | No | Yes |
78
- | Failure analysis signals | No | No | Yes |
79
-
80
- Pro is for delivery verification.
81
- Pro+ is for release-confidence verification with extra evidence before you say "ship it."
82
-
83
- For CI, set `LAXY_TOKEN` instead of using interactive login.
84
-
85
- ```yaml
86
- env:
87
- LAXY_TOKEN: ${{ secrets.LAXY_TOKEN }}
88
- ```
89
-
90
- ## Configuration
91
-
92
- All fields are optional in `.laxy.yml`.
93
-
94
- ```yaml
95
- framework: "auto"
96
- build_command: ""
97
- dev_command: ""
89
+ | Silver | Build passed + E2E passed |
90
+ | Bronze | Build passed |
91
+ | Unverified | Build failed |
92
+
93
+ ## Plan Differences
94
+
95
+ | Feature | Free | Pro | Pro+ |
96
+ |---------|------|-----|------|
97
+ | Build verification | Yes | Yes | Yes |
98
+ | Lighthouse | 1 run | 3 runs | 3 runs |
99
+ | Verify E2E | Smoke checks | Client-facing flow checks | Client-facing flow checks + release evidence |
100
+ | Detailed report view | No | Yes | Yes |
101
+ | `laxy-verify-report.md` export | No | Yes | Yes |
102
+ | Multi-viewport verification | No | No | Yes |
103
+ | Visual diff | No | No | Yes |
104
+ | Failure analysis signals | No | No | Yes |
105
+
106
+ Free tells you whether the app is basically standing.
107
+ Pro tells you whether the app is strong enough to call client-ready.
108
+ Pro+ adds the extra evidence needed for a real release-ready call.
109
+
110
+ ## Sample Output
111
+
112
+ ```text
113
+ Plan: Pro+
114
+ Grade: Gold
115
+ Verdict: release-ready
116
+
117
+ Passed:
118
+ - production build
119
+ - Lighthouse thresholds
120
+ - core E2E flows
121
+ - desktop, tablet, and mobile viewport checks
122
+
123
+ Artifacts:
124
+ - .laxy-result.json
125
+ - laxy-verify-report.md
126
+ ```
127
+
128
+ ## Configuration
129
+
130
+ All fields are optional in `.laxy.yml`.
131
+
132
+ ```yaml
133
+ framework: "auto"
134
+ build_command: ""
135
+ dev_command: ""
98
136
  package_manager: "auto"
99
137
  port: 3000
100
138
  build_timeout: 300
101
139
  dev_timeout: 60
102
140
  lighthouse_runs: 1
103
141
 
104
- thresholds:
105
- performance: 70
106
- accessibility: 85
107
- seo: 80
108
- best_practices: 80
109
-
110
- fail_on: "bronze"
111
- ```
112
-
113
- ## CLI Options
114
-
115
- ```text
116
- npx laxy-verify [project-dir]
142
+ thresholds:
143
+ performance: 70
144
+ accessibility: 85
145
+ seo: 80
146
+ best_practices: 80
147
+
148
+ fail_on: "bronze"
149
+ ```
150
+
151
+ Typical cases:
152
+
153
+ - raise `fail_on` to `silver` or `gold` in CI when you want stricter gates
154
+ - set `framework`, `build_command`, or `dev_command` if auto-detection is not enough
155
+ - increase `lighthouse_runs` when you want more stable performance evidence
156
+
157
+ ## CLI Options
158
+
159
+ ```text
160
+ npx laxy-verify [project-dir]
117
161
 
118
162
  Options:
119
163
  --format console|json
@@ -129,21 +173,21 @@ Options:
129
173
 
130
174
  Subcommands:
131
175
  login [email]
132
- logout
133
- whoami
134
- ```
135
-
136
- `--plan-override` is for downgrade testing only.
137
- Example: if your account is Pro+, you can run `--plan-override pro` or `--plan-override free` to verify the lower-tier behavior without changing your subscription.
138
- It will reject upgrades above your real entitlement.
139
-
140
- ## Result Files
141
-
142
- Each run writes `.laxy-result.json`.
143
-
144
- Paid plans also write a readable markdown summary to `laxy-verify-report.md`.
145
-
146
- - `Pro`: blocker-focused delivery report
176
+ logout
177
+ whoami
178
+ ```
179
+
180
+ `--plan-override` is for downgrade testing only.
181
+ Example: if your account is Pro+, you can run `--plan-override pro` or `--plan-override free` to verify the lower-tier behavior without changing your subscription.
182
+ It will reject upgrades above your real entitlement.
183
+
184
+ ## Result Files
185
+
186
+ Each run writes `.laxy-result.json`.
187
+
188
+ Paid plans also write a readable markdown summary to `laxy-verify-report.md`.
189
+
190
+ - `Pro`: client-ready delivery report
147
191
  - `Pro+`: release-readiness report with viewport and visual evidence
148
192
 
149
193
  Exit behavior follows the verification verdict, not just the legacy grade.
@@ -173,13 +217,13 @@ Exit behavior follows the verification verdict, not just the legacy grade.
173
217
  "report": { "verdict": "release-ready" }
174
218
  },
175
219
  "exitCode": 0,
176
- "_plan": "pro_plus"
177
- }
178
- ```
179
-
180
- ### `laxy-verify-report.md`
181
-
182
- For Pro and Pro+ runs, the markdown report is designed to be easy to read and easy to paste into an AI coding tool.
220
+ "_plan": "pro_plus"
221
+ }
222
+ ```
223
+
224
+ ### `laxy-verify-report.md`
225
+
226
+ For Pro and Pro+ runs, the markdown report is designed to be easy to read and easy to paste into an AI coding tool.
183
227
 
184
228
  It includes:
185
229
 
@@ -187,21 +231,33 @@ It includes:
187
231
  - what passed
188
232
  - blockers and warnings
189
233
  - exact verification evidence
190
- - failed E2E scenarios
191
- - a `Copy For AI` section you can paste directly into Codex, Cursor, Claude, or ChatGPT
192
-
193
- ## Regression Fixtures
194
-
195
- The repo also includes dedicated regression fixtures under `.qa-regression-fixtures/`.
196
- They intentionally break build, navigation, coverage, performance, viewport behavior, and visual stability so the verifier can be tested against known failure modes.
197
-
198
- ## Limitations
199
-
200
- - Monorepos require targeting the app subdirectory explicitly.
201
- - Dev-server-based Lighthouse can differ from production hosting.
202
- - Pro+ visual diff and viewport checks increase runtime.
203
- - Local verification is most stable on current LTS Node releases.
204
-
205
- ## License
206
-
207
- MIT
234
+ - failed E2E scenarios
235
+ - a `Copy For AI` section you can paste directly into Codex, Cursor, Claude, or ChatGPT
236
+
237
+ ## Environment Notes
238
+
239
+ - Best on current LTS Node releases. `Node 20.18+` is recommended.
240
+ - Monorepos should point `laxy-verify` at the actual app directory.
241
+ - `playwright` is optional. The CLI can run without it.
242
+ - Pro+ viewport and visual checks increase runtime.
243
+
244
+ ## Regression Fixtures
245
+
246
+ The repo also includes dedicated regression fixtures under `.qa-regression-fixtures/`.
247
+ They intentionally break build, navigation, coverage, performance, viewport behavior, and visual stability so the verifier can be tested against known failure modes.
248
+
249
+ ## Limitations
250
+
251
+ - Monorepos require targeting the app subdirectory explicitly.
252
+ - Dev-server-based Lighthouse can differ from production hosting.
253
+ - Pro+ visual diff and viewport checks increase runtime.
254
+ - Local verification is most stable on current LTS Node releases.
255
+
256
+ ## Links
257
+
258
+ - GitHub: https://github.com/psungmin24/Laxy/tree/main/laxy-verify
259
+ - Issues: https://github.com/psungmin24/Laxy/issues
260
+
261
+ ## License
262
+
263
+ MIT
@@ -66,6 +66,8 @@ function formatTimestamp(iso) {
66
66
  function sentenceForVerdict(view) {
67
67
  const isReleaseTier = view.tier === "pro_plus";
68
68
  switch (view.verdict) {
69
+ case "client-ready":
70
+ return "Yes. This run collected enough evidence to support a client-ready call.";
69
71
  case "release-ready":
70
72
  return isReleaseTier
71
73
  ? "Yes. This run collected enough evidence to support a release-ready call."
@@ -95,10 +97,14 @@ function defaultNextActions(result) {
95
97
  if (view.nextActions.length > 0)
96
98
  return view.nextActions;
97
99
  switch (view.verdict) {
100
+ case "client-ready":
101
+ return ["Send this version to the client, or rerun verification after meaningful UI or flow changes."];
98
102
  case "release-ready":
99
103
  return ["Ship this version, or archive this report as release evidence."];
100
104
  case "investigate":
101
- return ["Collect the missing verification evidence, then rerun the command before release."];
105
+ return view.tier === "pro_plus"
106
+ ? ["Collect the missing verification evidence, then rerun the command before release."]
107
+ : ["Collect the missing verification evidence, then rerun the command before sending this to a client."];
102
108
  case "build-failed":
103
109
  return ["Fix the production build first, then rerun the verification command."];
104
110
  case "quick-pass":
@@ -266,9 +272,11 @@ function renderCopyForAI(result, flavor) {
266
272
  const evidence = view.failureEvidence.map((item) => `- ${item}`);
267
273
  const closingLine = view.verdict === "release-ready"
268
274
  ? "Use this as release evidence, or rerun after any code change that could affect quality."
269
- : view.verdict === "investigate" && view.blockers.length === 0
270
- ? "Collect the missing verification evidence, then rerun the command and compare the new report."
271
- : "Please fix the blockers first, then rerun the verification command and compare the new report.";
275
+ : view.verdict === "client-ready"
276
+ ? "Use this as client handoff evidence, or rerun after any code change that could affect user-facing flows."
277
+ : view.verdict === "investigate" && view.blockers.length === 0
278
+ ? "Collect the missing verification evidence, then rerun the command and compare the new report."
279
+ : "Please fix the blockers first, then rerun the verification command and compare the new report.";
272
280
  const openingLine = flavor === "release"
273
281
  ? "Use this release report to decide whether the project is truly ready to ship."
274
282
  : flavor === "delivery"
@@ -277,7 +285,7 @@ function renderCopyForAI(result, flavor) {
277
285
  const targetLine = flavor === "release"
278
286
  ? "Goal: reach a release-ready verdict with strong viewport, visual, and user-flow evidence."
279
287
  : flavor === "delivery"
280
- ? "Goal: remove client-visible blockers and reach a confident delivery call."
288
+ ? "Goal: remove client-visible blockers and reach a confident client-ready call."
281
289
  : "Goal: fix the blockers and improve confidence on the next run.";
282
290
  return [
283
291
  `## ${sectionTitle(flavor, "copy")}`,
@@ -333,7 +341,7 @@ function buildMarkdownReport(projectDir, result) {
333
341
  const decisionLead = flavor === "release"
334
342
  ? "This section answers whether the current build is strong enough to call release-ready."
335
343
  : flavor === "delivery"
336
- ? "This section answers whether the current build is strong enough to send to a client."
344
+ ? "This section answers whether the current build is strong enough to call client-ready."
337
345
  : "This section explains the outcome of the current verification run.";
338
346
  const atAGlanceLead = flavor === "release"
339
347
  ? "This report is written for a ship or hold decision."
@@ -351,14 +351,14 @@ function buildVerificationReport(input, options) {
351
351
  summary = `Core checks passed, but release-ready confidence still needs ${missingEvidence.join(" and ")}.`;
352
352
  }
353
353
  else if (tier === "pro" && coreChecksPassed && !hasWarnings) {
354
- verdict = "release-ready";
354
+ verdict = "client-ready";
355
355
  confidence = "medium";
356
- summary = "No blocking issues found. Build, E2E, and Lighthouse checks passed. Safe to send to client.";
356
+ summary = "No blocking issues found. Build, E2E, and Lighthouse checks passed. This run supports a client-ready call.";
357
357
  }
358
358
  else if (tier === "pro" && coreChecksPassed && hasWarnings) {
359
359
  verdict = "investigate";
360
360
  confidence = "medium";
361
- summary = "Core checks passed, but warning-level risks remain. Review warnings before sending this to a client.";
361
+ summary = "Core checks passed, but warning-level risks remain. Review warnings before calling this run client-ready.";
362
362
  }
363
363
  else if (tier === "free") {
364
364
  if (evidence.hasConsoleErrors) {
@@ -43,11 +43,11 @@ function planToVerificationTier(plan) {
43
43
  function getVerificationTierQuestion(tier) {
44
44
  switch (tier) {
45
45
  case "pro":
46
- return "Is this strong enough to send to a client?";
46
+ return "Ready to show a client?";
47
47
  case "pro_plus":
48
- return "Can I call this release-ready with confidence?";
48
+ return "Ready for production?";
49
49
  default:
50
- return "Is this likely to break right now?";
50
+ return "Any critical issues right now?";
51
51
  }
52
52
  }
53
53
  function getTierVerificationView(report) {
@@ -1,6 +1,6 @@
1
1
  export type VerificationGrade = "gold" | "silver" | "bronze" | "unverified";
2
2
  export type VerificationTier = "free" | "pro" | "pro_plus";
3
- export type ReleaseVerdict = "quick-pass" | "investigate" | "hold" | "release-ready" | "build-failed";
3
+ export type ReleaseVerdict = "quick-pass" | "client-ready" | "investigate" | "hold" | "release-ready" | "build-failed";
4
4
  export interface LighthouseThresholds {
5
5
  performance: number;
6
6
  accessibility: number;
package/package.json CHANGED
@@ -1,12 +1,36 @@
1
- {
2
- "name": "laxy-verify",
3
- "version": "1.1.18",
4
- "description": "Frontend quality gate: build, Lighthouse, tiered E2E, and release-confidence verification",
5
- "license": "MIT",
6
- "type": "commonjs",
7
- "bin": {
8
- "laxy-verify": "dist/cli.js"
9
- },
1
+ {
2
+ "name": "laxy-verify",
3
+ "version": "1.1.20",
4
+ "description": "Frontend verification CLI for build checks, Lighthouse, E2E, and release readiness",
5
+ "license": "MIT",
6
+ "type": "commonjs",
7
+ "homepage": "https://github.com/psungmin24/Laxy/tree/main/laxy-verify#readme",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/psungmin24/Laxy.git",
11
+ "directory": "laxy-verify"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/psungmin24/Laxy/issues"
15
+ },
16
+ "keywords": [
17
+ "frontend",
18
+ "verification",
19
+ "quality-gate",
20
+ "release-readiness",
21
+ "lighthouse",
22
+ "e2e",
23
+ "qa",
24
+ "cli",
25
+ "nextjs",
26
+ "vite"
27
+ ],
28
+ "engines": {
29
+ "node": ">=20.18.0 <25"
30
+ },
31
+ "bin": {
32
+ "laxy-verify": "dist/cli.js"
33
+ },
10
34
  "files": [
11
35
  "dist/"
12
36
  ],