@reportforge/playwright-pdf 0.10.3 → 0.11.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.
package/README.md CHANGED
@@ -197,7 +197,7 @@ All options are the second element of the reporter tuple.
197
197
  | `notify` | `object` | — | Notification channels: `slack`, `teams`, `discord` (each `{ url, enabled, on }`), `email` (`{ to, enabled, on, attachPdf }`). See the Notifications docs. |
198
198
  | `failureAnalysis` | `object` | `{ enabled: true }` | Offline failure root-cause analysis (embedded Naive Bayes; no runtime network). Fields: `enabled` (default `true`), `maxClusters` (default `10`), `minStrength` (`weak`\|`moderate`\|`strong`, default `weak`), `maxFailuresToAnalyse` (default `500`), `collectUnclassified` (default `true`), `autoUpdateModel` (default `true`). See the Failure Analysis docs. |
199
199
  | `capture` | `object` | `{}` (off) | Opt-in rich execution capture for the defect log (reporter-side; no fixtures, no test-code changes). Fields: `steps` (compacted repro-steps trail from the Playwright step tree, default `false`), `apiSteps` (include granular `pw:api` click/fill/goto actions in the trail; off by default the trail shows only `test.step` intent + `expect` assertions + the failing action, default `false`), `console` (Node stdout/stderr tail, default `false`), `evidence` (trace/video file links, default `false`), `maxSteps` (default `50`), `maxConsoleLines` (default `50`). Renders in the Defect Log section of the `detailed` template. |
200
- | `live` | `object` | `{}` (off) | Opt-in live test-execution streaming. When `enabled`, the reporter prints an unguessable watch link to the CI logs at run start and streams per-test progress to the hosted dashboard while tests run — all shards of one CI run converge on a single live view. Fields: `enabled` (default `false`), `runId` (override the auto-derived run id), `serverUrl` (override the streaming server), `steps` (`none`\|`failed`\|`all`, default `failed`), `console` (stream stdout/stderr tails, default `false`), `flushMs` (batch debounce 500–10000, default `2000`). The PDF at the end of the run is unaffected. Requires an active subscription with the `live` entitlement. See the Live Runs docs. |
200
+ | `live` | `object` | `{}` (off) | Opt-in live test-execution streaming. When `enabled`, the reporter prints an unguessable watch link to the CI logs at run start and streams per-test progress to the hosted dashboard while tests run — all shards of one CI run converge on a single live view. Fields: `enabled` (default `false`), `runId` (override the auto-derived run id), `serverUrl` (override the streaming server), `steps` (`none`\|`failed`\|`intent`\|`all`, default `failed`; `intent` shows only your `test.step` names plus any failing step), `console` (stream stdout/stderr tails, default `false`), `flushMs` (batch debounce 500–10000, default `2000`). The PDF at the end of the run is unaffected. Requires an active subscription with the `live` entitlement. See the Live Runs docs. |
201
201
  | `historyFile` | `string` | `~/.reportforge/{key}/history.json` | Path to the history JSON file. Relative paths resolve from `cwd`. Enables pass-rate trending charts in the `detailed` template. |
202
202
  | `historySize` | `number` | `10` | Maximum number of test runs to keep in the history file (integer ≥ 2). Older runs are pruned on append. |
203
203
  | `showTrend` | `boolean` | `true` | Show the pass-rate sparkline and delta badge in the `detailed` template. Set to `false` to disable history tracking entirely. |
@@ -222,7 +222,7 @@ reporter: [
222
222
  outputFile: 'reports/{date}-report.pdf',
223
223
  live: {
224
224
  enabled: true,
225
- steps: 'failed', // 'none' | 'failed' | 'all'
225
+ steps: 'failed', // 'none' | 'failed' | 'intent' | 'all'
226
226
  // console: false, // stream stdout/stderr tails (off by default — see note)
227
227
  // flushMs: 2000, // batch debounce (500–10000)
228
228
  },
package/dist/cli/index.js CHANGED
@@ -11886,7 +11886,7 @@ var init_schema = __esm({
11886
11886
  serverUrl: external_exports.string().url().optional(),
11887
11887
  // Step verbosity: 'none' skips steps, 'failed' streams intent + assertions +
11888
11888
  // errored steps, 'all' streams every step.
11889
- steps: external_exports.enum(["none", "failed", "all"]).default("failed"),
11889
+ steps: external_exports.enum(["none", "failed", "intent", "all"]).default("failed"),
11890
11890
  // Stream test stdout/stderr tails. Off by default — may leak secrets printed
11891
11891
  // by tests to a token-holder.
11892
11892
  console: external_exports.boolean().default(false),
package/dist/index.d.mts CHANGED
@@ -258,9 +258,11 @@ interface ReporterOptions {
258
258
  serverUrl?: string;
259
259
  /**
260
260
  * Step verbosity: `'none'` skips steps, `'failed'` streams author intent +
261
- * assertions + errored steps, `'all'` streams every step. Default: `'failed'`
261
+ * assertions + errored steps, `'intent'` streams only your `test.step` names
262
+ * (plus any failing step) for the cleanest human-readable trail, `'all'`
263
+ * streams every step and action. Default: `'failed'`
262
264
  */
263
- steps?: 'none' | 'failed' | 'all';
265
+ steps?: 'none' | 'failed' | 'intent' | 'all';
264
266
  /**
265
267
  * Stream test stdout/stderr tails to the watch page. Off by default — may
266
268
  * leak secrets printed by tests to anyone holding the watch link. Default: false
package/dist/index.d.ts CHANGED
@@ -258,9 +258,11 @@ interface ReporterOptions {
258
258
  serverUrl?: string;
259
259
  /**
260
260
  * Step verbosity: `'none'` skips steps, `'failed'` streams author intent +
261
- * assertions + errored steps, `'all'` streams every step. Default: `'failed'`
261
+ * assertions + errored steps, `'intent'` streams only your `test.step` names
262
+ * (plus any failing step) for the cleanest human-readable trail, `'all'`
263
+ * streams every step and action. Default: `'failed'`
262
264
  */
263
- steps?: 'none' | 'failed' | 'all';
265
+ steps?: 'none' | 'failed' | 'intent' | 'all';
264
266
  /**
265
267
  * Stream test stdout/stderr tails to the watch page. Off by default — may
266
268
  * leak secrets printed by tests to anyone holding the watch link. Default: false
package/dist/index.js CHANGED
@@ -10492,7 +10492,7 @@ var liveConfigSchema = external_exports.object({
10492
10492
  serverUrl: external_exports.string().url().optional(),
10493
10493
  // Step verbosity: 'none' skips steps, 'failed' streams intent + assertions +
10494
10494
  // errored steps, 'all' streams every step.
10495
- steps: external_exports.enum(["none", "failed", "all"]).default("failed"),
10495
+ steps: external_exports.enum(["none", "failed", "intent", "all"]).default("failed"),
10496
10496
  // Stream test stdout/stderr tails. Off by default — may leak secrets printed
10497
10497
  // by tests to a token-holder.
10498
10498
  console: external_exports.boolean().default(false),
@@ -13873,6 +13873,7 @@ function shouldEmitStep(step, mode) {
13873
13873
  if (step.error && step.category !== "hook" && step.category !== "fixture") return true;
13874
13874
  if (isLifecycleStep(step)) return false;
13875
13875
  if (mode === "all") return true;
13876
+ if (mode === "intent") return step.category === "test.step";
13876
13877
  return step.category === "test.step" || step.category === "expect";
13877
13878
  }
13878
13879
  function isCurrentStep(step) {
@@ -13893,7 +13894,10 @@ function mapStep(testId, step, phase, shardKey) {
13893
13894
  title: clampWithEllipsis(step.title ?? "", MAX_STEP_TITLE_CHARS),
13894
13895
  status: phase === "begin" ? "running" : step.error ? "failed" : "passed",
13895
13896
  shardKey,
13896
- at: Date.now()
13897
+ at: Date.now(),
13898
+ // The step's own start time (not receive time) so the watch page can order a
13899
+ // parent `test.step` before the child actions nested inside it.
13900
+ startedAt: step.startTime?.getTime()
13897
13901
  };
13898
13902
  }
13899
13903
  function mapConsole(kind, chunk, testId, shardKey) {
@@ -13920,7 +13924,7 @@ var PdfReporter = class {
13920
13924
  this.liveConsole = false;
13921
13925
  this.options = parseOptions(rawOptions);
13922
13926
  this.dataCollector = new DataCollector(this.options.capture);
13923
- const version = true ? "0.10.3" : "0.x";
13927
+ const version = true ? "0.11.0" : "0.x";
13924
13928
  logger.info(`@reportforge/playwright-pdf v${version} initialised`);
13925
13929
  this.licenseClient = new LicenseClient({
13926
13930
  licenseKey: this.options.licenseKey,
package/dist/index.mjs CHANGED
@@ -10493,7 +10493,7 @@ var liveConfigSchema = external_exports.object({
10493
10493
  serverUrl: external_exports.string().url().optional(),
10494
10494
  // Step verbosity: 'none' skips steps, 'failed' streams intent + assertions +
10495
10495
  // errored steps, 'all' streams every step.
10496
- steps: external_exports.enum(["none", "failed", "all"]).default("failed"),
10496
+ steps: external_exports.enum(["none", "failed", "intent", "all"]).default("failed"),
10497
10497
  // Stream test stdout/stderr tails. Off by default — may leak secrets printed
10498
10498
  // by tests to a token-holder.
10499
10499
  console: external_exports.boolean().default(false),
@@ -13874,6 +13874,7 @@ function shouldEmitStep(step, mode) {
13874
13874
  if (step.error && step.category !== "hook" && step.category !== "fixture") return true;
13875
13875
  if (isLifecycleStep(step)) return false;
13876
13876
  if (mode === "all") return true;
13877
+ if (mode === "intent") return step.category === "test.step";
13877
13878
  return step.category === "test.step" || step.category === "expect";
13878
13879
  }
13879
13880
  function isCurrentStep(step) {
@@ -13894,7 +13895,10 @@ function mapStep(testId, step, phase, shardKey) {
13894
13895
  title: clampWithEllipsis(step.title ?? "", MAX_STEP_TITLE_CHARS),
13895
13896
  status: phase === "begin" ? "running" : step.error ? "failed" : "passed",
13896
13897
  shardKey,
13897
- at: Date.now()
13898
+ at: Date.now(),
13899
+ // The step's own start time (not receive time) so the watch page can order a
13900
+ // parent `test.step` before the child actions nested inside it.
13901
+ startedAt: step.startTime?.getTime()
13898
13902
  };
13899
13903
  }
13900
13904
  function mapConsole(kind, chunk, testId, shardKey) {
@@ -13921,7 +13925,7 @@ var PdfReporter = class {
13921
13925
  this.liveConsole = false;
13922
13926
  this.options = parseOptions(rawOptions);
13923
13927
  this.dataCollector = new DataCollector(this.options.capture);
13924
- const version = true ? "0.10.3" : "0.x";
13928
+ const version = true ? "0.11.0" : "0.x";
13925
13929
  logger.info(`@reportforge/playwright-pdf v${version} initialised`);
13926
13930
  this.licenseClient = new LicenseClient({
13927
13931
  licenseKey: this.options.licenseKey,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reportforge/playwright-pdf",
3
- "version": "0.10.3",
3
+ "version": "0.11.0",
4
4
  "description": "Enterprise-ready PDF reports for Playwright Test — minimal, detailed, and executive templates with CI/CD integrations",
5
5
  "license": "MIT",
6
6
  "author": "ReportForge",