reporting-labs 0.4.0 → 0.4.2

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
@@ -73,6 +73,7 @@ One line per test. With this the report can rank failures by priority, group the
73
73
  - Known keys: `priority`, `severity`, `owner`, `feature`, `epic`, `story`, `issue`, `component`, `team`. Any other key you pass is shown too.
74
74
  - Your Playwright tags like `@sanity` or `@regression` stay as they are and still show on the test.
75
75
  - To make story and epic keys clickable, set `links` in the config: `links: { story: 'https://yourteam.atlassian.net/browse/{id}' }`.
76
+ - `priority`, `severity`, `feature` and `owner` each get a tab in the Breakdown chart and a filter on the Tests page. Want the same for your own key, say `meta({ team: 'web' })`? Add it to `dimensions` in the config: `dimensions: ['priority', 'severity', 'feature', 'owner', 'team']`.
76
77
 
77
78
  ### `log()`: a line in the report
78
79
 
@@ -219,6 +220,42 @@ Every outcome Playwright can produce, not just pass and fail:
219
220
  - interrupted runs show a banner with how many tests did not finish
220
221
  - the Environment card shows Playwright and Node versions, OS, browsers, workers, shard, the CI job link and the git commit
221
222
 
223
+ ## How it compares
224
+
225
+ Legend: ✅ built in · 🟡 possible with manual setup or extra config · ❌ not in the official docs
226
+
227
+ | Feature | Playwright HTML | Allure | reportingLabs |
228
+ |---|:---:|:---:|:---:|
229
+ | Single HTML file, opens without a server | ❌ folder, served by `show-report` | 🟡 single-file mode (2.24+, Allure 3 plugin), otherwise `allure open` | ✅ |
230
+ | No extra tooling | ✅ | ❌ CLI needed; Allure 2 needs Java | ✅ npm package only |
231
+ | Setup | ✅ built in | 🟡 reporter + generate step | ✅ one line in `reporter:` |
232
+ | Steps, screenshots, videos, traces | ✅ | ✅ | ✅ |
233
+ | Visual comparison viewer (slider, side by side, diff) | ❌ | ❌ | ✅ |
234
+ | Tags and annotations shown | ✅ | ✅ labels via runtime API | ✅ `meta()` + tags |
235
+ | Priority / severity / owner / feature / epic / story | 🟡 custom annotations | ✅ labels | ✅ |
236
+ | Links to Jira, TMS | 🟡 annotation with a URL | ✅ `issue()`, `tms()` | ✅ `links` templates |
237
+ | Failures ranked by priority and severity | ❌ | ❌ | ✅ Needs attention |
238
+ | Failures by owner | ❌ | 🟡 owner label, no rollup documented | ✅ |
239
+ | History across runs | ❌ | 🟡 History Trend when historical data is accumulated | ✅ history file, zero setup |
240
+ | New vs known failures ("failing since #1840") | ❌ | ❌ | ✅ |
241
+ | Flaky detection | ✅ `flaky` outcome per run | 🟡 `@Flaky` annotation (Java) | ✅ outcome + flakiest over last runs |
242
+ | Got slower vs last run | ❌ | ❌ | ✅ |
243
+ | Trend chart | ❌ | ✅ | ✅ |
244
+ | Failures grouped by root cause | ❌ | 🟡 `categories.json` with regex | ✅ automatic clusters |
245
+ | Failures explained in plain words | ❌ | ❌ | ✅ 18 kinds |
246
+ | Bug report in one click | ❌ | ❌ | ✅ Markdown, Jira, text |
247
+ | Environment info | ❌ | 🟡 `environment.properties` | ✅ automatic + `env` option |
248
+ | API calls with request/response | ❌ | 🟡 manual attachments | ✅ automatic, Copy as cURL |
249
+ | Logs and test data blocks | 🟡 attachments | 🟡 attachments, parameters | ✅ `log()`, `testData()` |
250
+ | Secrets masked | ❌ | 🟡 parameter masking | ✅ automatic |
251
+ | CSV / JSON export of failures, Slack summary | ❌ | ❌ | ✅ |
252
+ | Timeline by worker | ❌ | ✅ | ✅ |
253
+ | Combine shards / several runs | ✅ blob + `merge-reports` | ✅ Launches | ❌ on the roadmap |
254
+ | Frameworks beyond Playwright | ❌ | ✅ many languages | ❌ on the roadmap |
255
+ | Free and open source | ✅ | ✅ (Allure TestOps is a separate paid product) | ✅ MIT |
256
+
257
+ Based on the official docs as of September 2026. ❌ means the feature is not described in the tool's documentation, not that it is impossible. Sources: Playwright [reporters](https://github.com/microsoft/playwright/blob/main/docs/src/test-reporters-js.md), [annotations](https://github.com/microsoft/playwright/blob/main/docs/src/test-annotations-js.md), [retries](https://github.com/microsoft/playwright/blob/main/docs/src/test-retries-js.md), [sharding](https://github.com/microsoft/playwright/blob/main/docs/src/test-sharding-js.md), [trace viewer](https://github.com/microsoft/playwright/blob/main/docs/src/trace-viewer-intro-js.md); Allure [allure-playwright](https://github.com/allure-framework/allure-js/blob/main/packages/allure-playwright/README.md), [Allure 3](https://github.com/allure-framework/allure3), [Allure 2.24.0 release](https://github.com/allure-framework/allure2/releases/tag/2.24.0), [Allure docs: command line](https://github.com/allure-framework/allure-docs/blob/main/content/reporting/commandline.md), [features](https://github.com/allure-framework/allure-docs/blob/main/content/gettingstarted/features.md), [report structure](https://github.com/allure-framework/allure-docs/blob/main/content/gettingstarted/report-structure.md). If something here is out of date, open an issue and it will be fixed.
258
+
222
259
  ## All options
223
260
 
224
261
  Every option is optional. `npx reporting-labs init` writes them all, with comments, into `reporting-labs.config.ts` (`--js` for JavaScript, `--force` to overwrite).
@@ -232,8 +269,8 @@ Every option is optional. `npx reporting-labs init` writes them all, with commen
232
269
  | `env` | – | Extra rows on the Environment card |
233
270
  | `links` | `{}` | Turn meta keys into links. `{id}` is replaced by the value |
234
271
  | `maskKeys` | `[]` | Extra keys to mask as `****` |
235
- | `dimensions` | `['priority','severity','feature','owner']` | Meta keys that get charts and filters |
236
- | `dimensionOrder` | P0…P4, blocker…trivial | Sort order per dimension |
272
+ | `dimensions` | `['priority','severity','feature','owner']` | Which `meta()` keys get a tab in the Breakdown chart and a dropdown filter on the Tests page. Add your own key, e.g. `'team'`, to get a chart for it |
273
+ | `dimensionOrder` | P0…P4, blocker…trivial | The order values appear in those charts and filters. Only needed for your own values, e.g. `{ severity: ['high','medium','low'] }` |
237
274
  | `widgets` | all on | Hide cards: `{ tags: false, timeline: false, ... }`. Failure clusters and the Trend chart are always shown |
238
275
  | `sections` | `[]` | Extra HTML below the summary, e.g. release notes |
239
276
  | `history` | `{ enabled: true, keep: 30 }` | Run history file; `file` sets a custom path |
@@ -35,8 +35,17 @@ const config: ReportingLabsOptions = {
35
35
 
36
36
  // ── Test details ─────────────────────────────────────────────────────────────
37
37
  // Values come from meta({ priority, severity, owner, feature, epic, story, ... }) in your tests.
38
- // dimensions: ['priority', 'severity', 'feature', 'owner'], // which meta keys get charts and filters
39
- // dimensionOrder: { severity: ['blocker', 'critical', 'major', 'minor', 'trivial'] },
38
+ //
39
+ // dimensions: which meta keys get their own tab in the Breakdown chart and a dropdown filter on the
40
+ // Tests page. Default: priority, severity, feature, owner. Add your own key when you want a chart
41
+ // for it, e.g. meta({ team: 'web' }) + 'team' here = a "Team" tab showing pass/fail per team.
42
+ // Keys like epic and story do not need to be here: they show as chips and links on every test anyway.
43
+ // dimensions: ['priority', 'severity', 'feature', 'owner', 'team'],
44
+ //
45
+ // dimensionOrder: the order values appear in those charts and filters. Priority (P0..P4) and
46
+ // severity (blocker..trivial) are already ordered. Set this only for your own values,
47
+ // e.g. { severity: ['high', 'medium', 'low'] } or { team: ['web', 'api', 'mobile'] }.
48
+ // dimensionOrder: { severity: ['high', 'medium', 'low'] },
40
49
  // links: { // turn meta keys into links; {id} is the value
41
50
  // story: 'https://acme.atlassian.net/browse/{id}',
42
51
  // epic: 'https://acme.atlassian.net/browse/{id}',
package/dist/template.js CHANGED
@@ -176,7 +176,7 @@ a{color:var(--accent)}
176
176
  .donut svg circle{stroke-linecap:butt}
177
177
  /* failure clusters */
178
178
  .clu{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
179
- .clu li{border:1px solid var(--line);border-left:3px solid var(--fail);border-radius:var(--radius);padding:8px 10px}
179
+ .clu li{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px}
180
180
  .clu .msg{font:12px/1.45 var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--ink);max-height:3em;overflow:hidden}
181
181
  .clu .who{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
182
182
  .clu .who button{font-size:11px;padding:2px 7px;border-radius:999px;background:var(--fail-bg);color:var(--fail)} .clu .who button:hover{outline:1px solid var(--fail)}
@@ -283,7 +283,7 @@ a{color:var(--accent)}
283
283
  .tab{padding:8px 12px;font-size:13px;color:var(--ink-2);border-bottom:2px solid transparent;margin-bottom:-1px}
284
284
  .tab[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent)}
285
285
  .detail h4{font-size:13px;font-weight:600;color:var(--ink-2);margin:20px 0 8px}
286
- .err{background:var(--fail-bg);border-left:3px solid var(--fail);padding:12px 14px;border-radius:0 var(--radius) var(--radius) 0;font:12.5px/1.55 var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--ink)}
286
+ .err{background:var(--fail-bg);border:1px solid var(--line);padding:12px 14px;border-radius:var(--radius);font:12.5px/1.55 var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--ink)}
287
287
  .err+.err{margin-top:10px}
288
288
  .err details{margin-top:8px} .err summary{cursor:pointer;color:var(--ink-2);font-family:var(--sans);font-size:12px}
289
289
  .err .stack{color:var(--ink-2);margin-top:6px}
@@ -586,7 +586,7 @@ html,body{-webkit-font-smoothing:antialiased}
586
586
  .tabs{gap:6px} .tab{border-radius:8px 8px 0 0;font-weight:500}
587
587
  .tab[aria-selected=true]{color:var(--accent-2);border-bottom-color:var(--accent)}
588
588
  .detail h4{color:var(--accent-2);text-transform:uppercase;letter-spacing:.06em;font-size:11.5px}
589
- .err{border-radius:0 8px 8px 0}
589
+ .err{border-radius:8px}
590
590
  .meta{border-radius:8px;background:var(--surface)}
591
591
  .meta .k{text-transform:uppercase;font-size:10.5px;letter-spacing:.05em}
592
592
  .step{border-radius:6px} .step .cat{border-radius:4px}
@@ -627,12 +627,12 @@ html,body{-webkit-font-smoothing:antialiased}
627
627
  .note{padding:10px 14px;border-radius:8px;margin-bottom:10px;border:1px solid var(--line)} .note.ok{background:var(--pass-bg);color:var(--ink)} .note.warn{background:var(--flaky-bg);color:var(--flaky-ink)}
628
628
  .badge.xfail{background:var(--flaky-bg);color:var(--flaky-ink)}
629
629
  .errwrap+.errwrap{margin-top:14px}
630
- .why{border:1px solid var(--line);border-left:3px solid var(--fail);border-radius:0 var(--radius) var(--radius) 0;padding:10px 14px;margin-bottom:10px;background:var(--surface)}
630
+ .why{border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;margin-bottom:10px;background:var(--surface)}
631
631
  .why-c{font-size:12.5px;color:var(--ink);margin-bottom:2px;line-height:1.4} .why-c .why-k{margin-right:2px}
632
632
  .why-l{display:flex;align-items:center;gap:8px;margin-bottom:4px} .why-k{font-size:12px;font-weight:600;color:var(--fail)} .why-a{font:11.5px var(--mono);color:var(--ink-3)}
633
633
  .why-s{font-size:var(--fs);color:var(--ink);line-height:1.45} .why-h{font-size:12.5px;color:var(--ink-2);margin-top:4px;line-height:1.45}
634
- .why.assertion,.why.visual{border-left-color:#C77D14} .why.assertion .why-k,.why.visual .why-k{color:#9A6A00}
635
- .why.script,.why.thrown,.why.file{border-left-color:var(--ink-3)} .why.script .why-k,.why.thrown .why-k,.why.file .why-k{color:var(--ink-2)}
634
+ .why.assertion .why-k,.why.visual .why-k{color:#9A6A00}
635
+ .why.script .why-k,.why.thrown .why-k,.why.file .why-k{color:var(--ink-2)}
636
636
  .errloc{font-family:var(--mono);color:var(--ink-3);margin-bottom:6px} .errloc a{color:var(--accent-2);text-decoration:none} .errloc a:hover{text-decoration:underline}
637
637
  .snip{margin:10px 0 0;background:var(--surface-2);border:1px solid var(--line);border-radius:8px;padding:10px 12px;font-family:var(--mono);line-height:1.55;white-space:pre;overflow:auto;color:var(--ink-2)}
638
638
  /* ---------- triage extras: history, diff, export, env, heatmap ---------- */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reporting-labs",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "reportingLabs – beautiful, customizable single-file HTML test reports. One line of config. Playwright adapter included, more runners on the way.",
5
5
  "keywords": [
6
6
  "test-report",