doc-detective 4.33.0 → 4.34.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/dist/common/src/schemas/schemas.json +1400 -0
- package/dist/common/src/types/generated/record_v3.d.ts +27 -0
- package/dist/common/src/types/generated/record_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/step_v3.d.ts +27 -0
- package/dist/common/src/types/generated/step_v3.d.ts.map +1 -1
- package/dist/common/src/types/generated/test_v3.d.ts +54 -0
- package/dist/common/src/types/generated/test_v3.d.ts.map +1 -1
- package/dist/core/tests/ffmpegRecorder.d.ts +12 -1
- package/dist/core/tests/ffmpegRecorder.d.ts.map +1 -1
- package/dist/core/tests/ffmpegRecorder.js +124 -1
- package/dist/core/tests/ffmpegRecorder.js.map +1 -1
- package/dist/core/tests/stopRecording.d.ts.map +1 -1
- package/dist/core/tests/stopRecording.js +115 -18
- package/dist/core/tests/stopRecording.js.map +1 -1
- package/dist/core/tests.d.ts.map +1 -1
- package/dist/core/tests.js +1 -0
- package/dist/core/tests.js.map +1 -1
- package/dist/index.cjs +1567 -12
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -34565,6 +34565,56 @@ var init_schemas = __esm({
|
|
|
34565
34565
|
}
|
|
34566
34566
|
]
|
|
34567
34567
|
},
|
|
34568
|
+
verify: {
|
|
34569
|
+
title: "Recording verify guards",
|
|
34570
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
34571
|
+
type: "object",
|
|
34572
|
+
additionalProperties: false,
|
|
34573
|
+
properties: {
|
|
34574
|
+
minDuration: {
|
|
34575
|
+
type: "number",
|
|
34576
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
34577
|
+
minimum: 0
|
|
34578
|
+
},
|
|
34579
|
+
maxDuration: {
|
|
34580
|
+
type: "number",
|
|
34581
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
34582
|
+
minimum: 0
|
|
34583
|
+
},
|
|
34584
|
+
resolution: {
|
|
34585
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
34586
|
+
anyOf: [
|
|
34587
|
+
{
|
|
34588
|
+
type: "boolean",
|
|
34589
|
+
title: "Verify resolution (boolean)"
|
|
34590
|
+
},
|
|
34591
|
+
{
|
|
34592
|
+
type: "object",
|
|
34593
|
+
title: "Verify resolution (detailed)",
|
|
34594
|
+
additionalProperties: false,
|
|
34595
|
+
required: [
|
|
34596
|
+
"width",
|
|
34597
|
+
"height"
|
|
34598
|
+
],
|
|
34599
|
+
properties: {
|
|
34600
|
+
width: {
|
|
34601
|
+
type: "integer",
|
|
34602
|
+
minimum: 1
|
|
34603
|
+
},
|
|
34604
|
+
height: {
|
|
34605
|
+
type: "integer",
|
|
34606
|
+
minimum: 1
|
|
34607
|
+
}
|
|
34608
|
+
}
|
|
34609
|
+
}
|
|
34610
|
+
]
|
|
34611
|
+
},
|
|
34612
|
+
notBlack: {
|
|
34613
|
+
type: "boolean",
|
|
34614
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
34615
|
+
}
|
|
34616
|
+
}
|
|
34617
|
+
},
|
|
34568
34618
|
checkpoints: {
|
|
34569
34619
|
title: "Recording checkpoints",
|
|
34570
34620
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -34920,6 +34970,56 @@ var init_schemas = __esm({
|
|
|
34920
34970
|
}
|
|
34921
34971
|
]
|
|
34922
34972
|
},
|
|
34973
|
+
verify: {
|
|
34974
|
+
title: "Recording verify guards",
|
|
34975
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
34976
|
+
type: "object",
|
|
34977
|
+
additionalProperties: false,
|
|
34978
|
+
properties: {
|
|
34979
|
+
minDuration: {
|
|
34980
|
+
type: "number",
|
|
34981
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
34982
|
+
minimum: 0
|
|
34983
|
+
},
|
|
34984
|
+
maxDuration: {
|
|
34985
|
+
type: "number",
|
|
34986
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
34987
|
+
minimum: 0
|
|
34988
|
+
},
|
|
34989
|
+
resolution: {
|
|
34990
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
34991
|
+
anyOf: [
|
|
34992
|
+
{
|
|
34993
|
+
type: "boolean",
|
|
34994
|
+
title: "Verify resolution (boolean)"
|
|
34995
|
+
},
|
|
34996
|
+
{
|
|
34997
|
+
type: "object",
|
|
34998
|
+
title: "Verify resolution (detailed)",
|
|
34999
|
+
additionalProperties: false,
|
|
35000
|
+
required: [
|
|
35001
|
+
"width",
|
|
35002
|
+
"height"
|
|
35003
|
+
],
|
|
35004
|
+
properties: {
|
|
35005
|
+
width: {
|
|
35006
|
+
type: "integer",
|
|
35007
|
+
minimum: 1
|
|
35008
|
+
},
|
|
35009
|
+
height: {
|
|
35010
|
+
type: "integer",
|
|
35011
|
+
minimum: 1
|
|
35012
|
+
}
|
|
35013
|
+
}
|
|
35014
|
+
}
|
|
35015
|
+
]
|
|
35016
|
+
},
|
|
35017
|
+
notBlack: {
|
|
35018
|
+
type: "boolean",
|
|
35019
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
35020
|
+
}
|
|
35021
|
+
}
|
|
35022
|
+
},
|
|
34923
35023
|
checkpoints: {
|
|
34924
35024
|
title: "Recording checkpoints",
|
|
34925
35025
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -80287,6 +80387,56 @@ var init_schemas = __esm({
|
|
|
80287
80387
|
}
|
|
80288
80388
|
]
|
|
80289
80389
|
},
|
|
80390
|
+
verify: {
|
|
80391
|
+
title: "Recording verify guards",
|
|
80392
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
80393
|
+
type: "object",
|
|
80394
|
+
additionalProperties: false,
|
|
80395
|
+
properties: {
|
|
80396
|
+
minDuration: {
|
|
80397
|
+
type: "number",
|
|
80398
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
80399
|
+
minimum: 0
|
|
80400
|
+
},
|
|
80401
|
+
maxDuration: {
|
|
80402
|
+
type: "number",
|
|
80403
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
80404
|
+
minimum: 0
|
|
80405
|
+
},
|
|
80406
|
+
resolution: {
|
|
80407
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
80408
|
+
anyOf: [
|
|
80409
|
+
{
|
|
80410
|
+
type: "boolean",
|
|
80411
|
+
title: "Verify resolution (boolean)"
|
|
80412
|
+
},
|
|
80413
|
+
{
|
|
80414
|
+
type: "object",
|
|
80415
|
+
title: "Verify resolution (detailed)",
|
|
80416
|
+
additionalProperties: false,
|
|
80417
|
+
required: [
|
|
80418
|
+
"width",
|
|
80419
|
+
"height"
|
|
80420
|
+
],
|
|
80421
|
+
properties: {
|
|
80422
|
+
width: {
|
|
80423
|
+
type: "integer",
|
|
80424
|
+
minimum: 1
|
|
80425
|
+
},
|
|
80426
|
+
height: {
|
|
80427
|
+
type: "integer",
|
|
80428
|
+
minimum: 1
|
|
80429
|
+
}
|
|
80430
|
+
}
|
|
80431
|
+
}
|
|
80432
|
+
]
|
|
80433
|
+
},
|
|
80434
|
+
notBlack: {
|
|
80435
|
+
type: "boolean",
|
|
80436
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
80437
|
+
}
|
|
80438
|
+
}
|
|
80439
|
+
},
|
|
80290
80440
|
checkpoints: {
|
|
80291
80441
|
title: "Recording checkpoints",
|
|
80292
80442
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -80642,6 +80792,56 @@ var init_schemas = __esm({
|
|
|
80642
80792
|
}
|
|
80643
80793
|
]
|
|
80644
80794
|
},
|
|
80795
|
+
verify: {
|
|
80796
|
+
title: "Recording verify guards",
|
|
80797
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
80798
|
+
type: "object",
|
|
80799
|
+
additionalProperties: false,
|
|
80800
|
+
properties: {
|
|
80801
|
+
minDuration: {
|
|
80802
|
+
type: "number",
|
|
80803
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
80804
|
+
minimum: 0
|
|
80805
|
+
},
|
|
80806
|
+
maxDuration: {
|
|
80807
|
+
type: "number",
|
|
80808
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
80809
|
+
minimum: 0
|
|
80810
|
+
},
|
|
80811
|
+
resolution: {
|
|
80812
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
80813
|
+
anyOf: [
|
|
80814
|
+
{
|
|
80815
|
+
type: "boolean",
|
|
80816
|
+
title: "Verify resolution (boolean)"
|
|
80817
|
+
},
|
|
80818
|
+
{
|
|
80819
|
+
type: "object",
|
|
80820
|
+
title: "Verify resolution (detailed)",
|
|
80821
|
+
additionalProperties: false,
|
|
80822
|
+
required: [
|
|
80823
|
+
"width",
|
|
80824
|
+
"height"
|
|
80825
|
+
],
|
|
80826
|
+
properties: {
|
|
80827
|
+
width: {
|
|
80828
|
+
type: "integer",
|
|
80829
|
+
minimum: 1
|
|
80830
|
+
},
|
|
80831
|
+
height: {
|
|
80832
|
+
type: "integer",
|
|
80833
|
+
minimum: 1
|
|
80834
|
+
}
|
|
80835
|
+
}
|
|
80836
|
+
}
|
|
80837
|
+
]
|
|
80838
|
+
},
|
|
80839
|
+
notBlack: {
|
|
80840
|
+
type: "boolean",
|
|
80841
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
80842
|
+
}
|
|
80843
|
+
}
|
|
80844
|
+
},
|
|
80645
80845
|
checkpoints: {
|
|
80646
80846
|
title: "Recording checkpoints",
|
|
80647
80847
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -106649,6 +106849,56 @@ var init_schemas = __esm({
|
|
|
106649
106849
|
}
|
|
106650
106850
|
]
|
|
106651
106851
|
},
|
|
106852
|
+
verify: {
|
|
106853
|
+
title: "Recording verify guards",
|
|
106854
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
106855
|
+
type: "object",
|
|
106856
|
+
additionalProperties: false,
|
|
106857
|
+
properties: {
|
|
106858
|
+
minDuration: {
|
|
106859
|
+
type: "number",
|
|
106860
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
106861
|
+
minimum: 0
|
|
106862
|
+
},
|
|
106863
|
+
maxDuration: {
|
|
106864
|
+
type: "number",
|
|
106865
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
106866
|
+
minimum: 0
|
|
106867
|
+
},
|
|
106868
|
+
resolution: {
|
|
106869
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
106870
|
+
anyOf: [
|
|
106871
|
+
{
|
|
106872
|
+
type: "boolean",
|
|
106873
|
+
title: "Verify resolution (boolean)"
|
|
106874
|
+
},
|
|
106875
|
+
{
|
|
106876
|
+
type: "object",
|
|
106877
|
+
title: "Verify resolution (detailed)",
|
|
106878
|
+
additionalProperties: false,
|
|
106879
|
+
required: [
|
|
106880
|
+
"width",
|
|
106881
|
+
"height"
|
|
106882
|
+
],
|
|
106883
|
+
properties: {
|
|
106884
|
+
width: {
|
|
106885
|
+
type: "integer",
|
|
106886
|
+
minimum: 1
|
|
106887
|
+
},
|
|
106888
|
+
height: {
|
|
106889
|
+
type: "integer",
|
|
106890
|
+
minimum: 1
|
|
106891
|
+
}
|
|
106892
|
+
}
|
|
106893
|
+
}
|
|
106894
|
+
]
|
|
106895
|
+
},
|
|
106896
|
+
notBlack: {
|
|
106897
|
+
type: "boolean",
|
|
106898
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
106899
|
+
}
|
|
106900
|
+
}
|
|
106901
|
+
},
|
|
106652
106902
|
checkpoints: {
|
|
106653
106903
|
title: "Recording checkpoints",
|
|
106654
106904
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -107004,6 +107254,56 @@ var init_schemas = __esm({
|
|
|
107004
107254
|
}
|
|
107005
107255
|
]
|
|
107006
107256
|
},
|
|
107257
|
+
verify: {
|
|
107258
|
+
title: "Recording verify guards",
|
|
107259
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
107260
|
+
type: "object",
|
|
107261
|
+
additionalProperties: false,
|
|
107262
|
+
properties: {
|
|
107263
|
+
minDuration: {
|
|
107264
|
+
type: "number",
|
|
107265
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
107266
|
+
minimum: 0
|
|
107267
|
+
},
|
|
107268
|
+
maxDuration: {
|
|
107269
|
+
type: "number",
|
|
107270
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
107271
|
+
minimum: 0
|
|
107272
|
+
},
|
|
107273
|
+
resolution: {
|
|
107274
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
107275
|
+
anyOf: [
|
|
107276
|
+
{
|
|
107277
|
+
type: "boolean",
|
|
107278
|
+
title: "Verify resolution (boolean)"
|
|
107279
|
+
},
|
|
107280
|
+
{
|
|
107281
|
+
type: "object",
|
|
107282
|
+
title: "Verify resolution (detailed)",
|
|
107283
|
+
additionalProperties: false,
|
|
107284
|
+
required: [
|
|
107285
|
+
"width",
|
|
107286
|
+
"height"
|
|
107287
|
+
],
|
|
107288
|
+
properties: {
|
|
107289
|
+
width: {
|
|
107290
|
+
type: "integer",
|
|
107291
|
+
minimum: 1
|
|
107292
|
+
},
|
|
107293
|
+
height: {
|
|
107294
|
+
type: "integer",
|
|
107295
|
+
minimum: 1
|
|
107296
|
+
}
|
|
107297
|
+
}
|
|
107298
|
+
}
|
|
107299
|
+
]
|
|
107300
|
+
},
|
|
107301
|
+
notBlack: {
|
|
107302
|
+
type: "boolean",
|
|
107303
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
107304
|
+
}
|
|
107305
|
+
}
|
|
107306
|
+
},
|
|
107007
107307
|
checkpoints: {
|
|
107008
107308
|
title: "Recording checkpoints",
|
|
107009
107309
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -139373,6 +139673,56 @@ var init_schemas = __esm({
|
|
|
139373
139673
|
}
|
|
139374
139674
|
]
|
|
139375
139675
|
},
|
|
139676
|
+
verify: {
|
|
139677
|
+
title: "Recording verify guards",
|
|
139678
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
139679
|
+
type: "object",
|
|
139680
|
+
additionalProperties: false,
|
|
139681
|
+
properties: {
|
|
139682
|
+
minDuration: {
|
|
139683
|
+
type: "number",
|
|
139684
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
139685
|
+
minimum: 0
|
|
139686
|
+
},
|
|
139687
|
+
maxDuration: {
|
|
139688
|
+
type: "number",
|
|
139689
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
139690
|
+
minimum: 0
|
|
139691
|
+
},
|
|
139692
|
+
resolution: {
|
|
139693
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
139694
|
+
anyOf: [
|
|
139695
|
+
{
|
|
139696
|
+
type: "boolean",
|
|
139697
|
+
title: "Verify resolution (boolean)"
|
|
139698
|
+
},
|
|
139699
|
+
{
|
|
139700
|
+
type: "object",
|
|
139701
|
+
title: "Verify resolution (detailed)",
|
|
139702
|
+
additionalProperties: false,
|
|
139703
|
+
required: [
|
|
139704
|
+
"width",
|
|
139705
|
+
"height"
|
|
139706
|
+
],
|
|
139707
|
+
properties: {
|
|
139708
|
+
width: {
|
|
139709
|
+
type: "integer",
|
|
139710
|
+
minimum: 1
|
|
139711
|
+
},
|
|
139712
|
+
height: {
|
|
139713
|
+
type: "integer",
|
|
139714
|
+
minimum: 1
|
|
139715
|
+
}
|
|
139716
|
+
}
|
|
139717
|
+
}
|
|
139718
|
+
]
|
|
139719
|
+
},
|
|
139720
|
+
notBlack: {
|
|
139721
|
+
type: "boolean",
|
|
139722
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
139723
|
+
}
|
|
139724
|
+
}
|
|
139725
|
+
},
|
|
139376
139726
|
checkpoints: {
|
|
139377
139727
|
title: "Recording checkpoints",
|
|
139378
139728
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -139728,6 +140078,56 @@ var init_schemas = __esm({
|
|
|
139728
140078
|
}
|
|
139729
140079
|
]
|
|
139730
140080
|
},
|
|
140081
|
+
verify: {
|
|
140082
|
+
title: "Recording verify guards",
|
|
140083
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
140084
|
+
type: "object",
|
|
140085
|
+
additionalProperties: false,
|
|
140086
|
+
properties: {
|
|
140087
|
+
minDuration: {
|
|
140088
|
+
type: "number",
|
|
140089
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
140090
|
+
minimum: 0
|
|
140091
|
+
},
|
|
140092
|
+
maxDuration: {
|
|
140093
|
+
type: "number",
|
|
140094
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
140095
|
+
minimum: 0
|
|
140096
|
+
},
|
|
140097
|
+
resolution: {
|
|
140098
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
140099
|
+
anyOf: [
|
|
140100
|
+
{
|
|
140101
|
+
type: "boolean",
|
|
140102
|
+
title: "Verify resolution (boolean)"
|
|
140103
|
+
},
|
|
140104
|
+
{
|
|
140105
|
+
type: "object",
|
|
140106
|
+
title: "Verify resolution (detailed)",
|
|
140107
|
+
additionalProperties: false,
|
|
140108
|
+
required: [
|
|
140109
|
+
"width",
|
|
140110
|
+
"height"
|
|
140111
|
+
],
|
|
140112
|
+
properties: {
|
|
140113
|
+
width: {
|
|
140114
|
+
type: "integer",
|
|
140115
|
+
minimum: 1
|
|
140116
|
+
},
|
|
140117
|
+
height: {
|
|
140118
|
+
type: "integer",
|
|
140119
|
+
minimum: 1
|
|
140120
|
+
}
|
|
140121
|
+
}
|
|
140122
|
+
}
|
|
140123
|
+
]
|
|
140124
|
+
},
|
|
140125
|
+
notBlack: {
|
|
140126
|
+
type: "boolean",
|
|
140127
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
140128
|
+
}
|
|
140129
|
+
}
|
|
140130
|
+
},
|
|
139731
140131
|
checkpoints: {
|
|
139732
140132
|
title: "Recording checkpoints",
|
|
139733
140133
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -185095,6 +185495,56 @@ var init_schemas = __esm({
|
|
|
185095
185495
|
}
|
|
185096
185496
|
]
|
|
185097
185497
|
},
|
|
185498
|
+
verify: {
|
|
185499
|
+
title: "Recording verify guards",
|
|
185500
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
185501
|
+
type: "object",
|
|
185502
|
+
additionalProperties: false,
|
|
185503
|
+
properties: {
|
|
185504
|
+
minDuration: {
|
|
185505
|
+
type: "number",
|
|
185506
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
185507
|
+
minimum: 0
|
|
185508
|
+
},
|
|
185509
|
+
maxDuration: {
|
|
185510
|
+
type: "number",
|
|
185511
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
185512
|
+
minimum: 0
|
|
185513
|
+
},
|
|
185514
|
+
resolution: {
|
|
185515
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
185516
|
+
anyOf: [
|
|
185517
|
+
{
|
|
185518
|
+
type: "boolean",
|
|
185519
|
+
title: "Verify resolution (boolean)"
|
|
185520
|
+
},
|
|
185521
|
+
{
|
|
185522
|
+
type: "object",
|
|
185523
|
+
title: "Verify resolution (detailed)",
|
|
185524
|
+
additionalProperties: false,
|
|
185525
|
+
required: [
|
|
185526
|
+
"width",
|
|
185527
|
+
"height"
|
|
185528
|
+
],
|
|
185529
|
+
properties: {
|
|
185530
|
+
width: {
|
|
185531
|
+
type: "integer",
|
|
185532
|
+
minimum: 1
|
|
185533
|
+
},
|
|
185534
|
+
height: {
|
|
185535
|
+
type: "integer",
|
|
185536
|
+
minimum: 1
|
|
185537
|
+
}
|
|
185538
|
+
}
|
|
185539
|
+
}
|
|
185540
|
+
]
|
|
185541
|
+
},
|
|
185542
|
+
notBlack: {
|
|
185543
|
+
type: "boolean",
|
|
185544
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
185545
|
+
}
|
|
185546
|
+
}
|
|
185547
|
+
},
|
|
185098
185548
|
checkpoints: {
|
|
185099
185549
|
title: "Recording checkpoints",
|
|
185100
185550
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -185450,6 +185900,56 @@ var init_schemas = __esm({
|
|
|
185450
185900
|
}
|
|
185451
185901
|
]
|
|
185452
185902
|
},
|
|
185903
|
+
verify: {
|
|
185904
|
+
title: "Recording verify guards",
|
|
185905
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
185906
|
+
type: "object",
|
|
185907
|
+
additionalProperties: false,
|
|
185908
|
+
properties: {
|
|
185909
|
+
minDuration: {
|
|
185910
|
+
type: "number",
|
|
185911
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
185912
|
+
minimum: 0
|
|
185913
|
+
},
|
|
185914
|
+
maxDuration: {
|
|
185915
|
+
type: "number",
|
|
185916
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
185917
|
+
minimum: 0
|
|
185918
|
+
},
|
|
185919
|
+
resolution: {
|
|
185920
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
185921
|
+
anyOf: [
|
|
185922
|
+
{
|
|
185923
|
+
type: "boolean",
|
|
185924
|
+
title: "Verify resolution (boolean)"
|
|
185925
|
+
},
|
|
185926
|
+
{
|
|
185927
|
+
type: "object",
|
|
185928
|
+
title: "Verify resolution (detailed)",
|
|
185929
|
+
additionalProperties: false,
|
|
185930
|
+
required: [
|
|
185931
|
+
"width",
|
|
185932
|
+
"height"
|
|
185933
|
+
],
|
|
185934
|
+
properties: {
|
|
185935
|
+
width: {
|
|
185936
|
+
type: "integer",
|
|
185937
|
+
minimum: 1
|
|
185938
|
+
},
|
|
185939
|
+
height: {
|
|
185940
|
+
type: "integer",
|
|
185941
|
+
minimum: 1
|
|
185942
|
+
}
|
|
185943
|
+
}
|
|
185944
|
+
}
|
|
185945
|
+
]
|
|
185946
|
+
},
|
|
185947
|
+
notBlack: {
|
|
185948
|
+
type: "boolean",
|
|
185949
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
185950
|
+
}
|
|
185951
|
+
}
|
|
185952
|
+
},
|
|
185453
185953
|
checkpoints: {
|
|
185454
185954
|
title: "Recording checkpoints",
|
|
185455
185955
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -232556,6 +233056,56 @@ var init_schemas = __esm({
|
|
|
232556
233056
|
}
|
|
232557
233057
|
]
|
|
232558
233058
|
},
|
|
233059
|
+
verify: {
|
|
233060
|
+
title: "Recording verify guards",
|
|
233061
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
233062
|
+
type: "object",
|
|
233063
|
+
additionalProperties: false,
|
|
233064
|
+
properties: {
|
|
233065
|
+
minDuration: {
|
|
233066
|
+
type: "number",
|
|
233067
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
233068
|
+
minimum: 0
|
|
233069
|
+
},
|
|
233070
|
+
maxDuration: {
|
|
233071
|
+
type: "number",
|
|
233072
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
233073
|
+
minimum: 0
|
|
233074
|
+
},
|
|
233075
|
+
resolution: {
|
|
233076
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
233077
|
+
anyOf: [
|
|
233078
|
+
{
|
|
233079
|
+
type: "boolean",
|
|
233080
|
+
title: "Verify resolution (boolean)"
|
|
233081
|
+
},
|
|
233082
|
+
{
|
|
233083
|
+
type: "object",
|
|
233084
|
+
title: "Verify resolution (detailed)",
|
|
233085
|
+
additionalProperties: false,
|
|
233086
|
+
required: [
|
|
233087
|
+
"width",
|
|
233088
|
+
"height"
|
|
233089
|
+
],
|
|
233090
|
+
properties: {
|
|
233091
|
+
width: {
|
|
233092
|
+
type: "integer",
|
|
233093
|
+
minimum: 1
|
|
233094
|
+
},
|
|
233095
|
+
height: {
|
|
233096
|
+
type: "integer",
|
|
233097
|
+
minimum: 1
|
|
233098
|
+
}
|
|
233099
|
+
}
|
|
233100
|
+
}
|
|
233101
|
+
]
|
|
233102
|
+
},
|
|
233103
|
+
notBlack: {
|
|
233104
|
+
type: "boolean",
|
|
233105
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
233106
|
+
}
|
|
233107
|
+
}
|
|
233108
|
+
},
|
|
232559
233109
|
checkpoints: {
|
|
232560
233110
|
title: "Recording checkpoints",
|
|
232561
233111
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -232911,6 +233461,56 @@ var init_schemas = __esm({
|
|
|
232911
233461
|
}
|
|
232912
233462
|
]
|
|
232913
233463
|
},
|
|
233464
|
+
verify: {
|
|
233465
|
+
title: "Recording verify guards",
|
|
233466
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
233467
|
+
type: "object",
|
|
233468
|
+
additionalProperties: false,
|
|
233469
|
+
properties: {
|
|
233470
|
+
minDuration: {
|
|
233471
|
+
type: "number",
|
|
233472
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
233473
|
+
minimum: 0
|
|
233474
|
+
},
|
|
233475
|
+
maxDuration: {
|
|
233476
|
+
type: "number",
|
|
233477
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
233478
|
+
minimum: 0
|
|
233479
|
+
},
|
|
233480
|
+
resolution: {
|
|
233481
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
233482
|
+
anyOf: [
|
|
233483
|
+
{
|
|
233484
|
+
type: "boolean",
|
|
233485
|
+
title: "Verify resolution (boolean)"
|
|
233486
|
+
},
|
|
233487
|
+
{
|
|
233488
|
+
type: "object",
|
|
233489
|
+
title: "Verify resolution (detailed)",
|
|
233490
|
+
additionalProperties: false,
|
|
233491
|
+
required: [
|
|
233492
|
+
"width",
|
|
233493
|
+
"height"
|
|
233494
|
+
],
|
|
233495
|
+
properties: {
|
|
233496
|
+
width: {
|
|
233497
|
+
type: "integer",
|
|
233498
|
+
minimum: 1
|
|
233499
|
+
},
|
|
233500
|
+
height: {
|
|
233501
|
+
type: "integer",
|
|
233502
|
+
minimum: 1
|
|
233503
|
+
}
|
|
233504
|
+
}
|
|
233505
|
+
}
|
|
233506
|
+
]
|
|
233507
|
+
},
|
|
233508
|
+
notBlack: {
|
|
233509
|
+
type: "boolean",
|
|
233510
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
233511
|
+
}
|
|
233512
|
+
}
|
|
233513
|
+
},
|
|
232914
233514
|
checkpoints: {
|
|
232915
233515
|
title: "Recording checkpoints",
|
|
232916
233516
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -277540,6 +278140,56 @@ var init_schemas = __esm({
|
|
|
277540
278140
|
}
|
|
277541
278141
|
]
|
|
277542
278142
|
},
|
|
278143
|
+
verify: {
|
|
278144
|
+
title: "Recording verify guards",
|
|
278145
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
278146
|
+
type: "object",
|
|
278147
|
+
additionalProperties: false,
|
|
278148
|
+
properties: {
|
|
278149
|
+
minDuration: {
|
|
278150
|
+
type: "number",
|
|
278151
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
278152
|
+
minimum: 0
|
|
278153
|
+
},
|
|
278154
|
+
maxDuration: {
|
|
278155
|
+
type: "number",
|
|
278156
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
278157
|
+
minimum: 0
|
|
278158
|
+
},
|
|
278159
|
+
resolution: {
|
|
278160
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
278161
|
+
anyOf: [
|
|
278162
|
+
{
|
|
278163
|
+
type: "boolean",
|
|
278164
|
+
title: "Verify resolution (boolean)"
|
|
278165
|
+
},
|
|
278166
|
+
{
|
|
278167
|
+
type: "object",
|
|
278168
|
+
title: "Verify resolution (detailed)",
|
|
278169
|
+
additionalProperties: false,
|
|
278170
|
+
required: [
|
|
278171
|
+
"width",
|
|
278172
|
+
"height"
|
|
278173
|
+
],
|
|
278174
|
+
properties: {
|
|
278175
|
+
width: {
|
|
278176
|
+
type: "integer",
|
|
278177
|
+
minimum: 1
|
|
278178
|
+
},
|
|
278179
|
+
height: {
|
|
278180
|
+
type: "integer",
|
|
278181
|
+
minimum: 1
|
|
278182
|
+
}
|
|
278183
|
+
}
|
|
278184
|
+
}
|
|
278185
|
+
]
|
|
278186
|
+
},
|
|
278187
|
+
notBlack: {
|
|
278188
|
+
type: "boolean",
|
|
278189
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
278190
|
+
}
|
|
278191
|
+
}
|
|
278192
|
+
},
|
|
277543
278193
|
checkpoints: {
|
|
277544
278194
|
title: "Recording checkpoints",
|
|
277545
278195
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -277895,6 +278545,56 @@ var init_schemas = __esm({
|
|
|
277895
278545
|
}
|
|
277896
278546
|
]
|
|
277897
278547
|
},
|
|
278548
|
+
verify: {
|
|
278549
|
+
title: "Recording verify guards",
|
|
278550
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
278551
|
+
type: "object",
|
|
278552
|
+
additionalProperties: false,
|
|
278553
|
+
properties: {
|
|
278554
|
+
minDuration: {
|
|
278555
|
+
type: "number",
|
|
278556
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
278557
|
+
minimum: 0
|
|
278558
|
+
},
|
|
278559
|
+
maxDuration: {
|
|
278560
|
+
type: "number",
|
|
278561
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
278562
|
+
minimum: 0
|
|
278563
|
+
},
|
|
278564
|
+
resolution: {
|
|
278565
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
278566
|
+
anyOf: [
|
|
278567
|
+
{
|
|
278568
|
+
type: "boolean",
|
|
278569
|
+
title: "Verify resolution (boolean)"
|
|
278570
|
+
},
|
|
278571
|
+
{
|
|
278572
|
+
type: "object",
|
|
278573
|
+
title: "Verify resolution (detailed)",
|
|
278574
|
+
additionalProperties: false,
|
|
278575
|
+
required: [
|
|
278576
|
+
"width",
|
|
278577
|
+
"height"
|
|
278578
|
+
],
|
|
278579
|
+
properties: {
|
|
278580
|
+
width: {
|
|
278581
|
+
type: "integer",
|
|
278582
|
+
minimum: 1
|
|
278583
|
+
},
|
|
278584
|
+
height: {
|
|
278585
|
+
type: "integer",
|
|
278586
|
+
minimum: 1
|
|
278587
|
+
}
|
|
278588
|
+
}
|
|
278589
|
+
}
|
|
278590
|
+
]
|
|
278591
|
+
},
|
|
278592
|
+
notBlack: {
|
|
278593
|
+
type: "boolean",
|
|
278594
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
278595
|
+
}
|
|
278596
|
+
}
|
|
278597
|
+
},
|
|
277898
278598
|
checkpoints: {
|
|
277899
278599
|
title: "Recording checkpoints",
|
|
277900
278600
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -325485,6 +326185,56 @@ var init_schemas = __esm({
|
|
|
325485
326185
|
}
|
|
325486
326186
|
]
|
|
325487
326187
|
},
|
|
326188
|
+
verify: {
|
|
326189
|
+
title: "Recording verify guards",
|
|
326190
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
326191
|
+
type: "object",
|
|
326192
|
+
additionalProperties: false,
|
|
326193
|
+
properties: {
|
|
326194
|
+
minDuration: {
|
|
326195
|
+
type: "number",
|
|
326196
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
326197
|
+
minimum: 0
|
|
326198
|
+
},
|
|
326199
|
+
maxDuration: {
|
|
326200
|
+
type: "number",
|
|
326201
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
326202
|
+
minimum: 0
|
|
326203
|
+
},
|
|
326204
|
+
resolution: {
|
|
326205
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
326206
|
+
anyOf: [
|
|
326207
|
+
{
|
|
326208
|
+
type: "boolean",
|
|
326209
|
+
title: "Verify resolution (boolean)"
|
|
326210
|
+
},
|
|
326211
|
+
{
|
|
326212
|
+
type: "object",
|
|
326213
|
+
title: "Verify resolution (detailed)",
|
|
326214
|
+
additionalProperties: false,
|
|
326215
|
+
required: [
|
|
326216
|
+
"width",
|
|
326217
|
+
"height"
|
|
326218
|
+
],
|
|
326219
|
+
properties: {
|
|
326220
|
+
width: {
|
|
326221
|
+
type: "integer",
|
|
326222
|
+
minimum: 1
|
|
326223
|
+
},
|
|
326224
|
+
height: {
|
|
326225
|
+
type: "integer",
|
|
326226
|
+
minimum: 1
|
|
326227
|
+
}
|
|
326228
|
+
}
|
|
326229
|
+
}
|
|
326230
|
+
]
|
|
326231
|
+
},
|
|
326232
|
+
notBlack: {
|
|
326233
|
+
type: "boolean",
|
|
326234
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
326235
|
+
}
|
|
326236
|
+
}
|
|
326237
|
+
},
|
|
325488
326238
|
checkpoints: {
|
|
325489
326239
|
title: "Recording checkpoints",
|
|
325490
326240
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -325840,6 +326590,56 @@ var init_schemas = __esm({
|
|
|
325840
326590
|
}
|
|
325841
326591
|
]
|
|
325842
326592
|
},
|
|
326593
|
+
verify: {
|
|
326594
|
+
title: "Recording verify guards",
|
|
326595
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
326596
|
+
type: "object",
|
|
326597
|
+
additionalProperties: false,
|
|
326598
|
+
properties: {
|
|
326599
|
+
minDuration: {
|
|
326600
|
+
type: "number",
|
|
326601
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
326602
|
+
minimum: 0
|
|
326603
|
+
},
|
|
326604
|
+
maxDuration: {
|
|
326605
|
+
type: "number",
|
|
326606
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
326607
|
+
minimum: 0
|
|
326608
|
+
},
|
|
326609
|
+
resolution: {
|
|
326610
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
326611
|
+
anyOf: [
|
|
326612
|
+
{
|
|
326613
|
+
type: "boolean",
|
|
326614
|
+
title: "Verify resolution (boolean)"
|
|
326615
|
+
},
|
|
326616
|
+
{
|
|
326617
|
+
type: "object",
|
|
326618
|
+
title: "Verify resolution (detailed)",
|
|
326619
|
+
additionalProperties: false,
|
|
326620
|
+
required: [
|
|
326621
|
+
"width",
|
|
326622
|
+
"height"
|
|
326623
|
+
],
|
|
326624
|
+
properties: {
|
|
326625
|
+
width: {
|
|
326626
|
+
type: "integer",
|
|
326627
|
+
minimum: 1
|
|
326628
|
+
},
|
|
326629
|
+
height: {
|
|
326630
|
+
type: "integer",
|
|
326631
|
+
minimum: 1
|
|
326632
|
+
}
|
|
326633
|
+
}
|
|
326634
|
+
}
|
|
326635
|
+
]
|
|
326636
|
+
},
|
|
326637
|
+
notBlack: {
|
|
326638
|
+
type: "boolean",
|
|
326639
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
326640
|
+
}
|
|
326641
|
+
}
|
|
326642
|
+
},
|
|
325843
326643
|
checkpoints: {
|
|
325844
326644
|
title: "Recording checkpoints",
|
|
325845
326645
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -370469,6 +371269,56 @@ var init_schemas = __esm({
|
|
|
370469
371269
|
}
|
|
370470
371270
|
]
|
|
370471
371271
|
},
|
|
371272
|
+
verify: {
|
|
371273
|
+
title: "Recording verify guards",
|
|
371274
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
371275
|
+
type: "object",
|
|
371276
|
+
additionalProperties: false,
|
|
371277
|
+
properties: {
|
|
371278
|
+
minDuration: {
|
|
371279
|
+
type: "number",
|
|
371280
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
371281
|
+
minimum: 0
|
|
371282
|
+
},
|
|
371283
|
+
maxDuration: {
|
|
371284
|
+
type: "number",
|
|
371285
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
371286
|
+
minimum: 0
|
|
371287
|
+
},
|
|
371288
|
+
resolution: {
|
|
371289
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
371290
|
+
anyOf: [
|
|
371291
|
+
{
|
|
371292
|
+
type: "boolean",
|
|
371293
|
+
title: "Verify resolution (boolean)"
|
|
371294
|
+
},
|
|
371295
|
+
{
|
|
371296
|
+
type: "object",
|
|
371297
|
+
title: "Verify resolution (detailed)",
|
|
371298
|
+
additionalProperties: false,
|
|
371299
|
+
required: [
|
|
371300
|
+
"width",
|
|
371301
|
+
"height"
|
|
371302
|
+
],
|
|
371303
|
+
properties: {
|
|
371304
|
+
width: {
|
|
371305
|
+
type: "integer",
|
|
371306
|
+
minimum: 1
|
|
371307
|
+
},
|
|
371308
|
+
height: {
|
|
371309
|
+
type: "integer",
|
|
371310
|
+
minimum: 1
|
|
371311
|
+
}
|
|
371312
|
+
}
|
|
371313
|
+
}
|
|
371314
|
+
]
|
|
371315
|
+
},
|
|
371316
|
+
notBlack: {
|
|
371317
|
+
type: "boolean",
|
|
371318
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
371319
|
+
}
|
|
371320
|
+
}
|
|
371321
|
+
},
|
|
370472
371322
|
checkpoints: {
|
|
370473
371323
|
title: "Recording checkpoints",
|
|
370474
371324
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -370824,6 +371674,56 @@ var init_schemas = __esm({
|
|
|
370824
371674
|
}
|
|
370825
371675
|
]
|
|
370826
371676
|
},
|
|
371677
|
+
verify: {
|
|
371678
|
+
title: "Recording verify guards",
|
|
371679
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
371680
|
+
type: "object",
|
|
371681
|
+
additionalProperties: false,
|
|
371682
|
+
properties: {
|
|
371683
|
+
minDuration: {
|
|
371684
|
+
type: "number",
|
|
371685
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
371686
|
+
minimum: 0
|
|
371687
|
+
},
|
|
371688
|
+
maxDuration: {
|
|
371689
|
+
type: "number",
|
|
371690
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
371691
|
+
minimum: 0
|
|
371692
|
+
},
|
|
371693
|
+
resolution: {
|
|
371694
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
371695
|
+
anyOf: [
|
|
371696
|
+
{
|
|
371697
|
+
type: "boolean",
|
|
371698
|
+
title: "Verify resolution (boolean)"
|
|
371699
|
+
},
|
|
371700
|
+
{
|
|
371701
|
+
type: "object",
|
|
371702
|
+
title: "Verify resolution (detailed)",
|
|
371703
|
+
additionalProperties: false,
|
|
371704
|
+
required: [
|
|
371705
|
+
"width",
|
|
371706
|
+
"height"
|
|
371707
|
+
],
|
|
371708
|
+
properties: {
|
|
371709
|
+
width: {
|
|
371710
|
+
type: "integer",
|
|
371711
|
+
minimum: 1
|
|
371712
|
+
},
|
|
371713
|
+
height: {
|
|
371714
|
+
type: "integer",
|
|
371715
|
+
minimum: 1
|
|
371716
|
+
}
|
|
371717
|
+
}
|
|
371718
|
+
}
|
|
371719
|
+
]
|
|
371720
|
+
},
|
|
371721
|
+
notBlack: {
|
|
371722
|
+
type: "boolean",
|
|
371723
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
371724
|
+
}
|
|
371725
|
+
}
|
|
371726
|
+
},
|
|
370827
371727
|
checkpoints: {
|
|
370828
371728
|
title: "Recording checkpoints",
|
|
370829
371729
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -421744,6 +422644,56 @@ var init_schemas = __esm({
|
|
|
421744
422644
|
}
|
|
421745
422645
|
]
|
|
421746
422646
|
},
|
|
422647
|
+
verify: {
|
|
422648
|
+
title: "Recording verify guards",
|
|
422649
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
422650
|
+
type: "object",
|
|
422651
|
+
additionalProperties: false,
|
|
422652
|
+
properties: {
|
|
422653
|
+
minDuration: {
|
|
422654
|
+
type: "number",
|
|
422655
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
422656
|
+
minimum: 0
|
|
422657
|
+
},
|
|
422658
|
+
maxDuration: {
|
|
422659
|
+
type: "number",
|
|
422660
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
422661
|
+
minimum: 0
|
|
422662
|
+
},
|
|
422663
|
+
resolution: {
|
|
422664
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
422665
|
+
anyOf: [
|
|
422666
|
+
{
|
|
422667
|
+
type: "boolean",
|
|
422668
|
+
title: "Verify resolution (boolean)"
|
|
422669
|
+
},
|
|
422670
|
+
{
|
|
422671
|
+
type: "object",
|
|
422672
|
+
title: "Verify resolution (detailed)",
|
|
422673
|
+
additionalProperties: false,
|
|
422674
|
+
required: [
|
|
422675
|
+
"width",
|
|
422676
|
+
"height"
|
|
422677
|
+
],
|
|
422678
|
+
properties: {
|
|
422679
|
+
width: {
|
|
422680
|
+
type: "integer",
|
|
422681
|
+
minimum: 1
|
|
422682
|
+
},
|
|
422683
|
+
height: {
|
|
422684
|
+
type: "integer",
|
|
422685
|
+
minimum: 1
|
|
422686
|
+
}
|
|
422687
|
+
}
|
|
422688
|
+
}
|
|
422689
|
+
]
|
|
422690
|
+
},
|
|
422691
|
+
notBlack: {
|
|
422692
|
+
type: "boolean",
|
|
422693
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
422694
|
+
}
|
|
422695
|
+
}
|
|
422696
|
+
},
|
|
421747
422697
|
checkpoints: {
|
|
421748
422698
|
title: "Recording checkpoints",
|
|
421749
422699
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -422099,6 +423049,56 @@ var init_schemas = __esm({
|
|
|
422099
423049
|
}
|
|
422100
423050
|
]
|
|
422101
423051
|
},
|
|
423052
|
+
verify: {
|
|
423053
|
+
title: "Recording verify guards",
|
|
423054
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
423055
|
+
type: "object",
|
|
423056
|
+
additionalProperties: false,
|
|
423057
|
+
properties: {
|
|
423058
|
+
minDuration: {
|
|
423059
|
+
type: "number",
|
|
423060
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
423061
|
+
minimum: 0
|
|
423062
|
+
},
|
|
423063
|
+
maxDuration: {
|
|
423064
|
+
type: "number",
|
|
423065
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
423066
|
+
minimum: 0
|
|
423067
|
+
},
|
|
423068
|
+
resolution: {
|
|
423069
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
423070
|
+
anyOf: [
|
|
423071
|
+
{
|
|
423072
|
+
type: "boolean",
|
|
423073
|
+
title: "Verify resolution (boolean)"
|
|
423074
|
+
},
|
|
423075
|
+
{
|
|
423076
|
+
type: "object",
|
|
423077
|
+
title: "Verify resolution (detailed)",
|
|
423078
|
+
additionalProperties: false,
|
|
423079
|
+
required: [
|
|
423080
|
+
"width",
|
|
423081
|
+
"height"
|
|
423082
|
+
],
|
|
423083
|
+
properties: {
|
|
423084
|
+
width: {
|
|
423085
|
+
type: "integer",
|
|
423086
|
+
minimum: 1
|
|
423087
|
+
},
|
|
423088
|
+
height: {
|
|
423089
|
+
type: "integer",
|
|
423090
|
+
minimum: 1
|
|
423091
|
+
}
|
|
423092
|
+
}
|
|
423093
|
+
}
|
|
423094
|
+
]
|
|
423095
|
+
},
|
|
423096
|
+
notBlack: {
|
|
423097
|
+
type: "boolean",
|
|
423098
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
423099
|
+
}
|
|
423100
|
+
}
|
|
423101
|
+
},
|
|
422102
423102
|
checkpoints: {
|
|
422103
423103
|
title: "Recording checkpoints",
|
|
422104
423104
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -466728,6 +467728,56 @@ var init_schemas = __esm({
|
|
|
466728
467728
|
}
|
|
466729
467729
|
]
|
|
466730
467730
|
},
|
|
467731
|
+
verify: {
|
|
467732
|
+
title: "Recording verify guards",
|
|
467733
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
467734
|
+
type: "object",
|
|
467735
|
+
additionalProperties: false,
|
|
467736
|
+
properties: {
|
|
467737
|
+
minDuration: {
|
|
467738
|
+
type: "number",
|
|
467739
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
467740
|
+
minimum: 0
|
|
467741
|
+
},
|
|
467742
|
+
maxDuration: {
|
|
467743
|
+
type: "number",
|
|
467744
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
467745
|
+
minimum: 0
|
|
467746
|
+
},
|
|
467747
|
+
resolution: {
|
|
467748
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
467749
|
+
anyOf: [
|
|
467750
|
+
{
|
|
467751
|
+
type: "boolean",
|
|
467752
|
+
title: "Verify resolution (boolean)"
|
|
467753
|
+
},
|
|
467754
|
+
{
|
|
467755
|
+
type: "object",
|
|
467756
|
+
title: "Verify resolution (detailed)",
|
|
467757
|
+
additionalProperties: false,
|
|
467758
|
+
required: [
|
|
467759
|
+
"width",
|
|
467760
|
+
"height"
|
|
467761
|
+
],
|
|
467762
|
+
properties: {
|
|
467763
|
+
width: {
|
|
467764
|
+
type: "integer",
|
|
467765
|
+
minimum: 1
|
|
467766
|
+
},
|
|
467767
|
+
height: {
|
|
467768
|
+
type: "integer",
|
|
467769
|
+
minimum: 1
|
|
467770
|
+
}
|
|
467771
|
+
}
|
|
467772
|
+
}
|
|
467773
|
+
]
|
|
467774
|
+
},
|
|
467775
|
+
notBlack: {
|
|
467776
|
+
type: "boolean",
|
|
467777
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
467778
|
+
}
|
|
467779
|
+
}
|
|
467780
|
+
},
|
|
466731
467781
|
checkpoints: {
|
|
466732
467782
|
title: "Recording checkpoints",
|
|
466733
467783
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -467083,6 +468133,56 @@ var init_schemas = __esm({
|
|
|
467083
468133
|
}
|
|
467084
468134
|
]
|
|
467085
468135
|
},
|
|
468136
|
+
verify: {
|
|
468137
|
+
title: "Recording verify guards",
|
|
468138
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
468139
|
+
type: "object",
|
|
468140
|
+
additionalProperties: false,
|
|
468141
|
+
properties: {
|
|
468142
|
+
minDuration: {
|
|
468143
|
+
type: "number",
|
|
468144
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
468145
|
+
minimum: 0
|
|
468146
|
+
},
|
|
468147
|
+
maxDuration: {
|
|
468148
|
+
type: "number",
|
|
468149
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
468150
|
+
minimum: 0
|
|
468151
|
+
},
|
|
468152
|
+
resolution: {
|
|
468153
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
468154
|
+
anyOf: [
|
|
468155
|
+
{
|
|
468156
|
+
type: "boolean",
|
|
468157
|
+
title: "Verify resolution (boolean)"
|
|
468158
|
+
},
|
|
468159
|
+
{
|
|
468160
|
+
type: "object",
|
|
468161
|
+
title: "Verify resolution (detailed)",
|
|
468162
|
+
additionalProperties: false,
|
|
468163
|
+
required: [
|
|
468164
|
+
"width",
|
|
468165
|
+
"height"
|
|
468166
|
+
],
|
|
468167
|
+
properties: {
|
|
468168
|
+
width: {
|
|
468169
|
+
type: "integer",
|
|
468170
|
+
minimum: 1
|
|
468171
|
+
},
|
|
468172
|
+
height: {
|
|
468173
|
+
type: "integer",
|
|
468174
|
+
minimum: 1
|
|
468175
|
+
}
|
|
468176
|
+
}
|
|
468177
|
+
}
|
|
468178
|
+
]
|
|
468179
|
+
},
|
|
468180
|
+
notBlack: {
|
|
468181
|
+
type: "boolean",
|
|
468182
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
468183
|
+
}
|
|
468184
|
+
}
|
|
468185
|
+
},
|
|
467086
468186
|
checkpoints: {
|
|
467087
468187
|
title: "Recording checkpoints",
|
|
467088
468188
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -513404,6 +514504,56 @@ var init_schemas = __esm({
|
|
|
513404
514504
|
}
|
|
513405
514505
|
]
|
|
513406
514506
|
},
|
|
514507
|
+
verify: {
|
|
514508
|
+
title: "Recording verify guards",
|
|
514509
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
514510
|
+
type: "object",
|
|
514511
|
+
additionalProperties: false,
|
|
514512
|
+
properties: {
|
|
514513
|
+
minDuration: {
|
|
514514
|
+
type: "number",
|
|
514515
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
514516
|
+
minimum: 0
|
|
514517
|
+
},
|
|
514518
|
+
maxDuration: {
|
|
514519
|
+
type: "number",
|
|
514520
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
514521
|
+
minimum: 0
|
|
514522
|
+
},
|
|
514523
|
+
resolution: {
|
|
514524
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
514525
|
+
anyOf: [
|
|
514526
|
+
{
|
|
514527
|
+
type: "boolean",
|
|
514528
|
+
title: "Verify resolution (boolean)"
|
|
514529
|
+
},
|
|
514530
|
+
{
|
|
514531
|
+
type: "object",
|
|
514532
|
+
title: "Verify resolution (detailed)",
|
|
514533
|
+
additionalProperties: false,
|
|
514534
|
+
required: [
|
|
514535
|
+
"width",
|
|
514536
|
+
"height"
|
|
514537
|
+
],
|
|
514538
|
+
properties: {
|
|
514539
|
+
width: {
|
|
514540
|
+
type: "integer",
|
|
514541
|
+
minimum: 1
|
|
514542
|
+
},
|
|
514543
|
+
height: {
|
|
514544
|
+
type: "integer",
|
|
514545
|
+
minimum: 1
|
|
514546
|
+
}
|
|
514547
|
+
}
|
|
514548
|
+
}
|
|
514549
|
+
]
|
|
514550
|
+
},
|
|
514551
|
+
notBlack: {
|
|
514552
|
+
type: "boolean",
|
|
514553
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
514554
|
+
}
|
|
514555
|
+
}
|
|
514556
|
+
},
|
|
513407
514557
|
checkpoints: {
|
|
513408
514558
|
title: "Recording checkpoints",
|
|
513409
514559
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -513759,6 +514909,56 @@ var init_schemas = __esm({
|
|
|
513759
514909
|
}
|
|
513760
514910
|
]
|
|
513761
514911
|
},
|
|
514912
|
+
verify: {
|
|
514913
|
+
title: "Recording verify guards",
|
|
514914
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
514915
|
+
type: "object",
|
|
514916
|
+
additionalProperties: false,
|
|
514917
|
+
properties: {
|
|
514918
|
+
minDuration: {
|
|
514919
|
+
type: "number",
|
|
514920
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
514921
|
+
minimum: 0
|
|
514922
|
+
},
|
|
514923
|
+
maxDuration: {
|
|
514924
|
+
type: "number",
|
|
514925
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
514926
|
+
minimum: 0
|
|
514927
|
+
},
|
|
514928
|
+
resolution: {
|
|
514929
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
514930
|
+
anyOf: [
|
|
514931
|
+
{
|
|
514932
|
+
type: "boolean",
|
|
514933
|
+
title: "Verify resolution (boolean)"
|
|
514934
|
+
},
|
|
514935
|
+
{
|
|
514936
|
+
type: "object",
|
|
514937
|
+
title: "Verify resolution (detailed)",
|
|
514938
|
+
additionalProperties: false,
|
|
514939
|
+
required: [
|
|
514940
|
+
"width",
|
|
514941
|
+
"height"
|
|
514942
|
+
],
|
|
514943
|
+
properties: {
|
|
514944
|
+
width: {
|
|
514945
|
+
type: "integer",
|
|
514946
|
+
minimum: 1
|
|
514947
|
+
},
|
|
514948
|
+
height: {
|
|
514949
|
+
type: "integer",
|
|
514950
|
+
minimum: 1
|
|
514951
|
+
}
|
|
514952
|
+
}
|
|
514953
|
+
}
|
|
514954
|
+
]
|
|
514955
|
+
},
|
|
514956
|
+
notBlack: {
|
|
514957
|
+
type: "boolean",
|
|
514958
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
514959
|
+
}
|
|
514960
|
+
}
|
|
514961
|
+
},
|
|
513762
514962
|
checkpoints: {
|
|
513763
514963
|
title: "Recording checkpoints",
|
|
513764
514964
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -561733,6 +562933,56 @@ var init_schemas = __esm({
|
|
|
561733
562933
|
}
|
|
561734
562934
|
]
|
|
561735
562935
|
},
|
|
562936
|
+
verify: {
|
|
562937
|
+
title: "Recording verify guards",
|
|
562938
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
562939
|
+
type: "object",
|
|
562940
|
+
additionalProperties: false,
|
|
562941
|
+
properties: {
|
|
562942
|
+
minDuration: {
|
|
562943
|
+
type: "number",
|
|
562944
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
562945
|
+
minimum: 0
|
|
562946
|
+
},
|
|
562947
|
+
maxDuration: {
|
|
562948
|
+
type: "number",
|
|
562949
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
562950
|
+
minimum: 0
|
|
562951
|
+
},
|
|
562952
|
+
resolution: {
|
|
562953
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
562954
|
+
anyOf: [
|
|
562955
|
+
{
|
|
562956
|
+
type: "boolean",
|
|
562957
|
+
title: "Verify resolution (boolean)"
|
|
562958
|
+
},
|
|
562959
|
+
{
|
|
562960
|
+
type: "object",
|
|
562961
|
+
title: "Verify resolution (detailed)",
|
|
562962
|
+
additionalProperties: false,
|
|
562963
|
+
required: [
|
|
562964
|
+
"width",
|
|
562965
|
+
"height"
|
|
562966
|
+
],
|
|
562967
|
+
properties: {
|
|
562968
|
+
width: {
|
|
562969
|
+
type: "integer",
|
|
562970
|
+
minimum: 1
|
|
562971
|
+
},
|
|
562972
|
+
height: {
|
|
562973
|
+
type: "integer",
|
|
562974
|
+
minimum: 1
|
|
562975
|
+
}
|
|
562976
|
+
}
|
|
562977
|
+
}
|
|
562978
|
+
]
|
|
562979
|
+
},
|
|
562980
|
+
notBlack: {
|
|
562981
|
+
type: "boolean",
|
|
562982
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
562983
|
+
}
|
|
562984
|
+
}
|
|
562985
|
+
},
|
|
561736
562986
|
checkpoints: {
|
|
561737
562987
|
title: "Recording checkpoints",
|
|
561738
562988
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -562088,6 +563338,56 @@ var init_schemas = __esm({
|
|
|
562088
563338
|
}
|
|
562089
563339
|
]
|
|
562090
563340
|
},
|
|
563341
|
+
verify: {
|
|
563342
|
+
title: "Recording verify guards",
|
|
563343
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
563344
|
+
type: "object",
|
|
563345
|
+
additionalProperties: false,
|
|
563346
|
+
properties: {
|
|
563347
|
+
minDuration: {
|
|
563348
|
+
type: "number",
|
|
563349
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
563350
|
+
minimum: 0
|
|
563351
|
+
},
|
|
563352
|
+
maxDuration: {
|
|
563353
|
+
type: "number",
|
|
563354
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
563355
|
+
minimum: 0
|
|
563356
|
+
},
|
|
563357
|
+
resolution: {
|
|
563358
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
563359
|
+
anyOf: [
|
|
563360
|
+
{
|
|
563361
|
+
type: "boolean",
|
|
563362
|
+
title: "Verify resolution (boolean)"
|
|
563363
|
+
},
|
|
563364
|
+
{
|
|
563365
|
+
type: "object",
|
|
563366
|
+
title: "Verify resolution (detailed)",
|
|
563367
|
+
additionalProperties: false,
|
|
563368
|
+
required: [
|
|
563369
|
+
"width",
|
|
563370
|
+
"height"
|
|
563371
|
+
],
|
|
563372
|
+
properties: {
|
|
563373
|
+
width: {
|
|
563374
|
+
type: "integer",
|
|
563375
|
+
minimum: 1
|
|
563376
|
+
},
|
|
563377
|
+
height: {
|
|
563378
|
+
type: "integer",
|
|
563379
|
+
minimum: 1
|
|
563380
|
+
}
|
|
563381
|
+
}
|
|
563382
|
+
}
|
|
563383
|
+
]
|
|
563384
|
+
},
|
|
563385
|
+
notBlack: {
|
|
563386
|
+
type: "boolean",
|
|
563387
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
563388
|
+
}
|
|
563389
|
+
}
|
|
563390
|
+
},
|
|
562091
563391
|
checkpoints: {
|
|
562092
563392
|
title: "Recording checkpoints",
|
|
562093
563393
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -606717,6 +608017,56 @@ var init_schemas = __esm({
|
|
|
606717
608017
|
}
|
|
606718
608018
|
]
|
|
606719
608019
|
},
|
|
608020
|
+
verify: {
|
|
608021
|
+
title: "Recording verify guards",
|
|
608022
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
608023
|
+
type: "object",
|
|
608024
|
+
additionalProperties: false,
|
|
608025
|
+
properties: {
|
|
608026
|
+
minDuration: {
|
|
608027
|
+
type: "number",
|
|
608028
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
608029
|
+
minimum: 0
|
|
608030
|
+
},
|
|
608031
|
+
maxDuration: {
|
|
608032
|
+
type: "number",
|
|
608033
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
608034
|
+
minimum: 0
|
|
608035
|
+
},
|
|
608036
|
+
resolution: {
|
|
608037
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
608038
|
+
anyOf: [
|
|
608039
|
+
{
|
|
608040
|
+
type: "boolean",
|
|
608041
|
+
title: "Verify resolution (boolean)"
|
|
608042
|
+
},
|
|
608043
|
+
{
|
|
608044
|
+
type: "object",
|
|
608045
|
+
title: "Verify resolution (detailed)",
|
|
608046
|
+
additionalProperties: false,
|
|
608047
|
+
required: [
|
|
608048
|
+
"width",
|
|
608049
|
+
"height"
|
|
608050
|
+
],
|
|
608051
|
+
properties: {
|
|
608052
|
+
width: {
|
|
608053
|
+
type: "integer",
|
|
608054
|
+
minimum: 1
|
|
608055
|
+
},
|
|
608056
|
+
height: {
|
|
608057
|
+
type: "integer",
|
|
608058
|
+
minimum: 1
|
|
608059
|
+
}
|
|
608060
|
+
}
|
|
608061
|
+
}
|
|
608062
|
+
]
|
|
608063
|
+
},
|
|
608064
|
+
notBlack: {
|
|
608065
|
+
type: "boolean",
|
|
608066
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
608067
|
+
}
|
|
608068
|
+
}
|
|
608069
|
+
},
|
|
606720
608070
|
checkpoints: {
|
|
606721
608071
|
title: "Recording checkpoints",
|
|
606722
608072
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -607072,6 +608422,56 @@ var init_schemas = __esm({
|
|
|
607072
608422
|
}
|
|
607073
608423
|
]
|
|
607074
608424
|
},
|
|
608425
|
+
verify: {
|
|
608426
|
+
title: "Recording verify guards",
|
|
608427
|
+
description: "Structural assertions on the produced video file, evaluated when the recording stops. Unlike checkpoint drift (a WARNING), a violated guard FAILs the stopRecord step \u2014 these are properties you explicitly demand of the artifact.",
|
|
608428
|
+
type: "object",
|
|
608429
|
+
additionalProperties: false,
|
|
608430
|
+
properties: {
|
|
608431
|
+
minDuration: {
|
|
608432
|
+
type: "number",
|
|
608433
|
+
description: "Fail if the video is shorter than this many seconds.",
|
|
608434
|
+
minimum: 0
|
|
608435
|
+
},
|
|
608436
|
+
maxDuration: {
|
|
608437
|
+
type: "number",
|
|
608438
|
+
description: "Fail if the video is longer than this many seconds.",
|
|
608439
|
+
minimum: 0
|
|
608440
|
+
},
|
|
608441
|
+
resolution: {
|
|
608442
|
+
description: "Verify the video's dimensions (\xB12 pixels \u2014 encoders round to even dimensions). `true` compares against the capture plan's resolved expectation (the crop rectangle when a window/viewport crop applied, else the capture frame size; skipped when no expectation exists for the engine). An object compares literal dimensions.",
|
|
608443
|
+
anyOf: [
|
|
608444
|
+
{
|
|
608445
|
+
type: "boolean",
|
|
608446
|
+
title: "Verify resolution (boolean)"
|
|
608447
|
+
},
|
|
608448
|
+
{
|
|
608449
|
+
type: "object",
|
|
608450
|
+
title: "Verify resolution (detailed)",
|
|
608451
|
+
additionalProperties: false,
|
|
608452
|
+
required: [
|
|
608453
|
+
"width",
|
|
608454
|
+
"height"
|
|
608455
|
+
],
|
|
608456
|
+
properties: {
|
|
608457
|
+
width: {
|
|
608458
|
+
type: "integer",
|
|
608459
|
+
minimum: 1
|
|
608460
|
+
},
|
|
608461
|
+
height: {
|
|
608462
|
+
type: "integer",
|
|
608463
|
+
minimum: 1
|
|
608464
|
+
}
|
|
608465
|
+
}
|
|
608466
|
+
}
|
|
608467
|
+
]
|
|
608468
|
+
},
|
|
608469
|
+
notBlack: {
|
|
608470
|
+
type: "boolean",
|
|
608471
|
+
description: "Fail if the video is essentially all black (black frames cover 95% or more of its duration) \u2014 the classic symptom of a broken screen capture."
|
|
608472
|
+
}
|
|
608473
|
+
}
|
|
608474
|
+
},
|
|
607075
608475
|
checkpoints: {
|
|
607076
608476
|
title: "Recording checkpoints",
|
|
607077
608477
|
description: "Capture a checkpoint screenshot after every step while this recording is active and compare each against a persistent baseline stored beside the recording (`<path>.checkpoints/` by default). Baselines seed on the first run; on later runs, per-checkpoint variation is reported in the `stopRecord` step's outputs, and variation beyond `maxVariation` surfaces as a WARNING. If `false` or unset, no checkpoints are captured.",
|
|
@@ -644688,6 +646088,93 @@ async function probeVideoMetadata({ cacheDir, filePath }) {
|
|
|
644688
646088
|
return null;
|
|
644689
646089
|
}
|
|
644690
646090
|
}
|
|
646091
|
+
function createMatchingLineCollector(needle, limit = 65536) {
|
|
646092
|
+
let partial = "";
|
|
646093
|
+
let collected = "";
|
|
646094
|
+
const keep = (lines) => {
|
|
646095
|
+
for (const line of lines) {
|
|
646096
|
+
if (line.includes(needle) && collected.length < limit) {
|
|
646097
|
+
collected = (collected + line + "\n").slice(0, limit);
|
|
646098
|
+
}
|
|
646099
|
+
}
|
|
646100
|
+
};
|
|
646101
|
+
return {
|
|
646102
|
+
push(text) {
|
|
646103
|
+
partial += text;
|
|
646104
|
+
const lines = partial.split(/\r?\n/);
|
|
646105
|
+
partial = lines.pop() ?? "";
|
|
646106
|
+
keep(lines);
|
|
646107
|
+
},
|
|
646108
|
+
flush() {
|
|
646109
|
+
if (partial) {
|
|
646110
|
+
keep([partial]);
|
|
646111
|
+
partial = "";
|
|
646112
|
+
}
|
|
646113
|
+
return collected;
|
|
646114
|
+
}
|
|
646115
|
+
};
|
|
646116
|
+
}
|
|
646117
|
+
function parseBlackdetect(stderr, duration, fps) {
|
|
646118
|
+
if (typeof duration !== "number" || !(duration > 0))
|
|
646119
|
+
return false;
|
|
646120
|
+
let covered = 0;
|
|
646121
|
+
const re = /black_duration:([\d.]+)/g;
|
|
646122
|
+
let m;
|
|
646123
|
+
while ((m = re.exec(stderr ?? "")) !== null) {
|
|
646124
|
+
const d = Number(m[1]);
|
|
646125
|
+
if (Number.isFinite(d))
|
|
646126
|
+
covered += d;
|
|
646127
|
+
}
|
|
646128
|
+
const frameInterval = typeof fps === "number" && fps > 0 ? 1 / fps : 0;
|
|
646129
|
+
return covered >= (duration - frameInterval) * 0.95;
|
|
646130
|
+
}
|
|
646131
|
+
async function detectAllBlack({ cacheDir, filePath, duration, fps }) {
|
|
646132
|
+
try {
|
|
646133
|
+
const ffmpegPath = await getFfmpegPath({ cacheDir, autoInstall: false });
|
|
646134
|
+
const stderr = await new Promise((resolve) => {
|
|
646135
|
+
let settled = false;
|
|
646136
|
+
let proc = null;
|
|
646137
|
+
let timer;
|
|
646138
|
+
const done = (v) => {
|
|
646139
|
+
if (settled)
|
|
646140
|
+
return;
|
|
646141
|
+
settled = true;
|
|
646142
|
+
if (timer)
|
|
646143
|
+
clearTimeout(timer);
|
|
646144
|
+
try {
|
|
646145
|
+
proc?.kill();
|
|
646146
|
+
} catch {
|
|
646147
|
+
}
|
|
646148
|
+
resolve(v);
|
|
646149
|
+
};
|
|
646150
|
+
try {
|
|
646151
|
+
proc = (0, import_node_child_process11.spawn)(ffmpegPath, [
|
|
646152
|
+
"-hide_banner",
|
|
646153
|
+
"-i",
|
|
646154
|
+
filePath,
|
|
646155
|
+
"-vf",
|
|
646156
|
+
"blackdetect=d=0.1:pix_th=0.10",
|
|
646157
|
+
"-an",
|
|
646158
|
+
"-f",
|
|
646159
|
+
"null",
|
|
646160
|
+
"-"
|
|
646161
|
+
], { stdio: ["ignore", "ignore", "pipe"] });
|
|
646162
|
+
const lines = createMatchingLineCollector("black_");
|
|
646163
|
+
proc.stderr?.on("data", (chunk) => lines.push(chunk.toString()));
|
|
646164
|
+
proc.on("error", () => done(null));
|
|
646165
|
+
proc.on("close", (code) => done(code === 0 ? lines.flush() : null));
|
|
646166
|
+
timer = setTimeout(() => done(null), 3e4);
|
|
646167
|
+
} catch {
|
|
646168
|
+
done(null);
|
|
646169
|
+
}
|
|
646170
|
+
});
|
|
646171
|
+
if (stderr === null)
|
|
646172
|
+
return null;
|
|
646173
|
+
return parseBlackdetect(stderr, duration, fps);
|
|
646174
|
+
} catch {
|
|
646175
|
+
return null;
|
|
646176
|
+
}
|
|
646177
|
+
}
|
|
644691
646178
|
function deriveCropScale({ platform, frameSize, displayPointSize }) {
|
|
644692
646179
|
if (platform !== "darwin")
|
|
644693
646180
|
return 1;
|
|
@@ -648716,6 +650203,7 @@ async function stopRecording({ config, step, driver, deps = {} }) {
|
|
|
648716
650203
|
result.description = "The device recording never started (no app surface opened a device session), so there is nothing to save.";
|
|
648717
650204
|
return result;
|
|
648718
650205
|
}
|
|
650206
|
+
let appliedCrop = null;
|
|
648719
650207
|
const isAboveVariation = recording.overwrite === "aboveVariation";
|
|
648720
650208
|
const finalTargetPath = recording.targetPath;
|
|
648721
650209
|
const writeTargetPath = isAboveVariation ? import_node_path20.default.join(import_node_path20.default.dirname(finalTargetPath), `.${import_node_path20.default.basename(finalTargetPath, import_node_path20.default.extname(finalTargetPath))}.staging${import_node_path20.default.extname(finalTargetPath)}`) : finalTargetPath;
|
|
@@ -648826,6 +650314,7 @@ async function stopRecording({ config, step, driver, deps = {} }) {
|
|
|
648826
650314
|
deleteSource: true,
|
|
648827
650315
|
crop
|
|
648828
650316
|
});
|
|
650317
|
+
appliedCrop = crop;
|
|
648829
650318
|
dropHandle();
|
|
648830
650319
|
} else if (recording.type === "appium") {
|
|
648831
650320
|
const b64 = await recording.driver.stopRecordingScreen();
|
|
@@ -648980,28 +650469,92 @@ async function stopRecording({ config, step, driver, deps = {} }) {
|
|
|
648980
650469
|
if (!meta || Object.keys(meta).length === 0) {
|
|
648981
650470
|
log(config, "debug", `Couldn't probe recording metadata for ${finalTargetPath}.`);
|
|
648982
650471
|
}
|
|
650472
|
+
const specs = [];
|
|
650473
|
+
const verify = recording.verify;
|
|
650474
|
+
if (verify && typeof verify === "object") {
|
|
650475
|
+
if (typeof verify.minDuration === "number") {
|
|
650476
|
+
specs.push({
|
|
650477
|
+
statement: `$$outputs.duration >= ${verify.minDuration}`,
|
|
650478
|
+
severity: "fail"
|
|
650479
|
+
});
|
|
650480
|
+
}
|
|
650481
|
+
if (typeof verify.maxDuration === "number") {
|
|
650482
|
+
specs.push({
|
|
650483
|
+
statement: `$$outputs.duration <= ${verify.maxDuration}`,
|
|
650484
|
+
severity: "fail"
|
|
650485
|
+
});
|
|
650486
|
+
}
|
|
650487
|
+
if (verify.resolution !== void 0 && verify.resolution !== false) {
|
|
650488
|
+
let expected = null;
|
|
650489
|
+
if (verify.resolution === true) {
|
|
650490
|
+
if (appliedCrop) {
|
|
650491
|
+
expected = { width: appliedCrop.w, height: appliedCrop.h };
|
|
650492
|
+
} else if (recording.captureInfo?.frameSize) {
|
|
650493
|
+
expected = {
|
|
650494
|
+
width: recording.captureInfo.frameSize.w,
|
|
650495
|
+
height: recording.captureInfo.frameSize.h
|
|
650496
|
+
};
|
|
650497
|
+
}
|
|
650498
|
+
} else {
|
|
650499
|
+
expected = {
|
|
650500
|
+
width: verify.resolution.width,
|
|
650501
|
+
height: verify.resolution.height
|
|
650502
|
+
};
|
|
650503
|
+
}
|
|
650504
|
+
if (!expected) {
|
|
650505
|
+
log(config, "debug", `verify.resolution: true has no capture expectation for this engine; skipping the check.`);
|
|
650506
|
+
} else {
|
|
650507
|
+
result.outputs.resolutionMatch = typeof result.outputs.width === "number" && typeof result.outputs.height === "number" && Math.abs(result.outputs.width - expected.width) <= 2 && Math.abs(result.outputs.height - expected.height) <= 2;
|
|
650508
|
+
specs.push({
|
|
650509
|
+
statement: `$$outputs.resolutionMatch == true`,
|
|
650510
|
+
severity: "fail"
|
|
650511
|
+
});
|
|
650512
|
+
}
|
|
650513
|
+
}
|
|
650514
|
+
if (verify.notBlack) {
|
|
650515
|
+
const allBlack = typeof result.outputs.duration === "number" ? await detectAllBlack({
|
|
650516
|
+
cacheDir: config?.cacheDir,
|
|
650517
|
+
filePath: finalTargetPath,
|
|
650518
|
+
duration: result.outputs.duration,
|
|
650519
|
+
fps: result.outputs.fps
|
|
650520
|
+
}) : null;
|
|
650521
|
+
if (allBlack === null) {
|
|
650522
|
+
log(config, "debug", `verify.notBlack: couldn't analyze ${finalTargetPath} (unreadable or unknown duration); skipping the check.`);
|
|
650523
|
+
} else {
|
|
650524
|
+
result.outputs.allBlack = allBlack;
|
|
650525
|
+
specs.push({
|
|
650526
|
+
statement: `$$outputs.allBlack == false`,
|
|
650527
|
+
severity: "fail"
|
|
650528
|
+
});
|
|
650529
|
+
}
|
|
650530
|
+
}
|
|
650531
|
+
}
|
|
648983
650532
|
if (checkpoints?.entries?.length) {
|
|
648984
650533
|
Object.assign(result.outputs, buildCheckpointOutputs(checkpoints.entries));
|
|
648985
650534
|
result.outputs.seededBaselines = seededBaselines;
|
|
650535
|
+
specs.push({
|
|
650536
|
+
statement: `$$outputs.maxCheckpointVariation <= ${checkpoints.maxVariation}`,
|
|
650537
|
+
severity: "warning"
|
|
650538
|
+
}, {
|
|
650539
|
+
statement: `$$outputs.checkpointErrors == 0`,
|
|
650540
|
+
severity: "warning"
|
|
650541
|
+
});
|
|
650542
|
+
}
|
|
650543
|
+
if (specs.length > 0) {
|
|
648986
650544
|
const ctx = buildConditionContext({ outputs: result.outputs });
|
|
648987
|
-
const { assertions, status } = await evaluateImplicitAssertions(
|
|
648988
|
-
{
|
|
648989
|
-
statement: `$$outputs.maxCheckpointVariation <= ${checkpoints.maxVariation}`,
|
|
648990
|
-
severity: "warning"
|
|
648991
|
-
},
|
|
648992
|
-
{
|
|
648993
|
-
statement: `$$outputs.checkpointErrors == 0`,
|
|
648994
|
-
severity: "warning"
|
|
648995
|
-
}
|
|
648996
|
-
], ctx);
|
|
650545
|
+
const { assertions, status } = await evaluateImplicitAssertions(specs, ctx);
|
|
648997
650546
|
result.assertions = assertions;
|
|
648998
650547
|
result.status = status;
|
|
648999
|
-
if (status === "
|
|
650548
|
+
if (status === "FAIL") {
|
|
650549
|
+
result.description += ` One or more structural verify guards failed.`;
|
|
650550
|
+
} else if (status === "WARNING" && checkpoints?.entries?.length) {
|
|
649000
650551
|
result.description += !isAboveVariation ? ` One or more checkpoints drifted beyond maxVariation (${checkpoints.maxVariation}) or couldn't be compared \u2014 the recorded flow's content may have changed since its baselines were captured.` : result.outputs.changed ? ` One or more checkpoints drifted beyond maxVariation (${checkpoints.maxVariation}) or couldn't be compared \u2014 the recording was refreshed to match the current content.` : ` One or more checkpoints drifted beyond maxVariation (${checkpoints.maxVariation}) or couldn't be compared \u2014 the existing recording was kept.`;
|
|
649001
650552
|
}
|
|
649002
650553
|
if (baselineFailures > 0) {
|
|
649003
650554
|
result.outputs.baselineFailures = baselineFailures;
|
|
649004
650555
|
}
|
|
650556
|
+
}
|
|
650557
|
+
if (checkpoints) {
|
|
649005
650558
|
try {
|
|
649006
650559
|
import_node_fs23.default.rmSync(checkpoints.stagingDir, { recursive: true, force: true });
|
|
649007
650560
|
} catch {
|
|
@@ -649014,7 +650567,8 @@ async function stopRecording({ config, step, driver, deps = {} }) {
|
|
|
649014
650567
|
delete result.outputs.recordingPath;
|
|
649015
650568
|
delete result.outputs.format;
|
|
649016
650569
|
} else {
|
|
649017
|
-
result.status
|
|
650570
|
+
if (result.status !== "FAIL")
|
|
650571
|
+
result.status = "WARNING";
|
|
649018
650572
|
result.description += ` The captured video couldn't replace ${finalTargetPath}, so the existing (now stale) recording was kept.`;
|
|
649019
650573
|
}
|
|
649020
650574
|
}
|
|
@@ -654332,6 +655886,7 @@ async function runStep({ config = {}, context = {}, step, driver, metaValues = {
|
|
|
654332
655886
|
handle.id = handle.id ?? (0, import_node_crypto10.randomUUID)();
|
|
654333
655887
|
handle.name = handle.name ?? recordStepName(step.record);
|
|
654334
655888
|
handle.overwrite = step.record?.overwrite;
|
|
655889
|
+
handle.verify = step.record?.verify;
|
|
654335
655890
|
if (handle.targetPath) {
|
|
654336
655891
|
handle.checkpoints = resolveCheckpointsConfig({
|
|
654337
655892
|
record: step.record,
|