@vasanth-mv/pqs-cli 1.1.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.
@@ -0,0 +1,688 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>pqs CLI Cheat Sheet — Code Quality Studio v1.1.0</title>
7
+ <style>
8
+ /* ── Reset & base ────────────────────────────────────────────── */
9
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
10
+
11
+ :root {
12
+ --teal: #0D9488;
13
+ --teal-light:#14b8a6;
14
+ --teal-dim: #0f766e;
15
+ --dark: #0f172a;
16
+ --dark-mid: #1e293b;
17
+ --dark-card: #243047;
18
+ --slate: #334155;
19
+ --muted: #64748b;
20
+ --text: #e2e8f0;
21
+ --text-dim: #94a3b8;
22
+ --white: #f8fafc;
23
+ --code-fg: #5eead4;
24
+ --badge-ui: #7c3aed;
25
+ --badge-mob: #b45309;
26
+ --badge-api: #0369a1;
27
+ --badge-code:#065f46;
28
+ --warn: #dc2626;
29
+ --radius: 6px;
30
+ }
31
+
32
+ body {
33
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
34
+ font-size: 10.5px;
35
+ line-height: 1.45;
36
+ background: #0f172a;
37
+ color: var(--text);
38
+ }
39
+
40
+ /* ── Page / Print layout ─────────────────────────────────────── */
41
+ .page {
42
+ width: 297mm;
43
+ min-height: 210mm;
44
+ margin: 0 auto;
45
+ padding: 8mm 9mm 7mm;
46
+ background: var(--dark);
47
+ }
48
+
49
+ @media print {
50
+ @page {
51
+ size: A4 landscape;
52
+ margin: 0;
53
+ }
54
+ html, body { background: var(--dark) !important; }
55
+ .page {
56
+ width: 297mm;
57
+ min-height: 210mm;
58
+ margin: 0;
59
+ padding: 8mm 9mm 7mm;
60
+ page-break-after: avoid;
61
+ }
62
+ * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
63
+ }
64
+
65
+ /* ── Header ──────────────────────────────────────────────────── */
66
+ .header {
67
+ display: flex;
68
+ align-items: center;
69
+ justify-content: space-between;
70
+ background: linear-gradient(135deg, #0f2027 0%, #1a3a3a 50%, #0d2b2b 100%);
71
+ border-bottom: 2px solid var(--teal);
72
+ border-radius: var(--radius) var(--radius) 0 0;
73
+ padding: 7px 14px;
74
+ margin-bottom: 8px;
75
+ }
76
+ .header-left { display: flex; align-items: center; gap: 12px; }
77
+ .logo {
78
+ font-size: 22px;
79
+ font-weight: 900;
80
+ color: var(--teal-light);
81
+ letter-spacing: -0.5px;
82
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
83
+ }
84
+ .logo span { color: var(--white); }
85
+ .header-title {
86
+ font-size: 13px;
87
+ font-weight: 700;
88
+ color: var(--white);
89
+ letter-spacing: 0.3px;
90
+ }
91
+ .header-sub {
92
+ font-size: 9px;
93
+ color: var(--text-dim);
94
+ margin-top: 1px;
95
+ }
96
+ .version-badge {
97
+ background: var(--teal);
98
+ color: var(--white);
99
+ font-size: 9px;
100
+ font-weight: 700;
101
+ padding: 2px 8px;
102
+ border-radius: 20px;
103
+ letter-spacing: 0.5px;
104
+ }
105
+ .quick-test {
106
+ background: var(--dark-mid);
107
+ border: 1px solid var(--teal-dim);
108
+ border-radius: var(--radius);
109
+ padding: 5px 10px;
110
+ display: flex;
111
+ align-items: center;
112
+ gap: 8px;
113
+ }
114
+ .quick-test-label {
115
+ font-size: 8px;
116
+ font-weight: 700;
117
+ color: var(--teal-light);
118
+ text-transform: uppercase;
119
+ letter-spacing: 0.8px;
120
+ white-space: nowrap;
121
+ }
122
+ .quick-test code {
123
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
124
+ font-size: 10px;
125
+ color: var(--code-fg);
126
+ background: var(--dark);
127
+ padding: 1px 6px;
128
+ border-radius: 3px;
129
+ }
130
+
131
+ /* ── Grid ────────────────────────────────────────────────────── */
132
+ .grid {
133
+ display: grid;
134
+ grid-template-columns: 1fr 1fr 1fr;
135
+ gap: 7px;
136
+ align-items: start;
137
+ }
138
+ .grid-2col {
139
+ display: grid;
140
+ grid-template-columns: 1fr 1fr;
141
+ gap: 7px;
142
+ }
143
+ .col-span-2 { grid-column: span 2; }
144
+ .col-span-3 { grid-column: span 3; }
145
+
146
+ /* ── Cards ───────────────────────────────────────────────────── */
147
+ .card {
148
+ background: var(--dark-mid);
149
+ border: 1px solid var(--slate);
150
+ border-radius: var(--radius);
151
+ padding: 7px 9px;
152
+ overflow: hidden;
153
+ }
154
+ .card-accent-teal { border-top: 2px solid var(--teal); }
155
+ .card-accent-purple { border-top: 2px solid var(--badge-ui); }
156
+ .card-accent-orange { border-top: 2px solid var(--badge-mob); }
157
+ .card-accent-blue { border-top: 2px solid var(--badge-api); }
158
+
159
+ /* ── Section headers ─────────────────────────────────────────── */
160
+ .section-header {
161
+ display: flex;
162
+ align-items: center;
163
+ gap: 6px;
164
+ margin-bottom: 6px;
165
+ }
166
+ .pill {
167
+ font-size: 7.5px;
168
+ font-weight: 800;
169
+ padding: 2px 7px;
170
+ border-radius: 20px;
171
+ text-transform: uppercase;
172
+ letter-spacing: 0.7px;
173
+ white-space: nowrap;
174
+ }
175
+ .pill-teal { background: var(--teal); color: #fff; }
176
+ .pill-purple { background: var(--badge-ui); color: #fff; }
177
+ .pill-slate { background: var(--slate); color: var(--text); }
178
+ .pill-orange { background: var(--badge-mob); color: #fff; }
179
+ .pill-blue { background: var(--badge-api); color: #fff; }
180
+ .pill-green { background: var(--badge-code);color: #fff; }
181
+ .pill-red { background: var(--warn); color: #fff; }
182
+
183
+ .section-title {
184
+ font-size: 11px;
185
+ font-weight: 700;
186
+ color: var(--white);
187
+ }
188
+
189
+ /* ── Code blocks ─────────────────────────────────────────────── */
190
+ .code-block {
191
+ background: #0f172a;
192
+ border: 1px solid #2d3f55;
193
+ border-radius: 4px;
194
+ padding: 5px 8px;
195
+ margin-bottom: 4px;
196
+ }
197
+ .code-block pre, .code-block code {
198
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
199
+ font-size: 9px;
200
+ color: var(--code-fg);
201
+ white-space: pre-wrap;
202
+ word-break: break-all;
203
+ line-height: 1.6;
204
+ }
205
+ .code-comment {
206
+ color: var(--muted);
207
+ font-style: normal;
208
+ }
209
+
210
+ /* ── Inline code ─────────────────────────────────────────────── */
211
+ code {
212
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
213
+ font-size: 9px;
214
+ background: #0f172a;
215
+ color: var(--code-fg);
216
+ padding: 1px 4px;
217
+ border-radius: 3px;
218
+ }
219
+
220
+ /* ── Tables ──────────────────────────────────────────────────── */
221
+ table {
222
+ width: 100%;
223
+ border-collapse: collapse;
224
+ font-size: 9px;
225
+ }
226
+ th {
227
+ background: #0f172a;
228
+ color: var(--teal-light);
229
+ font-weight: 700;
230
+ text-align: left;
231
+ padding: 3px 6px;
232
+ border-bottom: 1px solid var(--slate);
233
+ font-size: 8.5px;
234
+ text-transform: uppercase;
235
+ letter-spacing: 0.5px;
236
+ }
237
+ td {
238
+ padding: 3px 6px;
239
+ border-bottom: 1px solid #1e293b;
240
+ color: var(--text);
241
+ vertical-align: top;
242
+ }
243
+ tr:last-child td { border-bottom: none; }
244
+ tr:nth-child(even) td { background: rgba(255,255,255,0.025); }
245
+ td code { font-size: 8.5px; }
246
+
247
+ /* ── Step list ───────────────────────────────────────────────── */
248
+ .steps { list-style: none; counter-reset: step; }
249
+ .steps li {
250
+ counter-increment: step;
251
+ display: flex;
252
+ align-items: flex-start;
253
+ gap: 6px;
254
+ margin-bottom: 5px;
255
+ font-size: 9.5px;
256
+ }
257
+ .steps li::before {
258
+ content: counter(step);
259
+ min-width: 16px;
260
+ height: 16px;
261
+ background: var(--teal);
262
+ color: #fff;
263
+ border-radius: 50%;
264
+ font-size: 8px;
265
+ font-weight: 800;
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: center;
269
+ flex-shrink: 0;
270
+ margin-top: 1px;
271
+ }
272
+ .steps li .step-body { flex: 1; }
273
+
274
+ /* ── Stack groups ────────────────────────────────────────────── */
275
+ .stack-group { margin-bottom: 6px; }
276
+ .stack-group-label {
277
+ font-size: 8px;
278
+ font-weight: 700;
279
+ text-transform: uppercase;
280
+ letter-spacing: 0.8px;
281
+ margin-bottom: 3px;
282
+ }
283
+ .stack-chips { display: flex; flex-wrap: wrap; gap: 3px; }
284
+ .chip {
285
+ font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
286
+ font-size: 8px;
287
+ padding: 2px 6px;
288
+ border-radius: 3px;
289
+ font-weight: 600;
290
+ white-space: nowrap;
291
+ }
292
+ .chip-ui { background: rgba(124,58,237,0.25); color: #c4b5fd; border: 1px solid rgba(124,58,237,0.4); }
293
+ .chip-mob { background: rgba(180,83,9,0.25); color: #fbbf24; border: 1px solid rgba(180,83,9,0.4); }
294
+ .chip-api { background: rgba(3,105,161,0.25); color: #7dd3fc; border: 1px solid rgba(3,105,161,0.4); }
295
+ .chip-code { background: rgba(6,95,70,0.25); color: #6ee7b7; border: 1px solid rgba(6,95,70,0.4); }
296
+
297
+ /* ── Divider ─────────────────────────────────────────────────── */
298
+ .divider {
299
+ height: 1px;
300
+ background: linear-gradient(to right, transparent, var(--slate), transparent);
301
+ margin: 4px 0;
302
+ }
303
+
304
+ /* ── Label/value pairs ───────────────────────────────────────── */
305
+ .kv { display: flex; align-items: baseline; gap: 5px; margin-bottom: 3px; font-size: 9px; }
306
+ .kv-key { color: var(--teal-light); font-weight: 600; white-space: nowrap; min-width: 80px; }
307
+ .kv-val { color: var(--text); }
308
+
309
+ /* ── Tip box ─────────────────────────────────────────────────── */
310
+ .tip {
311
+ background: rgba(13,148,136,0.1);
312
+ border-left: 3px solid var(--teal);
313
+ padding: 4px 7px;
314
+ border-radius: 0 4px 4px 0;
315
+ font-size: 8.5px;
316
+ color: var(--text-dim);
317
+ margin-top: 4px;
318
+ }
319
+ .tip strong { color: var(--teal-light); }
320
+
321
+ /* ── Footer ──────────────────────────────────────────────────── */
322
+ .footer {
323
+ margin-top: 7px;
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+ padding: 4px 10px;
328
+ background: var(--dark-mid);
329
+ border: 1px solid var(--slate);
330
+ border-radius: var(--radius);
331
+ font-size: 8px;
332
+ color: var(--muted);
333
+ }
334
+ .footer strong { color: var(--teal-light); }
335
+ .footer-right { display: flex; gap: 16px; }
336
+
337
+ /* ── Output badges ───────────────────────────────────────────── */
338
+ .output-row { display: flex; gap: 4px; align-items: flex-start; margin-bottom: 4px; }
339
+ .output-badge {
340
+ font-family: 'SF Mono', 'Fira Code', monospace;
341
+ font-size: 7.5px;
342
+ font-weight: 700;
343
+ padding: 2px 6px;
344
+ border-radius: 3px;
345
+ white-space: nowrap;
346
+ flex-shrink: 0;
347
+ min-width: 50px;
348
+ text-align: center;
349
+ }
350
+ .ob-pretty { background: rgba(13,148,136,0.3); color: #5eead4; border: 1px solid var(--teal-dim); }
351
+ .ob-json { background: rgba(3,105,161,0.3); color: #7dd3fc; border: 1px solid #0369a1; }
352
+ .ob-summary { background: rgba(124,58,237,0.3); color: #c4b5fd; border: 1px solid #7c3aed; }
353
+ .output-desc { font-size: 8.5px; color: var(--text-dim); }
354
+ .output-ex { font-size: 8px; color: var(--muted); font-style: italic; margin-top: 1px; }
355
+
356
+ /* ── CI platform row ─────────────────────────────────────────── */
357
+ .ci-item { display: flex; align-items: baseline; gap: 6px; margin-bottom: 4px; font-size: 9px; }
358
+ .ci-platform {
359
+ font-size: 7.5px;
360
+ font-weight: 800;
361
+ padding: 2px 6px;
362
+ border-radius: 3px;
363
+ text-transform: uppercase;
364
+ letter-spacing: 0.5px;
365
+ min-width: 58px;
366
+ text-align: center;
367
+ flex-shrink: 0;
368
+ }
369
+ .ci-gh { background: #21262d; color: #c9d1d9; border: 1px solid #30363d; }
370
+ .ci-gl { background: #2d1f3d; color: #e2cbff; border: 1px solid #6b3fa0; }
371
+ .ci-pre { background: #1c2a1c; color: #86efac; border: 1px solid #166534; }
372
+
373
+ small { font-size: 8px; color: var(--muted); }
374
+ </style>
375
+ </head>
376
+ <body>
377
+ <div class="page">
378
+
379
+ <!-- ═══════════════ HEADER ═══════════════ -->
380
+ <div class="header">
381
+ <div class="header-left">
382
+ <div class="logo">pqs<span>⚡</span></div>
383
+ <div>
384
+ <div class="header-title">Code Quality Studio — CLI Cheat Sheet</div>
385
+ <div class="header-sub">Playwright Quality Studio · Node 18+ · npm</div>
386
+ </div>
387
+ </div>
388
+ <div style="display:flex; align-items:center; gap:10px;">
389
+ <div class="quick-test">
390
+ <div class="quick-test-label">Quick Verify</div>
391
+ <code>pqs --list-stacks</code>
392
+ <span style="font-size:8px;color:var(--muted)">→ lists all 18 stacks if installed ✓</span>
393
+ </div>
394
+ <div class="version-badge">v 1.1.0</div>
395
+ </div>
396
+ </div>
397
+
398
+ <!-- ═══════════════ MAIN GRID ═══════════════ -->
399
+ <div class="grid">
400
+
401
+ <!-- ─── COL 1: Admin/Packager + User Install ─── -->
402
+ <div style="display:flex; flex-direction:column; gap:7px;">
403
+
404
+ <!-- SECTION 1 – Admin/Packager -->
405
+ <div class="card card-accent-teal">
406
+ <div class="section-header">
407
+ <span class="pill pill-teal">§1</span>
408
+ <span class="section-title">Admin / Packager</span>
409
+ <small>(builds &amp; distributes pqs)</small>
410
+ </div>
411
+
412
+ <div style="font-size:8.5px; color:var(--text-dim); margin-bottom:4px; font-weight:600; text-transform:uppercase; letter-spacing:0.6px;">Build from repo</div>
413
+ <div class="code-block">
414
+ <pre>cd playwright-quality-studio/cli
415
+ npm install
416
+ npm run build
417
+ npm install -g .</pre>
418
+ </div>
419
+
420
+ <div style="font-size:8.5px; color:var(--text-dim); margin-bottom:4px; font-weight:600; text-transform:uppercase; letter-spacing:0.6px; margin-top:5px;">Create distributable tarball</div>
421
+ <div class="code-block">
422
+ <pre>npm run build &amp;&amp; npm pack
423
+ <span class="code-comment"># Creates: pqs-cli-1.1.0.tgz</span></pre>
424
+ </div>
425
+
426
+ <div class="divider"></div>
427
+
428
+ <div class="kv"><span class="kv-key">Bump version:</span><span class="kv-val">Edit <code>package.json</code> → <code>"version": "1.x.x"</code> then rebuild</span></div>
429
+ <div class="kv"><span class="kv-key">After rule changes:</span><span class="kv-val"><code>npm run build &amp;&amp; npm install -g .</code></span></div>
430
+ <div class="kv"><span class="kv-key">Reinstall (same machine):</span><span class="kv-val"><code>npm install -g .</code></span></div>
431
+ </div>
432
+
433
+ <!-- SECTION 2 – User Install -->
434
+ <div class="card card-accent-purple">
435
+ <div class="section-header">
436
+ <span class="pill pill-purple">§2</span>
437
+ <span class="section-title">User Install</span>
438
+ <small>(receives the .tgz)</small>
439
+ </div>
440
+
441
+ <div style="font-size:8px; color:var(--badge-ui); font-weight:700; margin-bottom:3px;">Mac / Linux — with sudo</div>
442
+ <div class="code-block">
443
+ <pre>sudo npm install -g ./pqs-cli-1.1.0.tgz</pre>
444
+ </div>
445
+
446
+ <div style="font-size:8px; color:var(--badge-ui); font-weight:700; margin-bottom:3px; margin-top:4px;">Mac / Linux — no admin rights</div>
447
+ <div class="code-block">
448
+ <pre>npm install -g ./pqs-cli-1.1.0.tgz \
449
+ --prefix ~/.npm-global
450
+ echo 'export PATH="$HOME/.npm-global/bin:$PATH"' \
451
+ >> ~/.zshrc &amp;&amp; source ~/.zshrc</pre>
452
+ </div>
453
+
454
+ <div style="font-size:8px; color:#93c5fd; font-weight:700; margin-bottom:3px; margin-top:4px;">Windows</div>
455
+ <div class="code-block">
456
+ <pre>npm install -g .\pqs-cli-1.1.0.tgz</pre>
457
+ </div>
458
+
459
+ <div class="tip"><strong>Verify:</strong> <code>pqs --help</code> — shows version + all flags</div>
460
+ </div>
461
+
462
+ </div><!-- end col 1 -->
463
+
464
+ <!-- ─── COL 2: Core Commands ─── -->
465
+ <div>
466
+ <div class="card card-accent-teal" style="height:100%;">
467
+ <div class="section-header">
468
+ <span class="pill pill-teal">§3</span>
469
+ <span class="section-title">Core Commands</span>
470
+ </div>
471
+ <table>
472
+ <thead>
473
+ <tr><th>Command</th><th>What it does</th></tr>
474
+ </thead>
475
+ <tbody>
476
+ <tr>
477
+ <td><code>pqs .</code></td>
478
+ <td>Analyse current folder (auto-detect stack)</td>
479
+ </tr>
480
+ <tr>
481
+ <td><code>pqs ./tests/</code></td>
482
+ <td>Analyse specific folder</td>
483
+ </tr>
484
+ <tr>
485
+ <td><code>pqs ./tests/ --stack playwright</code></td>
486
+ <td>Force a specific stack</td>
487
+ </tr>
488
+ <tr>
489
+ <td><code>pqs ./tests/ --severity critical</code></td>
490
+ <td>Show only critical findings</td>
491
+ </tr>
492
+ <tr>
493
+ <td><code>pqs ./tests/ --output json &gt; report.json</code></td>
494
+ <td>Save JSON report to file</td>
495
+ </tr>
496
+ <tr>
497
+ <td><code>pqs ./tests/ --output summary</code></td>
498
+ <td>One-line status output</td>
499
+ </tr>
500
+ <tr>
501
+ <td><code>pqs ./tests/ --open</code></td>
502
+ <td>Run analysis + open HTML report in browser</td>
503
+ </tr>
504
+ <tr>
505
+ <td><code>pqs --read-report report.json</code></td>
506
+ <td>Print summary of a saved JSON report</td>
507
+ </tr>
508
+ <tr>
509
+ <td><code>pqs --read-report report.json --open</code></td>
510
+ <td>Open saved report in browser</td>
511
+ </tr>
512
+ <tr>
513
+ <td><code>pqs --list-stacks</code></td>
514
+ <td>Show all 18 supported stacks</td>
515
+ </tr>
516
+ <tr>
517
+ <td><code>pqs --help</code></td>
518
+ <td>Show help + version info</td>
519
+ </tr>
520
+ </tbody>
521
+ </table>
522
+
523
+ <div class="divider" style="margin-top:6px;"></div>
524
+
525
+ <!-- Output Formats -->
526
+ <div class="section-header" style="margin-top:5px;">
527
+ <span class="pill pill-blue">§5</span>
528
+ <span class="section-title">Output Formats</span>
529
+ </div>
530
+ <div class="output-row">
531
+ <span class="output-badge ob-pretty">pretty</span>
532
+ <div>
533
+ <div class="output-desc">Default — colour terminal, per-file scores, category bars</div>
534
+ </div>
535
+ </div>
536
+ <div class="output-row">
537
+ <span class="output-badge ob-json">json</span>
538
+ <div>
539
+ <div class="output-desc">Machine-readable, pipe to file for CI artefacts</div>
540
+ <div class="output-ex"><code>pqs ./tests/ --output json &gt; report.json</code></div>
541
+ </div>
542
+ </div>
543
+ <div class="output-row">
544
+ <span class="output-badge ob-summary">summary</span>
545
+ <div>
546
+ <div class="output-desc">One-line status — ideal for CI pipelines</div>
547
+ <div class="output-ex"><code>pqs ⚡ Playwright · 76 files · score 90 · 5 critical</code></div>
548
+ </div>
549
+ </div>
550
+ </div>
551
+ </div><!-- end col 2 -->
552
+
553
+ <!-- ─── COL 3: Stacks + CI + Advanced ─── -->
554
+ <div style="display:flex; flex-direction:column; gap:7px;">
555
+
556
+ <!-- SECTION 4 – All 18 Stacks -->
557
+ <div class="card card-accent-orange">
558
+ <div class="section-header">
559
+ <span class="pill pill-orange">§4</span>
560
+ <span class="section-title">All 18 Stacks</span>
561
+ <small>(<code>--stack</code> flag values)</small>
562
+ </div>
563
+
564
+ <div class="stack-group">
565
+ <div class="stack-group-label" style="color:#c4b5fd;">UI / Browser</div>
566
+ <div class="stack-chips">
567
+ <span class="chip chip-ui">playwright</span>
568
+ <span class="chip chip-ui">playwright_java</span>
569
+ <span class="chip chip-ui">playwright_python</span>
570
+ <span class="chip chip-ui">selenium_java</span>
571
+ <span class="chip chip-ui">selenium_csharp</span>
572
+ <span class="chip chip-ui">cypress</span>
573
+ </div>
574
+ </div>
575
+
576
+ <div class="stack-group">
577
+ <div class="stack-group-label" style="color:#fbbf24;">Mobile / Model</div>
578
+ <div class="stack-chips">
579
+ <span class="chip chip-mob">appium_java</span>
580
+ <span class="chip chip-mob">tosca_xml</span>
581
+ </div>
582
+ </div>
583
+
584
+ <div class="stack-group">
585
+ <div class="stack-group-label" style="color:#7dd3fc;">API Testing</div>
586
+ <div class="stack-chips">
587
+ <span class="chip chip-api">restassured</span>
588
+ <span class="chip chip-api">karate</span>
589
+ <span class="chip chip-api">pytest_api</span>
590
+ <span class="chip chip-api">postman</span>
591
+ </div>
592
+ </div>
593
+
594
+ <div class="stack-group">
595
+ <div class="stack-group-label" style="color:#6ee7b7;">Code Quality</div>
596
+ <div class="stack-chips">
597
+ <span class="chip chip-code">java_api</span>
598
+ <span class="chip chip-code">java_frontend</span>
599
+ <span class="chip chip-code">typescript</span>
600
+ <span class="chip chip-code">ts_frontend</span>
601
+ <span class="chip chip-code">python_api</span>
602
+ <span class="chip chip-code">python_frontend</span>
603
+ </div>
604
+ </div>
605
+ </div>
606
+
607
+ <!-- SECTION 6 – CI Integration -->
608
+ <div class="card card-accent-blue">
609
+ <div class="section-header">
610
+ <span class="pill pill-blue">§6</span>
611
+ <span class="section-title">CI Integration</span>
612
+ </div>
613
+
614
+ <div class="ci-item">
615
+ <span class="ci-platform ci-gh">GitHub Actions</span>
616
+ <div>
617
+ <code>run: pqs ./tests/ --output summary</code>
618
+ <div style="font-size:7.5px; color:var(--muted); margin-top:1px;">exit 1 on criticals → failed step</div>
619
+ </div>
620
+ </div>
621
+ <div class="ci-item">
622
+ <span class="ci-platform ci-gl">GitLab CI</span>
623
+ <div>
624
+ <code>script: pqs ./tests/ --output json &gt; r.json</code>
625
+ <div style="font-size:7.5px; color:var(--muted); margin-top:1px;">use <code>artifacts:</code> block to store r.json</div>
626
+ </div>
627
+ </div>
628
+ <div class="ci-item">
629
+ <span class="ci-platform ci-pre">Pre-commit</span>
630
+ <div>
631
+ <code>pqs . --severity critical || exit 1</code>
632
+ <div style="font-size:7.5px; color:var(--muted); margin-top:1px;">blocks commit if criticals found</div>
633
+ </div>
634
+ </div>
635
+ </div>
636
+
637
+ <!-- SECTION 7 – Agent / Advanced Config -->
638
+ <div class="card" style="border-top:2px solid var(--badge-code);">
639
+ <div class="section-header">
640
+ <span class="pill pill-green">§7</span>
641
+ <span class="section-title">Agent / Advanced Config</span>
642
+ </div>
643
+ <table>
644
+ <tbody>
645
+ <tr>
646
+ <td><code>--no-color</code></td>
647
+ <td style="color:var(--text-dim);">No colour — for log files / agents</td>
648
+ </tr>
649
+ <tr>
650
+ <td><code>--category reliability</code></td>
651
+ <td style="color:var(--text-dim);">Filter by rule category</td>
652
+ </tr>
653
+ <tr>
654
+ <td><code>pqs ./src/ ./e2e/ --stack playwright</code></td>
655
+ <td style="color:var(--text-dim);">Analyse multiple paths at once</td>
656
+ </tr>
657
+ <tr>
658
+ <td><code>--severity critical --output summary</code></td>
659
+ <td style="color:var(--text-dim);">Critical-only CI gate</td>
660
+ </tr>
661
+ </tbody>
662
+ </table>
663
+ <div style="margin-top:5px;">
664
+ <div style="font-size:8px; color:var(--text-dim); font-weight:600; margin-bottom:3px;">Save + open later</div>
665
+ <div class="code-block">
666
+ <pre>pqs ./tests/ --output json &gt; r.json \
667
+ &amp;&amp; pqs --read-report r.json --open</pre>
668
+ </div>
669
+ </div>
670
+ </div>
671
+
672
+ </div><!-- end col 3 -->
673
+
674
+ </div><!-- end .grid -->
675
+
676
+ <!-- ═══════════════ FOOTER ═══════════════ -->
677
+ <div class="footer">
678
+ <div><strong>pqs v1.1.0</strong> · Code Quality Studio · Node 18+ · npm</div>
679
+ <div class="footer-right">
680
+ <span>Auto-detects stack when <code>--stack</code> omitted</span>
681
+ <span>Exit code <code>1</code> = criticals found · <code>0</code> = clean</span>
682
+ <span>Cmd+P → Save as PDF</span>
683
+ </div>
684
+ </div>
685
+
686
+ </div><!-- end .page -->
687
+ </body>
688
+ </html>
Binary file
Binary file
Binary file