doc-detective-common 4.12.0 → 4.13.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.
@@ -7563,6 +7563,14 @@
7563
7563
  "false"
7564
7564
  ]
7565
7565
  },
7566
+ "name": {
7567
+ "type": "string",
7568
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
7569
+ "pattern": "\\S",
7570
+ "transform": [
7571
+ "trim"
7572
+ ]
7573
+ },
7566
7574
  "engine": {
7567
7575
  "title": "Recording engine",
7568
7576
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -7658,6 +7666,14 @@
7658
7666
  "false"
7659
7667
  ]
7660
7668
  },
7669
+ "name": {
7670
+ "type": "string",
7671
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
7672
+ "pattern": "\\S",
7673
+ "transform": [
7674
+ "trim"
7675
+ ]
7676
+ },
7661
7677
  "engine": {
7662
7678
  "title": "Recording engine",
7663
7679
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -7893,13 +7909,52 @@
7893
7909
  "stopRecord": {
7894
7910
  "$schema": "http://json-schema.org/draft-07/schema#",
7895
7911
  "title": "stopRecord",
7896
- "description": "Stop the current recording.",
7897
- "type": [
7898
- "boolean",
7899
- "null"
7912
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
7913
+ "anyOf": [
7914
+ {
7915
+ "type": "boolean",
7916
+ "title": "stopRecord (boolean)",
7917
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
7918
+ },
7919
+ {
7920
+ "type": "null",
7921
+ "title": "stopRecord (null)",
7922
+ "description": "Stops the most recently started active recording (LIFO)."
7923
+ },
7924
+ {
7925
+ "type": "string",
7926
+ "title": "stopRecord (name)",
7927
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
7928
+ "pattern": "\\S",
7929
+ "transform": [
7930
+ "trim"
7931
+ ]
7932
+ },
7933
+ {
7934
+ "type": "object",
7935
+ "title": "stopRecord (detailed)",
7936
+ "additionalProperties": false,
7937
+ "required": [
7938
+ "name"
7939
+ ],
7940
+ "properties": {
7941
+ "name": {
7942
+ "type": "string",
7943
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
7944
+ "pattern": "\\S",
7945
+ "transform": [
7946
+ "trim"
7947
+ ]
7948
+ }
7949
+ }
7950
+ }
7900
7951
  ],
7901
7952
  "examples": [
7902
- true
7953
+ true,
7954
+ "demo",
7955
+ {
7956
+ "name": "demo"
7957
+ }
7903
7958
  ]
7904
7959
  }
7905
7960
  },
@@ -10196,6 +10251,11 @@
10196
10251
  "type": "boolean",
10197
10252
  "default": false
10198
10253
  },
10254
+ "autoRecord": {
10255
+ "description": "If `true`, records a video of every test context that runs in a browser, in addition to any explicit `record` steps. The recording wraps the whole context (it starts before the first step and stops after the last) and always uses the `ffmpeg` engine. Videos are saved in the per-run artifact directory (`<output>/.doc-detective/run-<runId>/`) at paths derived from spec, test, and context IDs (for example, `recordings/<specId>/<testId>/<contextId>.mp4`), so the same context lands on the same relative path in every run's folder for run-over-run comparison. Specs and tests can override this value with their own `autoRecord` fields (test level wins over spec level, which wins over config level). Equivalent to `--auto-record` on the CLI.",
10256
+ "type": "boolean",
10257
+ "default": false
10258
+ },
10199
10259
  "autoUpdate": {
10200
10260
  "description": "If `true` (default), the CLI checks for a newer published `doc-detective` on startup and self-updates before running tests. Updates happen for global (`npm i -g`) and `npx` installs only — local installs (where `doc-detective` is a project dep) get an informational message instead, since auto-updating would mutate the user's lockfile. CI environments and the `DOC_DETECTIVE_SKIP_AUTO_UPDATE=1` env var also skip the check. Set to `false` to pin to the installed version. Equivalent to `--no-auto-update` on the CLI.",
10201
10261
  "type": "boolean",
@@ -16603,6 +16663,14 @@
16603
16663
  "false"
16604
16664
  ]
16605
16665
  },
16666
+ "name": {
16667
+ "type": "string",
16668
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
16669
+ "pattern": "\\S",
16670
+ "transform": [
16671
+ "trim"
16672
+ ]
16673
+ },
16606
16674
  "engine": {
16607
16675
  "title": "Recording engine",
16608
16676
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -16698,6 +16766,14 @@
16698
16766
  "false"
16699
16767
  ]
16700
16768
  },
16769
+ "name": {
16770
+ "type": "string",
16771
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
16772
+ "pattern": "\\S",
16773
+ "transform": [
16774
+ "trim"
16775
+ ]
16776
+ },
16701
16777
  "engine": {
16702
16778
  "title": "Recording engine",
16703
16779
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -16933,13 +17009,52 @@
16933
17009
  "stopRecord": {
16934
17010
  "$schema": "http://json-schema.org/draft-07/schema#",
16935
17011
  "title": "stopRecord",
16936
- "description": "Stop the current recording.",
16937
- "type": [
16938
- "boolean",
16939
- "null"
17012
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
17013
+ "anyOf": [
17014
+ {
17015
+ "type": "boolean",
17016
+ "title": "stopRecord (boolean)",
17017
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
17018
+ },
17019
+ {
17020
+ "type": "null",
17021
+ "title": "stopRecord (null)",
17022
+ "description": "Stops the most recently started active recording (LIFO)."
17023
+ },
17024
+ {
17025
+ "type": "string",
17026
+ "title": "stopRecord (name)",
17027
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
17028
+ "pattern": "\\S",
17029
+ "transform": [
17030
+ "trim"
17031
+ ]
17032
+ },
17033
+ {
17034
+ "type": "object",
17035
+ "title": "stopRecord (detailed)",
17036
+ "additionalProperties": false,
17037
+ "required": [
17038
+ "name"
17039
+ ],
17040
+ "properties": {
17041
+ "name": {
17042
+ "type": "string",
17043
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
17044
+ "pattern": "\\S",
17045
+ "transform": [
17046
+ "trim"
17047
+ ]
17048
+ }
17049
+ }
17050
+ }
16940
17051
  ],
16941
17052
  "examples": [
16942
- true
17053
+ true,
17054
+ "demo",
17055
+ {
17056
+ "name": "demo"
17057
+ }
16943
17058
  ]
16944
17059
  }
16945
17060
  },
@@ -22918,6 +23033,14 @@
22918
23033
  "false"
22919
23034
  ]
22920
23035
  },
23036
+ "name": {
23037
+ "type": "string",
23038
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
23039
+ "pattern": "\\S",
23040
+ "transform": [
23041
+ "trim"
23042
+ ]
23043
+ },
22921
23044
  "engine": {
22922
23045
  "title": "Recording engine",
22923
23046
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -23013,6 +23136,14 @@
23013
23136
  "false"
23014
23137
  ]
23015
23138
  },
23139
+ "name": {
23140
+ "type": "string",
23141
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
23142
+ "pattern": "\\S",
23143
+ "transform": [
23144
+ "trim"
23145
+ ]
23146
+ },
23016
23147
  "engine": {
23017
23148
  "title": "Recording engine",
23018
23149
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -30255,6 +30386,14 @@
30255
30386
  "false"
30256
30387
  ]
30257
30388
  },
30389
+ "name": {
30390
+ "type": "string",
30391
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
30392
+ "pattern": "\\S",
30393
+ "transform": [
30394
+ "trim"
30395
+ ]
30396
+ },
30258
30397
  "engine": {
30259
30398
  "title": "Recording engine",
30260
30399
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -30350,6 +30489,14 @@
30350
30489
  "false"
30351
30490
  ]
30352
30491
  },
30492
+ "name": {
30493
+ "type": "string",
30494
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
30495
+ "pattern": "\\S",
30496
+ "transform": [
30497
+ "trim"
30498
+ ]
30499
+ },
30353
30500
  "engine": {
30354
30501
  "title": "Recording engine",
30355
30502
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -30585,13 +30732,52 @@
30585
30732
  "stopRecord": {
30586
30733
  "$schema": "http://json-schema.org/draft-07/schema#",
30587
30734
  "title": "stopRecord",
30588
- "description": "Stop the current recording.",
30589
- "type": [
30590
- "boolean",
30591
- "null"
30735
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
30736
+ "anyOf": [
30737
+ {
30738
+ "type": "boolean",
30739
+ "title": "stopRecord (boolean)",
30740
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
30741
+ },
30742
+ {
30743
+ "type": "null",
30744
+ "title": "stopRecord (null)",
30745
+ "description": "Stops the most recently started active recording (LIFO)."
30746
+ },
30747
+ {
30748
+ "type": "string",
30749
+ "title": "stopRecord (name)",
30750
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
30751
+ "pattern": "\\S",
30752
+ "transform": [
30753
+ "trim"
30754
+ ]
30755
+ },
30756
+ {
30757
+ "type": "object",
30758
+ "title": "stopRecord (detailed)",
30759
+ "additionalProperties": false,
30760
+ "required": [
30761
+ "name"
30762
+ ],
30763
+ "properties": {
30764
+ "name": {
30765
+ "type": "string",
30766
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
30767
+ "pattern": "\\S",
30768
+ "transform": [
30769
+ "trim"
30770
+ ]
30771
+ }
30772
+ }
30773
+ }
30592
30774
  ],
30593
30775
  "examples": [
30594
- true
30776
+ true,
30777
+ "demo",
30778
+ {
30779
+ "name": "demo"
30780
+ }
30595
30781
  ]
30596
30782
  }
30597
30783
  },
@@ -32888,6 +33074,11 @@
32888
33074
  "type": "boolean",
32889
33075
  "default": false
32890
33076
  },
33077
+ "autoRecord": {
33078
+ "description": "If `true`, records a video of every test context that runs in a browser, in addition to any explicit `record` steps. The recording wraps the whole context (it starts before the first step and stops after the last) and always uses the `ffmpeg` engine. Videos are saved in the per-run artifact directory (`<output>/.doc-detective/run-<runId>/`) at paths derived from spec, test, and context IDs (for example, `recordings/<specId>/<testId>/<contextId>.mp4`), so the same context lands on the same relative path in every run's folder for run-over-run comparison. Specs and tests can override this value with their own `autoRecord` fields (test level wins over spec level, which wins over config level). Equivalent to `--auto-record` on the CLI.",
33079
+ "type": "boolean",
33080
+ "default": false
33081
+ },
32891
33082
  "autoUpdate": {
32892
33083
  "description": "If `true` (default), the CLI checks for a newer published `doc-detective` on startup and self-updates before running tests. Updates happen for global (`npm i -g`) and `npx` installs only — local installs (where `doc-detective` is a project dep) get an informational message instead, since auto-updating would mutate the user's lockfile. CI environments and the `DOC_DETECTIVE_SKIP_AUTO_UPDATE=1` env var also skip the check. Set to `false` to pin to the installed version. Equivalent to `--no-auto-update` on the CLI.",
32893
33084
  "type": "boolean",
@@ -39295,6 +39486,14 @@
39295
39486
  "false"
39296
39487
  ]
39297
39488
  },
39489
+ "name": {
39490
+ "type": "string",
39491
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
39492
+ "pattern": "\\S",
39493
+ "transform": [
39494
+ "trim"
39495
+ ]
39496
+ },
39298
39497
  "engine": {
39299
39498
  "title": "Recording engine",
39300
39499
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -39390,6 +39589,14 @@
39390
39589
  "false"
39391
39590
  ]
39392
39591
  },
39592
+ "name": {
39593
+ "type": "string",
39594
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
39595
+ "pattern": "\\S",
39596
+ "transform": [
39597
+ "trim"
39598
+ ]
39599
+ },
39393
39600
  "engine": {
39394
39601
  "title": "Recording engine",
39395
39602
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -39625,13 +39832,52 @@
39625
39832
  "stopRecord": {
39626
39833
  "$schema": "http://json-schema.org/draft-07/schema#",
39627
39834
  "title": "stopRecord",
39628
- "description": "Stop the current recording.",
39629
- "type": [
39630
- "boolean",
39631
- "null"
39835
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
39836
+ "anyOf": [
39837
+ {
39838
+ "type": "boolean",
39839
+ "title": "stopRecord (boolean)",
39840
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
39841
+ },
39842
+ {
39843
+ "type": "null",
39844
+ "title": "stopRecord (null)",
39845
+ "description": "Stops the most recently started active recording (LIFO)."
39846
+ },
39847
+ {
39848
+ "type": "string",
39849
+ "title": "stopRecord (name)",
39850
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
39851
+ "pattern": "\\S",
39852
+ "transform": [
39853
+ "trim"
39854
+ ]
39855
+ },
39856
+ {
39857
+ "type": "object",
39858
+ "title": "stopRecord (detailed)",
39859
+ "additionalProperties": false,
39860
+ "required": [
39861
+ "name"
39862
+ ],
39863
+ "properties": {
39864
+ "name": {
39865
+ "type": "string",
39866
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
39867
+ "pattern": "\\S",
39868
+ "transform": [
39869
+ "trim"
39870
+ ]
39871
+ }
39872
+ }
39873
+ }
39632
39874
  ],
39633
39875
  "examples": [
39634
- true
39876
+ true,
39877
+ "demo",
39878
+ {
39879
+ "name": "demo"
39880
+ }
39635
39881
  ]
39636
39882
  }
39637
39883
  },
@@ -42121,6 +42367,10 @@
42121
42367
  "type": "boolean",
42122
42368
  "description": "If `true`, captures a screenshot after every step in this spec's tests that runs in a browser. Overrides the config-level `autoScreenshot`; individual tests can override this value with their own `autoScreenshot`. When unset, defers to the config level."
42123
42369
  },
42370
+ "autoRecord": {
42371
+ "type": "boolean",
42372
+ "description": "If `true`, records a video of every browser context in this spec's tests. Overrides the config-level `autoRecord`; individual tests can override this value with their own `autoRecord`. When unset, defers to the config level."
42373
+ },
42124
42374
  "tests": {
42125
42375
  "description": "[Tests](test) to perform.",
42126
42376
  "type": "array",
@@ -42154,6 +42404,10 @@
42154
42404
  "type": "boolean",
42155
42405
  "description": "If `true`, captures a screenshot after every step in this test that runs in a browser. Overrides `autoScreenshot` set at the spec or config level. When unset, defers to the spec level, then the config level."
42156
42406
  },
42407
+ "autoRecord": {
42408
+ "type": "boolean",
42409
+ "description": "If `true`, records a video of every browser context in this test. Overrides `autoRecord` set at the spec or config level. When unset, defers to the spec level, then the config level."
42410
+ },
42157
42411
  "runOn": {
42158
42412
  "type": "array",
42159
42413
  "description": "Contexts to run the test in. Overrides contexts defined at the config and spec levels.",
@@ -49010,6 +49264,14 @@
49010
49264
  "false"
49011
49265
  ]
49012
49266
  },
49267
+ "name": {
49268
+ "type": "string",
49269
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
49270
+ "pattern": "\\S",
49271
+ "transform": [
49272
+ "trim"
49273
+ ]
49274
+ },
49013
49275
  "engine": {
49014
49276
  "title": "Recording engine",
49015
49277
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -49105,6 +49367,14 @@
49105
49367
  "false"
49106
49368
  ]
49107
49369
  },
49370
+ "name": {
49371
+ "type": "string",
49372
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
49373
+ "pattern": "\\S",
49374
+ "transform": [
49375
+ "trim"
49376
+ ]
49377
+ },
49108
49378
  "engine": {
49109
49379
  "title": "Recording engine",
49110
49380
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -49340,13 +49610,52 @@
49340
49610
  "stopRecord": {
49341
49611
  "$schema": "http://json-schema.org/draft-07/schema#",
49342
49612
  "title": "stopRecord",
49343
- "description": "Stop the current recording.",
49344
- "type": [
49345
- "boolean",
49346
- "null"
49613
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
49614
+ "anyOf": [
49615
+ {
49616
+ "type": "boolean",
49617
+ "title": "stopRecord (boolean)",
49618
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
49619
+ },
49620
+ {
49621
+ "type": "null",
49622
+ "title": "stopRecord (null)",
49623
+ "description": "Stops the most recently started active recording (LIFO)."
49624
+ },
49625
+ {
49626
+ "type": "string",
49627
+ "title": "stopRecord (name)",
49628
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
49629
+ "pattern": "\\S",
49630
+ "transform": [
49631
+ "trim"
49632
+ ]
49633
+ },
49634
+ {
49635
+ "type": "object",
49636
+ "title": "stopRecord (detailed)",
49637
+ "additionalProperties": false,
49638
+ "required": [
49639
+ "name"
49640
+ ],
49641
+ "properties": {
49642
+ "name": {
49643
+ "type": "string",
49644
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
49645
+ "pattern": "\\S",
49646
+ "transform": [
49647
+ "trim"
49648
+ ]
49649
+ }
49650
+ }
49651
+ }
49347
49652
  ],
49348
49653
  "examples": [
49349
- true
49654
+ true,
49655
+ "demo",
49656
+ {
49657
+ "name": "demo"
49658
+ }
49350
49659
  ]
49351
49660
  }
49352
49661
  },
@@ -57484,6 +57793,14 @@
57484
57793
  "false"
57485
57794
  ]
57486
57795
  },
57796
+ "name": {
57797
+ "type": "string",
57798
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
57799
+ "pattern": "\\S",
57800
+ "transform": [
57801
+ "trim"
57802
+ ]
57803
+ },
57487
57804
  "engine": {
57488
57805
  "title": "Recording engine",
57489
57806
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -57579,6 +57896,14 @@
57579
57896
  "false"
57580
57897
  ]
57581
57898
  },
57899
+ "name": {
57900
+ "type": "string",
57901
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
57902
+ "pattern": "\\S",
57903
+ "transform": [
57904
+ "trim"
57905
+ ]
57906
+ },
57582
57907
  "engine": {
57583
57908
  "title": "Recording engine",
57584
57909
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -57814,13 +58139,52 @@
57814
58139
  "stopRecord": {
57815
58140
  "$schema": "http://json-schema.org/draft-07/schema#",
57816
58141
  "title": "stopRecord",
57817
- "description": "Stop the current recording.",
57818
- "type": [
57819
- "boolean",
57820
- "null"
58142
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
58143
+ "anyOf": [
58144
+ {
58145
+ "type": "boolean",
58146
+ "title": "stopRecord (boolean)",
58147
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
58148
+ },
58149
+ {
58150
+ "type": "null",
58151
+ "title": "stopRecord (null)",
58152
+ "description": "Stops the most recently started active recording (LIFO)."
58153
+ },
58154
+ {
58155
+ "type": "string",
58156
+ "title": "stopRecord (name)",
58157
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
58158
+ "pattern": "\\S",
58159
+ "transform": [
58160
+ "trim"
58161
+ ]
58162
+ },
58163
+ {
58164
+ "type": "object",
58165
+ "title": "stopRecord (detailed)",
58166
+ "additionalProperties": false,
58167
+ "required": [
58168
+ "name"
58169
+ ],
58170
+ "properties": {
58171
+ "name": {
58172
+ "type": "string",
58173
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
58174
+ "pattern": "\\S",
58175
+ "transform": [
58176
+ "trim"
58177
+ ]
58178
+ }
58179
+ }
58180
+ }
57821
58181
  ],
57822
58182
  "examples": [
57823
- true
58183
+ true,
58184
+ "demo",
58185
+ {
58186
+ "name": "demo"
58187
+ }
57824
58188
  ]
57825
58189
  }
57826
58190
  },
@@ -60797,6 +61161,10 @@
60797
61161
  "type": "boolean",
60798
61162
  "description": "If `true`, captures a screenshot after every step in this spec's tests that runs in a browser. Overrides the config-level `autoScreenshot`; individual tests can override this value with their own `autoScreenshot`. When unset, defers to the config level."
60799
61163
  },
61164
+ "autoRecord": {
61165
+ "type": "boolean",
61166
+ "description": "If `true`, records a video of every browser context in this spec's tests. Overrides the config-level `autoRecord`; individual tests can override this value with their own `autoRecord`. When unset, defers to the config level."
61167
+ },
60800
61168
  "tests": {
60801
61169
  "description": "[Tests](test) to perform.",
60802
61170
  "type": "array",
@@ -60830,6 +61198,10 @@
60830
61198
  "type": "boolean",
60831
61199
  "description": "If `true`, captures a screenshot after every step in this test that runs in a browser. Overrides `autoScreenshot` set at the spec or config level. When unset, defers to the spec level, then the config level."
60832
61200
  },
61201
+ "autoRecord": {
61202
+ "type": "boolean",
61203
+ "description": "If `true`, records a video of every browser context in this test. Overrides `autoRecord` set at the spec or config level. When unset, defers to the spec level, then the config level."
61204
+ },
60833
61205
  "runOn": {
60834
61206
  "type": "array",
60835
61207
  "description": "Contexts to run the test in. Overrides contexts defined at the config and spec levels.",
@@ -67686,6 +68058,14 @@
67686
68058
  "false"
67687
68059
  ]
67688
68060
  },
68061
+ "name": {
68062
+ "type": "string",
68063
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
68064
+ "pattern": "\\S",
68065
+ "transform": [
68066
+ "trim"
68067
+ ]
68068
+ },
67689
68069
  "engine": {
67690
68070
  "title": "Recording engine",
67691
68071
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -67781,6 +68161,14 @@
67781
68161
  "false"
67782
68162
  ]
67783
68163
  },
68164
+ "name": {
68165
+ "type": "string",
68166
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
68167
+ "pattern": "\\S",
68168
+ "transform": [
68169
+ "trim"
68170
+ ]
68171
+ },
67784
68172
  "engine": {
67785
68173
  "title": "Recording engine",
67786
68174
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -68016,13 +68404,52 @@
68016
68404
  "stopRecord": {
68017
68405
  "$schema": "http://json-schema.org/draft-07/schema#",
68018
68406
  "title": "stopRecord",
68019
- "description": "Stop the current recording.",
68020
- "type": [
68021
- "boolean",
68022
- "null"
68407
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
68408
+ "anyOf": [
68409
+ {
68410
+ "type": "boolean",
68411
+ "title": "stopRecord (boolean)",
68412
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
68413
+ },
68414
+ {
68415
+ "type": "null",
68416
+ "title": "stopRecord (null)",
68417
+ "description": "Stops the most recently started active recording (LIFO)."
68418
+ },
68419
+ {
68420
+ "type": "string",
68421
+ "title": "stopRecord (name)",
68422
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
68423
+ "pattern": "\\S",
68424
+ "transform": [
68425
+ "trim"
68426
+ ]
68427
+ },
68428
+ {
68429
+ "type": "object",
68430
+ "title": "stopRecord (detailed)",
68431
+ "additionalProperties": false,
68432
+ "required": [
68433
+ "name"
68434
+ ],
68435
+ "properties": {
68436
+ "name": {
68437
+ "type": "string",
68438
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
68439
+ "pattern": "\\S",
68440
+ "transform": [
68441
+ "trim"
68442
+ ]
68443
+ }
68444
+ }
68445
+ }
68023
68446
  ],
68024
68447
  "examples": [
68025
- true
68448
+ true,
68449
+ "demo",
68450
+ {
68451
+ "name": "demo"
68452
+ }
68026
68453
  ]
68027
68454
  }
68028
68455
  },
@@ -76160,6 +76587,14 @@
76160
76587
  "false"
76161
76588
  ]
76162
76589
  },
76590
+ "name": {
76591
+ "type": "string",
76592
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
76593
+ "pattern": "\\S",
76594
+ "transform": [
76595
+ "trim"
76596
+ ]
76597
+ },
76163
76598
  "engine": {
76164
76599
  "title": "Recording engine",
76165
76600
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -76255,6 +76690,14 @@
76255
76690
  "false"
76256
76691
  ]
76257
76692
  },
76693
+ "name": {
76694
+ "type": "string",
76695
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
76696
+ "pattern": "\\S",
76697
+ "transform": [
76698
+ "trim"
76699
+ ]
76700
+ },
76258
76701
  "engine": {
76259
76702
  "title": "Recording engine",
76260
76703
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -76490,13 +76933,52 @@
76490
76933
  "stopRecord": {
76491
76934
  "$schema": "http://json-schema.org/draft-07/schema#",
76492
76935
  "title": "stopRecord",
76493
- "description": "Stop the current recording.",
76494
- "type": [
76495
- "boolean",
76496
- "null"
76936
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
76937
+ "anyOf": [
76938
+ {
76939
+ "type": "boolean",
76940
+ "title": "stopRecord (boolean)",
76941
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
76942
+ },
76943
+ {
76944
+ "type": "null",
76945
+ "title": "stopRecord (null)",
76946
+ "description": "Stops the most recently started active recording (LIFO)."
76947
+ },
76948
+ {
76949
+ "type": "string",
76950
+ "title": "stopRecord (name)",
76951
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
76952
+ "pattern": "\\S",
76953
+ "transform": [
76954
+ "trim"
76955
+ ]
76956
+ },
76957
+ {
76958
+ "type": "object",
76959
+ "title": "stopRecord (detailed)",
76960
+ "additionalProperties": false,
76961
+ "required": [
76962
+ "name"
76963
+ ],
76964
+ "properties": {
76965
+ "name": {
76966
+ "type": "string",
76967
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
76968
+ "pattern": "\\S",
76969
+ "transform": [
76970
+ "trim"
76971
+ ]
76972
+ }
76973
+ }
76974
+ }
76497
76975
  ],
76498
76976
  "examples": [
76499
- true
76977
+ true,
76978
+ "demo",
76979
+ {
76980
+ "name": "demo"
76981
+ }
76500
76982
  ]
76501
76983
  }
76502
76984
  },
@@ -80851,6 +81333,10 @@
80851
81333
  "type": "boolean",
80852
81334
  "description": "If `true`, captures a screenshot after every step in this spec's tests that runs in a browser. Overrides the config-level `autoScreenshot`; individual tests can override this value with their own `autoScreenshot`. When unset, defers to the config level."
80853
81335
  },
81336
+ "autoRecord": {
81337
+ "type": "boolean",
81338
+ "description": "If `true`, records a video of every browser context in this spec's tests. Overrides the config-level `autoRecord`; individual tests can override this value with their own `autoRecord`. When unset, defers to the config level."
81339
+ },
80854
81340
  "tests": {
80855
81341
  "description": "[Tests](test) to perform.",
80856
81342
  "type": "array",
@@ -80884,6 +81370,10 @@
80884
81370
  "type": "boolean",
80885
81371
  "description": "If `true`, captures a screenshot after every step in this test that runs in a browser. Overrides `autoScreenshot` set at the spec or config level. When unset, defers to the spec level, then the config level."
80886
81372
  },
81373
+ "autoRecord": {
81374
+ "type": "boolean",
81375
+ "description": "If `true`, records a video of every browser context in this test. Overrides `autoRecord` set at the spec or config level. When unset, defers to the spec level, then the config level."
81376
+ },
80887
81377
  "runOn": {
80888
81378
  "type": "array",
80889
81379
  "description": "Contexts to run the test in. Overrides contexts defined at the config and spec levels.",
@@ -87740,6 +88230,14 @@
87740
88230
  "false"
87741
88231
  ]
87742
88232
  },
88233
+ "name": {
88234
+ "type": "string",
88235
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
88236
+ "pattern": "\\S",
88237
+ "transform": [
88238
+ "trim"
88239
+ ]
88240
+ },
87743
88241
  "engine": {
87744
88242
  "title": "Recording engine",
87745
88243
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -87835,6 +88333,14 @@
87835
88333
  "false"
87836
88334
  ]
87837
88335
  },
88336
+ "name": {
88337
+ "type": "string",
88338
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
88339
+ "pattern": "\\S",
88340
+ "transform": [
88341
+ "trim"
88342
+ ]
88343
+ },
87838
88344
  "engine": {
87839
88345
  "title": "Recording engine",
87840
88346
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -88070,13 +88576,52 @@
88070
88576
  "stopRecord": {
88071
88577
  "$schema": "http://json-schema.org/draft-07/schema#",
88072
88578
  "title": "stopRecord",
88073
- "description": "Stop the current recording.",
88074
- "type": [
88075
- "boolean",
88076
- "null"
88579
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
88580
+ "anyOf": [
88581
+ {
88582
+ "type": "boolean",
88583
+ "title": "stopRecord (boolean)",
88584
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
88585
+ },
88586
+ {
88587
+ "type": "null",
88588
+ "title": "stopRecord (null)",
88589
+ "description": "Stops the most recently started active recording (LIFO)."
88590
+ },
88591
+ {
88592
+ "type": "string",
88593
+ "title": "stopRecord (name)",
88594
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
88595
+ "pattern": "\\S",
88596
+ "transform": [
88597
+ "trim"
88598
+ ]
88599
+ },
88600
+ {
88601
+ "type": "object",
88602
+ "title": "stopRecord (detailed)",
88603
+ "additionalProperties": false,
88604
+ "required": [
88605
+ "name"
88606
+ ],
88607
+ "properties": {
88608
+ "name": {
88609
+ "type": "string",
88610
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
88611
+ "pattern": "\\S",
88612
+ "transform": [
88613
+ "trim"
88614
+ ]
88615
+ }
88616
+ }
88617
+ }
88077
88618
  ],
88078
88619
  "examples": [
88079
- true
88620
+ true,
88621
+ "demo",
88622
+ {
88623
+ "name": "demo"
88624
+ }
88080
88625
  ]
88081
88626
  }
88082
88627
  },
@@ -96214,6 +96759,14 @@
96214
96759
  "false"
96215
96760
  ]
96216
96761
  },
96762
+ "name": {
96763
+ "type": "string",
96764
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
96765
+ "pattern": "\\S",
96766
+ "transform": [
96767
+ "trim"
96768
+ ]
96769
+ },
96217
96770
  "engine": {
96218
96771
  "title": "Recording engine",
96219
96772
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -96309,6 +96862,14 @@
96309
96862
  "false"
96310
96863
  ]
96311
96864
  },
96865
+ "name": {
96866
+ "type": "string",
96867
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
96868
+ "pattern": "\\S",
96869
+ "transform": [
96870
+ "trim"
96871
+ ]
96872
+ },
96312
96873
  "engine": {
96313
96874
  "title": "Recording engine",
96314
96875
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -96544,13 +97105,52 @@
96544
97105
  "stopRecord": {
96545
97106
  "$schema": "http://json-schema.org/draft-07/schema#",
96546
97107
  "title": "stopRecord",
96547
- "description": "Stop the current recording.",
96548
- "type": [
96549
- "boolean",
96550
- "null"
97108
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
97109
+ "anyOf": [
97110
+ {
97111
+ "type": "boolean",
97112
+ "title": "stopRecord (boolean)",
97113
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
97114
+ },
97115
+ {
97116
+ "type": "null",
97117
+ "title": "stopRecord (null)",
97118
+ "description": "Stops the most recently started active recording (LIFO)."
97119
+ },
97120
+ {
97121
+ "type": "string",
97122
+ "title": "stopRecord (name)",
97123
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
97124
+ "pattern": "\\S",
97125
+ "transform": [
97126
+ "trim"
97127
+ ]
97128
+ },
97129
+ {
97130
+ "type": "object",
97131
+ "title": "stopRecord (detailed)",
97132
+ "additionalProperties": false,
97133
+ "required": [
97134
+ "name"
97135
+ ],
97136
+ "properties": {
97137
+ "name": {
97138
+ "type": "string",
97139
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
97140
+ "pattern": "\\S",
97141
+ "transform": [
97142
+ "trim"
97143
+ ]
97144
+ }
97145
+ }
97146
+ }
96551
97147
  ],
96552
97148
  "examples": [
96553
- true
97149
+ true,
97150
+ "demo",
97151
+ {
97152
+ "name": "demo"
97153
+ }
96554
97154
  ]
96555
97155
  }
96556
97156
  },
@@ -104968,6 +105568,14 @@
104968
105568
  "false"
104969
105569
  ]
104970
105570
  },
105571
+ "name": {
105572
+ "type": "string",
105573
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
105574
+ "pattern": "\\S",
105575
+ "transform": [
105576
+ "trim"
105577
+ ]
105578
+ },
104971
105579
  "engine": {
104972
105580
  "title": "Recording engine",
104973
105581
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -105063,6 +105671,14 @@
105063
105671
  "false"
105064
105672
  ]
105065
105673
  },
105674
+ "name": {
105675
+ "type": "string",
105676
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
105677
+ "pattern": "\\S",
105678
+ "transform": [
105679
+ "trim"
105680
+ ]
105681
+ },
105066
105682
  "engine": {
105067
105683
  "title": "Recording engine",
105068
105684
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -105298,13 +105914,52 @@
105298
105914
  "stopRecord": {
105299
105915
  "$schema": "http://json-schema.org/draft-07/schema#",
105300
105916
  "title": "stopRecord",
105301
- "description": "Stop the current recording.",
105302
- "type": [
105303
- "boolean",
105304
- "null"
105917
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
105918
+ "anyOf": [
105919
+ {
105920
+ "type": "boolean",
105921
+ "title": "stopRecord (boolean)",
105922
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
105923
+ },
105924
+ {
105925
+ "type": "null",
105926
+ "title": "stopRecord (null)",
105927
+ "description": "Stops the most recently started active recording (LIFO)."
105928
+ },
105929
+ {
105930
+ "type": "string",
105931
+ "title": "stopRecord (name)",
105932
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
105933
+ "pattern": "\\S",
105934
+ "transform": [
105935
+ "trim"
105936
+ ]
105937
+ },
105938
+ {
105939
+ "type": "object",
105940
+ "title": "stopRecord (detailed)",
105941
+ "additionalProperties": false,
105942
+ "required": [
105943
+ "name"
105944
+ ],
105945
+ "properties": {
105946
+ "name": {
105947
+ "type": "string",
105948
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
105949
+ "pattern": "\\S",
105950
+ "transform": [
105951
+ "trim"
105952
+ ]
105953
+ }
105954
+ }
105955
+ }
105305
105956
  ],
105306
105957
  "examples": [
105307
- true
105958
+ true,
105959
+ "demo",
105960
+ {
105961
+ "name": "demo"
105962
+ }
105308
105963
  ]
105309
105964
  }
105310
105965
  },
@@ -106907,13 +107562,52 @@
106907
107562
  "stopRecord_v3": {
106908
107563
  "$schema": "http://json-schema.org/draft-07/schema#",
106909
107564
  "title": "stopRecord",
106910
- "description": "Stop the current recording.",
106911
- "type": [
106912
- "boolean",
106913
- "null"
107565
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
107566
+ "anyOf": [
107567
+ {
107568
+ "type": "boolean",
107569
+ "title": "stopRecord (boolean)",
107570
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
107571
+ },
107572
+ {
107573
+ "type": "null",
107574
+ "title": "stopRecord (null)",
107575
+ "description": "Stops the most recently started active recording (LIFO)."
107576
+ },
107577
+ {
107578
+ "type": "string",
107579
+ "title": "stopRecord (name)",
107580
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
107581
+ "pattern": "\\S",
107582
+ "transform": [
107583
+ "trim"
107584
+ ]
107585
+ },
107586
+ {
107587
+ "type": "object",
107588
+ "title": "stopRecord (detailed)",
107589
+ "additionalProperties": false,
107590
+ "required": [
107591
+ "name"
107592
+ ],
107593
+ "properties": {
107594
+ "name": {
107595
+ "type": "string",
107596
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
107597
+ "pattern": "\\S",
107598
+ "transform": [
107599
+ "trim"
107600
+ ]
107601
+ }
107602
+ }
107603
+ }
106914
107604
  ],
106915
107605
  "examples": [
106916
- true
107606
+ true,
107607
+ "demo",
107608
+ {
107609
+ "name": "demo"
107610
+ }
106917
107611
  ]
106918
107612
  },
106919
107613
  "test_v3": {
@@ -106943,6 +107637,10 @@
106943
107637
  "type": "boolean",
106944
107638
  "description": "If `true`, captures a screenshot after every step in this test that runs in a browser. Overrides `autoScreenshot` set at the spec or config level. When unset, defers to the spec level, then the config level."
106945
107639
  },
107640
+ "autoRecord": {
107641
+ "type": "boolean",
107642
+ "description": "If `true`, records a video of every browser context in this test. Overrides `autoRecord` set at the spec or config level. When unset, defers to the spec level, then the config level."
107643
+ },
106946
107644
  "runOn": {
106947
107645
  "type": "array",
106948
107646
  "description": "Contexts to run the test in. Overrides contexts defined at the config and spec levels.",
@@ -113799,6 +114497,14 @@
113799
114497
  "false"
113800
114498
  ]
113801
114499
  },
114500
+ "name": {
114501
+ "type": "string",
114502
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
114503
+ "pattern": "\\S",
114504
+ "transform": [
114505
+ "trim"
114506
+ ]
114507
+ },
113802
114508
  "engine": {
113803
114509
  "title": "Recording engine",
113804
114510
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -113894,6 +114600,14 @@
113894
114600
  "false"
113895
114601
  ]
113896
114602
  },
114603
+ "name": {
114604
+ "type": "string",
114605
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
114606
+ "pattern": "\\S",
114607
+ "transform": [
114608
+ "trim"
114609
+ ]
114610
+ },
113897
114611
  "engine": {
113898
114612
  "title": "Recording engine",
113899
114613
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -114129,13 +114843,52 @@
114129
114843
  "stopRecord": {
114130
114844
  "$schema": "http://json-schema.org/draft-07/schema#",
114131
114845
  "title": "stopRecord",
114132
- "description": "Stop the current recording.",
114133
- "type": [
114134
- "boolean",
114135
- "null"
114846
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
114847
+ "anyOf": [
114848
+ {
114849
+ "type": "boolean",
114850
+ "title": "stopRecord (boolean)",
114851
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
114852
+ },
114853
+ {
114854
+ "type": "null",
114855
+ "title": "stopRecord (null)",
114856
+ "description": "Stops the most recently started active recording (LIFO)."
114857
+ },
114858
+ {
114859
+ "type": "string",
114860
+ "title": "stopRecord (name)",
114861
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
114862
+ "pattern": "\\S",
114863
+ "transform": [
114864
+ "trim"
114865
+ ]
114866
+ },
114867
+ {
114868
+ "type": "object",
114869
+ "title": "stopRecord (detailed)",
114870
+ "additionalProperties": false,
114871
+ "required": [
114872
+ "name"
114873
+ ],
114874
+ "properties": {
114875
+ "name": {
114876
+ "type": "string",
114877
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
114878
+ "pattern": "\\S",
114879
+ "transform": [
114880
+ "trim"
114881
+ ]
114882
+ }
114883
+ }
114884
+ }
114136
114885
  ],
114137
114886
  "examples": [
114138
- true
114887
+ true,
114888
+ "demo",
114889
+ {
114890
+ "name": "demo"
114891
+ }
114139
114892
  ]
114140
114893
  }
114141
114894
  },
@@ -122273,6 +123026,14 @@
122273
123026
  "false"
122274
123027
  ]
122275
123028
  },
123029
+ "name": {
123030
+ "type": "string",
123031
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
123032
+ "pattern": "\\S",
123033
+ "transform": [
123034
+ "trim"
123035
+ ]
123036
+ },
122276
123037
  "engine": {
122277
123038
  "title": "Recording engine",
122278
123039
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -122368,6 +123129,14 @@
122368
123129
  "false"
122369
123130
  ]
122370
123131
  },
123132
+ "name": {
123133
+ "type": "string",
123134
+ "description": "Identifier for this recording. A later `stopRecord` step can target it by name (`stopRecord: \"<name>\"`), which is how you stop a specific recording when several overlap. Names must be unique among recordings that are active at the same time. If omitted, the recording is anonymous and is stopped LIFO by an untargeted `stopRecord`.",
123135
+ "pattern": "\\S",
123136
+ "transform": [
123137
+ "trim"
123138
+ ]
123139
+ },
122371
123140
  "engine": {
122372
123141
  "title": "Recording engine",
122373
123142
  "description": "Recording engine to use. Either a string shorthand selecting the engine with defaults, or an object for full control. If unset, defaults to the `browser` engine when a visible Chrome context is available and to `ffmpeg` otherwise.",
@@ -122603,13 +123372,52 @@
122603
123372
  "stopRecord": {
122604
123373
  "$schema": "http://json-schema.org/draft-07/schema#",
122605
123374
  "title": "stopRecord",
122606
- "description": "Stop the current recording.",
122607
- "type": [
122608
- "boolean",
122609
- "null"
123375
+ "description": "Stop a recording started by an earlier `record` step. With no target (`true`/`null`), stops the most recently started recording that is still active (LIFO). To stop a specific recording when several overlap, target it by name with a string (`stopRecord: \"<name>\"`) or an object (`stopRecord: { name: \"<name>\" }`).",
123376
+ "anyOf": [
123377
+ {
123378
+ "type": "boolean",
123379
+ "title": "stopRecord (boolean)",
123380
+ "description": "If `true`, stops the most recently started active recording (LIFO). If `false`, does nothing — an explicit no-op (mirrors `record: false`)."
123381
+ },
123382
+ {
123383
+ "type": "null",
123384
+ "title": "stopRecord (null)",
123385
+ "description": "Stops the most recently started active recording (LIFO)."
123386
+ },
123387
+ {
123388
+ "type": "string",
123389
+ "title": "stopRecord (name)",
123390
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
123391
+ "pattern": "\\S",
123392
+ "transform": [
123393
+ "trim"
123394
+ ]
123395
+ },
123396
+ {
123397
+ "type": "object",
123398
+ "title": "stopRecord (detailed)",
123399
+ "additionalProperties": false,
123400
+ "required": [
123401
+ "name"
123402
+ ],
123403
+ "properties": {
123404
+ "name": {
123405
+ "type": "string",
123406
+ "description": "Name of the recording to stop. Matches the `name` given to a `record` step.",
123407
+ "pattern": "\\S",
123408
+ "transform": [
123409
+ "trim"
123410
+ ]
123411
+ }
123412
+ }
123413
+ }
122610
123414
  ],
122611
123415
  "examples": [
122612
- true
123416
+ true,
123417
+ "demo",
123418
+ {
123419
+ "name": "demo"
123420
+ }
122613
123421
  ]
122614
123422
  }
122615
123423
  },