doc-detective-common 4.21.0 → 4.23.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/index.cjs CHANGED
@@ -2548,7 +2548,7 @@ var schemas_default = {
2548
2548
  ]
2549
2549
  },
2550
2550
  browsers: {
2551
- description: "Browsers to run tests on.",
2551
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
2552
2552
  anyOf: [
2553
2553
  {
2554
2554
  type: "string",
@@ -2559,7 +2559,7 @@ var schemas_default = {
2559
2559
  "safari",
2560
2560
  "webkit"
2561
2561
  ],
2562
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2562
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2563
2563
  },
2564
2564
  {
2565
2565
  type: "object",
@@ -2578,7 +2578,7 @@ var schemas_default = {
2578
2578
  "safari",
2579
2579
  "webkit"
2580
2580
  ],
2581
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2581
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2582
2582
  },
2583
2583
  explicit: {
2584
2584
  type: "boolean",
@@ -2638,7 +2638,7 @@ var schemas_default = {
2638
2638
  "safari",
2639
2639
  "webkit"
2640
2640
  ],
2641
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2641
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2642
2642
  },
2643
2643
  {
2644
2644
  type: "object",
@@ -2657,7 +2657,7 @@ var schemas_default = {
2657
2657
  "safari",
2658
2658
  "webkit"
2659
2659
  ],
2660
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2660
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2661
2661
  },
2662
2662
  explicit: {
2663
2663
  type: "boolean",
@@ -2833,7 +2833,7 @@ var schemas_default = {
2833
2833
  ]
2834
2834
  },
2835
2835
  device: {
2836
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
2836
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
2837
2837
  examples: [
2838
2838
  "pixel7",
2839
2839
  {
@@ -2872,7 +2872,7 @@ var schemas_default = {
2872
2872
  transform: [
2873
2873
  "trim"
2874
2874
  ],
2875
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
2875
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
2876
2876
  },
2877
2877
  deviceType: {
2878
2878
  type: "string",
@@ -2885,11 +2885,11 @@ var schemas_default = {
2885
2885
  osVersion: {
2886
2886
  type: "string",
2887
2887
  minLength: 1,
2888
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
2888
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
2889
2889
  },
2890
2890
  headless: {
2891
2891
  type: "boolean",
2892
- description: "Run the Android emulator without a window. Ignored where not applicable."
2892
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
2893
2893
  },
2894
2894
  orientation: {
2895
2895
  type: "string",
@@ -2943,7 +2943,7 @@ var schemas_default = {
2943
2943
  "safari",
2944
2944
  "webkit"
2945
2945
  ],
2946
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2946
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2947
2947
  },
2948
2948
  browser: {
2949
2949
  type: "object",
@@ -2962,7 +2962,7 @@ var schemas_default = {
2962
2962
  "safari",
2963
2963
  "webkit"
2964
2964
  ],
2965
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
2965
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
2966
2966
  },
2967
2967
  explicit: {
2968
2968
  type: "boolean",
@@ -3102,6 +3102,26 @@ var schemas_default = {
3102
3102
  }
3103
3103
  }
3104
3104
  ]
3105
+ },
3106
+ {
3107
+ platforms: "android"
3108
+ },
3109
+ {
3110
+ platforms: [
3111
+ "windows",
3112
+ "mac",
3113
+ "android",
3114
+ "ios"
3115
+ ],
3116
+ browsers: "chrome"
3117
+ },
3118
+ {
3119
+ platforms: "ios",
3120
+ browsers: "safari",
3121
+ device: {
3122
+ name: "test-iphone",
3123
+ deviceType: "phone"
3124
+ }
3105
3125
  }
3106
3126
  ]
3107
3127
  }
@@ -38838,7 +38858,7 @@ var schemas_default = {
38838
38858
  startSurface: {
38839
38859
  $schema: "http://json-schema.org/draft-07/schema#",
38840
38860
  title: "startSurface",
38841
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
38861
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
38842
38862
  components: {
38843
38863
  schemas: {
38844
38864
  appDescriptor: {
@@ -38890,15 +38910,15 @@ var schemas_default = {
38890
38910
  install: {
38891
38911
  type: "string",
38892
38912
  minLength: 1,
38893
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
38913
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
38894
38914
  },
38895
38915
  activity: {
38896
38916
  type: "string",
38897
38917
  minLength: 1,
38898
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
38918
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
38899
38919
  },
38900
38920
  device: {
38901
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
38921
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
38902
38922
  anyOf: [
38903
38923
  {
38904
38924
  type: "string",
@@ -38931,7 +38951,7 @@ var schemas_default = {
38931
38951
  transform: [
38932
38952
  "trim"
38933
38953
  ],
38934
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
38954
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
38935
38955
  },
38936
38956
  deviceType: {
38937
38957
  type: "string",
@@ -38944,11 +38964,11 @@ var schemas_default = {
38944
38964
  osVersion: {
38945
38965
  type: "string",
38946
38966
  minLength: 1,
38947
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
38967
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
38948
38968
  },
38949
38969
  headless: {
38950
38970
  type: "boolean",
38951
- description: "Run the Android emulator without a window. Ignored where not applicable."
38971
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
38952
38972
  },
38953
38973
  orientation: {
38954
38974
  type: "string",
@@ -39120,7 +39140,7 @@ var schemas_default = {
39120
39140
  transform: [
39121
39141
  "trim"
39122
39142
  ],
39123
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
39143
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
39124
39144
  },
39125
39145
  deviceType: {
39126
39146
  type: "string",
@@ -39133,11 +39153,11 @@ var schemas_default = {
39133
39153
  osVersion: {
39134
39154
  type: "string",
39135
39155
  minLength: 1,
39136
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
39156
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
39137
39157
  },
39138
39158
  headless: {
39139
39159
  type: "boolean",
39140
- description: "Run the Android emulator without a window. Ignored where not applicable."
39160
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
39141
39161
  },
39142
39162
  orientation: {
39143
39163
  type: "string",
@@ -39236,15 +39256,15 @@ var schemas_default = {
39236
39256
  install: {
39237
39257
  type: "string",
39238
39258
  minLength: 1,
39239
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
39259
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
39240
39260
  },
39241
39261
  activity: {
39242
39262
  type: "string",
39243
39263
  minLength: 1,
39244
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
39264
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
39245
39265
  },
39246
39266
  device: {
39247
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
39267
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
39248
39268
  anyOf: [
39249
39269
  {
39250
39270
  type: "string",
@@ -39277,7 +39297,7 @@ var schemas_default = {
39277
39297
  transform: [
39278
39298
  "trim"
39279
39299
  ],
39280
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
39300
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
39281
39301
  },
39282
39302
  deviceType: {
39283
39303
  type: "string",
@@ -39290,11 +39310,11 @@ var schemas_default = {
39290
39310
  osVersion: {
39291
39311
  type: "string",
39292
39312
  minLength: 1,
39293
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
39313
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
39294
39314
  },
39295
39315
  headless: {
39296
39316
  type: "boolean",
39297
- description: "Run the Android emulator without a window. Ignored where not applicable."
39317
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
39298
39318
  },
39299
39319
  orientation: {
39300
39320
  type: "string",
@@ -81029,7 +81049,7 @@ var schemas_default = {
81029
81049
  startSurface: {
81030
81050
  $schema: "http://json-schema.org/draft-07/schema#",
81031
81051
  title: "startSurface",
81032
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
81052
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
81033
81053
  components: {
81034
81054
  schemas: {
81035
81055
  appDescriptor: {
@@ -81081,15 +81101,15 @@ var schemas_default = {
81081
81101
  install: {
81082
81102
  type: "string",
81083
81103
  minLength: 1,
81084
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
81104
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
81085
81105
  },
81086
81106
  activity: {
81087
81107
  type: "string",
81088
81108
  minLength: 1,
81089
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
81109
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
81090
81110
  },
81091
81111
  device: {
81092
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
81112
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
81093
81113
  anyOf: [
81094
81114
  {
81095
81115
  type: "string",
@@ -81122,7 +81142,7 @@ var schemas_default = {
81122
81142
  transform: [
81123
81143
  "trim"
81124
81144
  ],
81125
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
81145
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
81126
81146
  },
81127
81147
  deviceType: {
81128
81148
  type: "string",
@@ -81135,11 +81155,11 @@ var schemas_default = {
81135
81155
  osVersion: {
81136
81156
  type: "string",
81137
81157
  minLength: 1,
81138
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81158
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81139
81159
  },
81140
81160
  headless: {
81141
81161
  type: "boolean",
81142
- description: "Run the Android emulator without a window. Ignored where not applicable."
81162
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
81143
81163
  },
81144
81164
  orientation: {
81145
81165
  type: "string",
@@ -81311,7 +81331,7 @@ var schemas_default = {
81311
81331
  transform: [
81312
81332
  "trim"
81313
81333
  ],
81314
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
81334
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
81315
81335
  },
81316
81336
  deviceType: {
81317
81337
  type: "string",
@@ -81324,11 +81344,11 @@ var schemas_default = {
81324
81344
  osVersion: {
81325
81345
  type: "string",
81326
81346
  minLength: 1,
81327
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81347
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81328
81348
  },
81329
81349
  headless: {
81330
81350
  type: "boolean",
81331
- description: "Run the Android emulator without a window. Ignored where not applicable."
81351
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
81332
81352
  },
81333
81353
  orientation: {
81334
81354
  type: "string",
@@ -81427,15 +81447,15 @@ var schemas_default = {
81427
81447
  install: {
81428
81448
  type: "string",
81429
81449
  minLength: 1,
81430
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
81450
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
81431
81451
  },
81432
81452
  activity: {
81433
81453
  type: "string",
81434
81454
  minLength: 1,
81435
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
81455
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
81436
81456
  },
81437
81457
  device: {
81438
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
81458
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
81439
81459
  anyOf: [
81440
81460
  {
81441
81461
  type: "string",
@@ -81468,7 +81488,7 @@ var schemas_default = {
81468
81488
  transform: [
81469
81489
  "trim"
81470
81490
  ],
81471
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
81491
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
81472
81492
  },
81473
81493
  deviceType: {
81474
81494
  type: "string",
@@ -81481,11 +81501,11 @@ var schemas_default = {
81481
81501
  osVersion: {
81482
81502
  type: "string",
81483
81503
  minLength: 1,
81484
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81504
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
81485
81505
  },
81486
81506
  headless: {
81487
81507
  type: "boolean",
81488
- description: "Run the Android emulator without a window. Ignored where not applicable."
81508
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
81489
81509
  },
81490
81510
  orientation: {
81491
81511
  type: "string",
@@ -87119,7 +87139,7 @@ var schemas_default = {
87119
87139
  ]
87120
87140
  },
87121
87141
  browsers: {
87122
- description: "Browsers to run tests on.",
87142
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
87123
87143
  anyOf: [
87124
87144
  {
87125
87145
  type: "string",
@@ -87130,7 +87150,7 @@ var schemas_default = {
87130
87150
  "safari",
87131
87151
  "webkit"
87132
87152
  ],
87133
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87153
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87134
87154
  },
87135
87155
  {
87136
87156
  type: "object",
@@ -87149,7 +87169,7 @@ var schemas_default = {
87149
87169
  "safari",
87150
87170
  "webkit"
87151
87171
  ],
87152
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87172
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87153
87173
  },
87154
87174
  explicit: {
87155
87175
  type: "boolean",
@@ -87209,7 +87229,7 @@ var schemas_default = {
87209
87229
  "safari",
87210
87230
  "webkit"
87211
87231
  ],
87212
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87232
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87213
87233
  },
87214
87234
  {
87215
87235
  type: "object",
@@ -87228,7 +87248,7 @@ var schemas_default = {
87228
87248
  "safari",
87229
87249
  "webkit"
87230
87250
  ],
87231
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87251
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87232
87252
  },
87233
87253
  explicit: {
87234
87254
  type: "boolean",
@@ -87404,7 +87424,7 @@ var schemas_default = {
87404
87424
  ]
87405
87425
  },
87406
87426
  device: {
87407
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
87427
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
87408
87428
  examples: [
87409
87429
  "pixel7",
87410
87430
  {
@@ -87443,7 +87463,7 @@ var schemas_default = {
87443
87463
  transform: [
87444
87464
  "trim"
87445
87465
  ],
87446
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
87466
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
87447
87467
  },
87448
87468
  deviceType: {
87449
87469
  type: "string",
@@ -87456,11 +87476,11 @@ var schemas_default = {
87456
87476
  osVersion: {
87457
87477
  type: "string",
87458
87478
  minLength: 1,
87459
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
87479
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
87460
87480
  },
87461
87481
  headless: {
87462
87482
  type: "boolean",
87463
- description: "Run the Android emulator without a window. Ignored where not applicable."
87483
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
87464
87484
  },
87465
87485
  orientation: {
87466
87486
  type: "string",
@@ -87514,7 +87534,7 @@ var schemas_default = {
87514
87534
  "safari",
87515
87535
  "webkit"
87516
87536
  ],
87517
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87537
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87518
87538
  },
87519
87539
  browser: {
87520
87540
  type: "object",
@@ -87533,7 +87553,7 @@ var schemas_default = {
87533
87553
  "safari",
87534
87554
  "webkit"
87535
87555
  ],
87536
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
87556
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
87537
87557
  },
87538
87558
  explicit: {
87539
87559
  type: "boolean",
@@ -87673,6 +87693,26 @@ var schemas_default = {
87673
87693
  }
87674
87694
  }
87675
87695
  ]
87696
+ },
87697
+ {
87698
+ platforms: "android"
87699
+ },
87700
+ {
87701
+ platforms: [
87702
+ "windows",
87703
+ "mac",
87704
+ "android",
87705
+ "ios"
87706
+ ],
87707
+ browsers: "chrome"
87708
+ },
87709
+ {
87710
+ platforms: "ios",
87711
+ browsers: "safari",
87712
+ device: {
87713
+ name: "test-iphone",
87714
+ deviceType: "phone"
87715
+ }
87676
87716
  }
87677
87717
  ]
87678
87718
  },
@@ -100010,7 +100050,7 @@ var schemas_default = {
100010
100050
  ]
100011
100051
  },
100012
100052
  browsers: {
100013
- description: "Browsers to run tests on.",
100053
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
100014
100054
  anyOf: [
100015
100055
  {
100016
100056
  type: "string",
@@ -100021,7 +100061,7 @@ var schemas_default = {
100021
100061
  "safari",
100022
100062
  "webkit"
100023
100063
  ],
100024
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100064
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100025
100065
  },
100026
100066
  {
100027
100067
  type: "object",
@@ -100040,7 +100080,7 @@ var schemas_default = {
100040
100080
  "safari",
100041
100081
  "webkit"
100042
100082
  ],
100043
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100083
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100044
100084
  },
100045
100085
  explicit: {
100046
100086
  type: "boolean",
@@ -100100,7 +100140,7 @@ var schemas_default = {
100100
100140
  "safari",
100101
100141
  "webkit"
100102
100142
  ],
100103
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100143
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100104
100144
  },
100105
100145
  {
100106
100146
  type: "object",
@@ -100119,7 +100159,7 @@ var schemas_default = {
100119
100159
  "safari",
100120
100160
  "webkit"
100121
100161
  ],
100122
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100162
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100123
100163
  },
100124
100164
  explicit: {
100125
100165
  type: "boolean",
@@ -100295,7 +100335,7 @@ var schemas_default = {
100295
100335
  ]
100296
100336
  },
100297
100337
  device: {
100298
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
100338
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
100299
100339
  examples: [
100300
100340
  "pixel7",
100301
100341
  {
@@ -100334,7 +100374,7 @@ var schemas_default = {
100334
100374
  transform: [
100335
100375
  "trim"
100336
100376
  ],
100337
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
100377
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
100338
100378
  },
100339
100379
  deviceType: {
100340
100380
  type: "string",
@@ -100347,11 +100387,11 @@ var schemas_default = {
100347
100387
  osVersion: {
100348
100388
  type: "string",
100349
100389
  minLength: 1,
100350
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
100390
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
100351
100391
  },
100352
100392
  headless: {
100353
100393
  type: "boolean",
100354
- description: "Run the Android emulator without a window. Ignored where not applicable."
100394
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
100355
100395
  },
100356
100396
  orientation: {
100357
100397
  type: "string",
@@ -100405,7 +100445,7 @@ var schemas_default = {
100405
100445
  "safari",
100406
100446
  "webkit"
100407
100447
  ],
100408
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100448
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100409
100449
  },
100410
100450
  browser: {
100411
100451
  type: "object",
@@ -100424,7 +100464,7 @@ var schemas_default = {
100424
100464
  "safari",
100425
100465
  "webkit"
100426
100466
  ],
100427
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
100467
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
100428
100468
  },
100429
100469
  explicit: {
100430
100470
  type: "boolean",
@@ -100564,6 +100604,26 @@ var schemas_default = {
100564
100604
  }
100565
100605
  }
100566
100606
  ]
100607
+ },
100608
+ {
100609
+ platforms: "android"
100610
+ },
100611
+ {
100612
+ platforms: [
100613
+ "windows",
100614
+ "mac",
100615
+ "android",
100616
+ "ios"
100617
+ ],
100618
+ browsers: "chrome"
100619
+ },
100620
+ {
100621
+ platforms: "ios",
100622
+ browsers: "safari",
100623
+ device: {
100624
+ name: "test-iphone",
100625
+ deviceType: "phone"
100626
+ }
100567
100627
  }
100568
100628
  ]
100569
100629
  }
@@ -136300,7 +136360,7 @@ var schemas_default = {
136300
136360
  startSurface: {
136301
136361
  $schema: "http://json-schema.org/draft-07/schema#",
136302
136362
  title: "startSurface",
136303
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
136363
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
136304
136364
  components: {
136305
136365
  schemas: {
136306
136366
  appDescriptor: {
@@ -136352,15 +136412,15 @@ var schemas_default = {
136352
136412
  install: {
136353
136413
  type: "string",
136354
136414
  minLength: 1,
136355
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
136415
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
136356
136416
  },
136357
136417
  activity: {
136358
136418
  type: "string",
136359
136419
  minLength: 1,
136360
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
136420
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
136361
136421
  },
136362
136422
  device: {
136363
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
136423
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
136364
136424
  anyOf: [
136365
136425
  {
136366
136426
  type: "string",
@@ -136393,7 +136453,7 @@ var schemas_default = {
136393
136453
  transform: [
136394
136454
  "trim"
136395
136455
  ],
136396
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
136456
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
136397
136457
  },
136398
136458
  deviceType: {
136399
136459
  type: "string",
@@ -136406,11 +136466,11 @@ var schemas_default = {
136406
136466
  osVersion: {
136407
136467
  type: "string",
136408
136468
  minLength: 1,
136409
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136469
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136410
136470
  },
136411
136471
  headless: {
136412
136472
  type: "boolean",
136413
- description: "Run the Android emulator without a window. Ignored where not applicable."
136473
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
136414
136474
  },
136415
136475
  orientation: {
136416
136476
  type: "string",
@@ -136582,7 +136642,7 @@ var schemas_default = {
136582
136642
  transform: [
136583
136643
  "trim"
136584
136644
  ],
136585
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
136645
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
136586
136646
  },
136587
136647
  deviceType: {
136588
136648
  type: "string",
@@ -136595,11 +136655,11 @@ var schemas_default = {
136595
136655
  osVersion: {
136596
136656
  type: "string",
136597
136657
  minLength: 1,
136598
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136658
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136599
136659
  },
136600
136660
  headless: {
136601
136661
  type: "boolean",
136602
- description: "Run the Android emulator without a window. Ignored where not applicable."
136662
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
136603
136663
  },
136604
136664
  orientation: {
136605
136665
  type: "string",
@@ -136698,15 +136758,15 @@ var schemas_default = {
136698
136758
  install: {
136699
136759
  type: "string",
136700
136760
  minLength: 1,
136701
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
136761
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
136702
136762
  },
136703
136763
  activity: {
136704
136764
  type: "string",
136705
136765
  minLength: 1,
136706
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
136766
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
136707
136767
  },
136708
136768
  device: {
136709
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
136769
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
136710
136770
  anyOf: [
136711
136771
  {
136712
136772
  type: "string",
@@ -136739,7 +136799,7 @@ var schemas_default = {
136739
136799
  transform: [
136740
136800
  "trim"
136741
136801
  ],
136742
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
136802
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
136743
136803
  },
136744
136804
  deviceType: {
136745
136805
  type: "string",
@@ -136752,11 +136812,11 @@ var schemas_default = {
136752
136812
  osVersion: {
136753
136813
  type: "string",
136754
136814
  minLength: 1,
136755
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136815
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
136756
136816
  },
136757
136817
  headless: {
136758
136818
  type: "boolean",
136759
- description: "Run the Android emulator without a window. Ignored where not applicable."
136819
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
136760
136820
  },
136761
136821
  orientation: {
136762
136822
  type: "string",
@@ -178491,7 +178551,7 @@ var schemas_default = {
178491
178551
  startSurface: {
178492
178552
  $schema: "http://json-schema.org/draft-07/schema#",
178493
178553
  title: "startSurface",
178494
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
178554
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
178495
178555
  components: {
178496
178556
  schemas: {
178497
178557
  appDescriptor: {
@@ -178543,15 +178603,15 @@ var schemas_default = {
178543
178603
  install: {
178544
178604
  type: "string",
178545
178605
  minLength: 1,
178546
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
178606
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
178547
178607
  },
178548
178608
  activity: {
178549
178609
  type: "string",
178550
178610
  minLength: 1,
178551
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
178611
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
178552
178612
  },
178553
178613
  device: {
178554
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
178614
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
178555
178615
  anyOf: [
178556
178616
  {
178557
178617
  type: "string",
@@ -178584,7 +178644,7 @@ var schemas_default = {
178584
178644
  transform: [
178585
178645
  "trim"
178586
178646
  ],
178587
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
178647
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
178588
178648
  },
178589
178649
  deviceType: {
178590
178650
  type: "string",
@@ -178597,11 +178657,11 @@ var schemas_default = {
178597
178657
  osVersion: {
178598
178658
  type: "string",
178599
178659
  minLength: 1,
178600
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
178660
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
178601
178661
  },
178602
178662
  headless: {
178603
178663
  type: "boolean",
178604
- description: "Run the Android emulator without a window. Ignored where not applicable."
178664
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
178605
178665
  },
178606
178666
  orientation: {
178607
178667
  type: "string",
@@ -178773,7 +178833,7 @@ var schemas_default = {
178773
178833
  transform: [
178774
178834
  "trim"
178775
178835
  ],
178776
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
178836
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
178777
178837
  },
178778
178838
  deviceType: {
178779
178839
  type: "string",
@@ -178786,11 +178846,11 @@ var schemas_default = {
178786
178846
  osVersion: {
178787
178847
  type: "string",
178788
178848
  minLength: 1,
178789
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
178849
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
178790
178850
  },
178791
178851
  headless: {
178792
178852
  type: "boolean",
178793
- description: "Run the Android emulator without a window. Ignored where not applicable."
178853
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
178794
178854
  },
178795
178855
  orientation: {
178796
178856
  type: "string",
@@ -178889,15 +178949,15 @@ var schemas_default = {
178889
178949
  install: {
178890
178950
  type: "string",
178891
178951
  minLength: 1,
178892
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
178952
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
178893
178953
  },
178894
178954
  activity: {
178895
178955
  type: "string",
178896
178956
  minLength: 1,
178897
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
178957
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
178898
178958
  },
178899
178959
  device: {
178900
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
178960
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
178901
178961
  anyOf: [
178902
178962
  {
178903
178963
  type: "string",
@@ -178930,7 +178990,7 @@ var schemas_default = {
178930
178990
  transform: [
178931
178991
  "trim"
178932
178992
  ],
178933
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
178993
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
178934
178994
  },
178935
178995
  deviceType: {
178936
178996
  type: "string",
@@ -178943,11 +179003,11 @@ var schemas_default = {
178943
179003
  osVersion: {
178944
179004
  type: "string",
178945
179005
  minLength: 1,
178946
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
179006
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
178947
179007
  },
178948
179008
  headless: {
178949
179009
  type: "boolean",
178950
- description: "Run the Android emulator without a window. Ignored where not applicable."
179010
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
178951
179011
  },
178952
179012
  orientation: {
178953
179013
  type: "string",
@@ -184643,7 +184703,7 @@ var schemas_default = {
184643
184703
  ]
184644
184704
  },
184645
184705
  browsers: {
184646
- description: "Browsers to run tests on.",
184706
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
184647
184707
  anyOf: [
184648
184708
  {
184649
184709
  type: "string",
@@ -184654,7 +184714,7 @@ var schemas_default = {
184654
184714
  "safari",
184655
184715
  "webkit"
184656
184716
  ],
184657
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
184717
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
184658
184718
  },
184659
184719
  {
184660
184720
  type: "object",
@@ -184673,7 +184733,7 @@ var schemas_default = {
184673
184733
  "safari",
184674
184734
  "webkit"
184675
184735
  ],
184676
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
184736
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
184677
184737
  },
184678
184738
  explicit: {
184679
184739
  type: "boolean",
@@ -184733,7 +184793,7 @@ var schemas_default = {
184733
184793
  "safari",
184734
184794
  "webkit"
184735
184795
  ],
184736
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
184796
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
184737
184797
  },
184738
184798
  {
184739
184799
  type: "object",
@@ -184752,7 +184812,7 @@ var schemas_default = {
184752
184812
  "safari",
184753
184813
  "webkit"
184754
184814
  ],
184755
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
184815
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
184756
184816
  },
184757
184817
  explicit: {
184758
184818
  type: "boolean",
@@ -184928,7 +184988,7 @@ var schemas_default = {
184928
184988
  ]
184929
184989
  },
184930
184990
  device: {
184931
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
184991
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
184932
184992
  examples: [
184933
184993
  "pixel7",
184934
184994
  {
@@ -184967,7 +185027,7 @@ var schemas_default = {
184967
185027
  transform: [
184968
185028
  "trim"
184969
185029
  ],
184970
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
185030
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
184971
185031
  },
184972
185032
  deviceType: {
184973
185033
  type: "string",
@@ -184980,11 +185040,11 @@ var schemas_default = {
184980
185040
  osVersion: {
184981
185041
  type: "string",
184982
185042
  minLength: 1,
184983
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
185043
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
184984
185044
  },
184985
185045
  headless: {
184986
185046
  type: "boolean",
184987
- description: "Run the Android emulator without a window. Ignored where not applicable."
185047
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
184988
185048
  },
184989
185049
  orientation: {
184990
185050
  type: "string",
@@ -185038,7 +185098,7 @@ var schemas_default = {
185038
185098
  "safari",
185039
185099
  "webkit"
185040
185100
  ],
185041
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185101
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185042
185102
  },
185043
185103
  browser: {
185044
185104
  type: "object",
@@ -185057,7 +185117,7 @@ var schemas_default = {
185057
185117
  "safari",
185058
185118
  "webkit"
185059
185119
  ],
185060
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185120
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185061
185121
  },
185062
185122
  explicit: {
185063
185123
  type: "boolean",
@@ -185197,6 +185257,26 @@ var schemas_default = {
185197
185257
  }
185198
185258
  }
185199
185259
  ]
185260
+ },
185261
+ {
185262
+ platforms: "android"
185263
+ },
185264
+ {
185265
+ platforms: [
185266
+ "windows",
185267
+ "mac",
185268
+ "android",
185269
+ "ios"
185270
+ ],
185271
+ browsers: "chrome"
185272
+ },
185273
+ {
185274
+ platforms: "ios",
185275
+ browsers: "safari",
185276
+ device: {
185277
+ name: "test-iphone",
185278
+ deviceType: "phone"
185279
+ }
185200
185280
  }
185201
185281
  ]
185202
185282
  }
@@ -185485,7 +185565,7 @@ var schemas_default = {
185485
185565
  ]
185486
185566
  },
185487
185567
  browsers: {
185488
- description: "Browsers to run tests on.",
185568
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
185489
185569
  anyOf: [
185490
185570
  {
185491
185571
  type: "string",
@@ -185496,7 +185576,7 @@ var schemas_default = {
185496
185576
  "safari",
185497
185577
  "webkit"
185498
185578
  ],
185499
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185579
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185500
185580
  },
185501
185581
  {
185502
185582
  type: "object",
@@ -185515,7 +185595,7 @@ var schemas_default = {
185515
185595
  "safari",
185516
185596
  "webkit"
185517
185597
  ],
185518
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185598
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185519
185599
  },
185520
185600
  explicit: {
185521
185601
  type: "boolean",
@@ -185575,7 +185655,7 @@ var schemas_default = {
185575
185655
  "safari",
185576
185656
  "webkit"
185577
185657
  ],
185578
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185658
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185579
185659
  },
185580
185660
  {
185581
185661
  type: "object",
@@ -185594,7 +185674,7 @@ var schemas_default = {
185594
185674
  "safari",
185595
185675
  "webkit"
185596
185676
  ],
185597
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185677
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185598
185678
  },
185599
185679
  explicit: {
185600
185680
  type: "boolean",
@@ -185770,7 +185850,7 @@ var schemas_default = {
185770
185850
  ]
185771
185851
  },
185772
185852
  device: {
185773
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
185853
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
185774
185854
  examples: [
185775
185855
  "pixel7",
185776
185856
  {
@@ -185809,7 +185889,7 @@ var schemas_default = {
185809
185889
  transform: [
185810
185890
  "trim"
185811
185891
  ],
185812
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
185892
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
185813
185893
  },
185814
185894
  deviceType: {
185815
185895
  type: "string",
@@ -185822,11 +185902,11 @@ var schemas_default = {
185822
185902
  osVersion: {
185823
185903
  type: "string",
185824
185904
  minLength: 1,
185825
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
185905
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
185826
185906
  },
185827
185907
  headless: {
185828
185908
  type: "boolean",
185829
- description: "Run the Android emulator without a window. Ignored where not applicable."
185909
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
185830
185910
  },
185831
185911
  orientation: {
185832
185912
  type: "string",
@@ -185880,7 +185960,7 @@ var schemas_default = {
185880
185960
  "safari",
185881
185961
  "webkit"
185882
185962
  ],
185883
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185963
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185884
185964
  },
185885
185965
  browser: {
185886
185966
  type: "object",
@@ -185899,7 +185979,7 @@ var schemas_default = {
185899
185979
  "safari",
185900
185980
  "webkit"
185901
185981
  ],
185902
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
185982
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
185903
185983
  },
185904
185984
  explicit: {
185905
185985
  type: "boolean",
@@ -186039,6 +186119,26 @@ var schemas_default = {
186039
186119
  }
186040
186120
  }
186041
186121
  ]
186122
+ },
186123
+ {
186124
+ platforms: "android"
186125
+ },
186126
+ {
186127
+ platforms: [
186128
+ "windows",
186129
+ "mac",
186130
+ "android",
186131
+ "ios"
186132
+ ],
186133
+ browsers: "chrome"
186134
+ },
186135
+ {
186136
+ platforms: "ios",
186137
+ browsers: "safari",
186138
+ device: {
186139
+ name: "test-iphone",
186140
+ deviceType: "phone"
186141
+ }
186042
186142
  }
186043
186143
  ]
186044
186144
  }
@@ -222415,7 +222515,7 @@ var schemas_default = {
222415
222515
  startSurface: {
222416
222516
  $schema: "http://json-schema.org/draft-07/schema#",
222417
222517
  title: "startSurface",
222418
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
222518
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
222419
222519
  components: {
222420
222520
  schemas: {
222421
222521
  appDescriptor: {
@@ -222467,15 +222567,15 @@ var schemas_default = {
222467
222567
  install: {
222468
222568
  type: "string",
222469
222569
  minLength: 1,
222470
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
222570
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
222471
222571
  },
222472
222572
  activity: {
222473
222573
  type: "string",
222474
222574
  minLength: 1,
222475
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
222575
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
222476
222576
  },
222477
222577
  device: {
222478
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
222578
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
222479
222579
  anyOf: [
222480
222580
  {
222481
222581
  type: "string",
@@ -222508,7 +222608,7 @@ var schemas_default = {
222508
222608
  transform: [
222509
222609
  "trim"
222510
222610
  ],
222511
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
222611
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
222512
222612
  },
222513
222613
  deviceType: {
222514
222614
  type: "string",
@@ -222521,11 +222621,11 @@ var schemas_default = {
222521
222621
  osVersion: {
222522
222622
  type: "string",
222523
222623
  minLength: 1,
222524
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222624
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222525
222625
  },
222526
222626
  headless: {
222527
222627
  type: "boolean",
222528
- description: "Run the Android emulator without a window. Ignored where not applicable."
222628
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
222529
222629
  },
222530
222630
  orientation: {
222531
222631
  type: "string",
@@ -222697,7 +222797,7 @@ var schemas_default = {
222697
222797
  transform: [
222698
222798
  "trim"
222699
222799
  ],
222700
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
222800
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
222701
222801
  },
222702
222802
  deviceType: {
222703
222803
  type: "string",
@@ -222710,11 +222810,11 @@ var schemas_default = {
222710
222810
  osVersion: {
222711
222811
  type: "string",
222712
222812
  minLength: 1,
222713
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222813
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222714
222814
  },
222715
222815
  headless: {
222716
222816
  type: "boolean",
222717
- description: "Run the Android emulator without a window. Ignored where not applicable."
222817
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
222718
222818
  },
222719
222819
  orientation: {
222720
222820
  type: "string",
@@ -222813,15 +222913,15 @@ var schemas_default = {
222813
222913
  install: {
222814
222914
  type: "string",
222815
222915
  minLength: 1,
222816
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
222916
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
222817
222917
  },
222818
222918
  activity: {
222819
222919
  type: "string",
222820
222920
  minLength: 1,
222821
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
222921
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
222822
222922
  },
222823
222923
  device: {
222824
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
222924
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
222825
222925
  anyOf: [
222826
222926
  {
222827
222927
  type: "string",
@@ -222854,7 +222954,7 @@ var schemas_default = {
222854
222954
  transform: [
222855
222955
  "trim"
222856
222956
  ],
222857
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
222957
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
222858
222958
  },
222859
222959
  deviceType: {
222860
222960
  type: "string",
@@ -222867,11 +222967,11 @@ var schemas_default = {
222867
222967
  osVersion: {
222868
222968
  type: "string",
222869
222969
  minLength: 1,
222870
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222970
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
222871
222971
  },
222872
222972
  headless: {
222873
222973
  type: "boolean",
222874
- description: "Run the Android emulator without a window. Ignored where not applicable."
222974
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
222875
222975
  },
222876
222976
  orientation: {
222877
222977
  type: "string",
@@ -228200,7 +228300,7 @@ var schemas_default = {
228200
228300
  "safari",
228201
228301
  "webkit"
228202
228302
  ],
228203
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
228303
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
228204
228304
  },
228205
228305
  explicit: {
228206
228306
  type: "boolean",
@@ -263905,7 +264005,7 @@ var schemas_default = {
263905
264005
  startSurface: {
263906
264006
  $schema: "http://json-schema.org/draft-07/schema#",
263907
264007
  title: "startSurface",
263908
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
264008
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
263909
264009
  components: {
263910
264010
  schemas: {
263911
264011
  appDescriptor: {
@@ -263957,15 +264057,15 @@ var schemas_default = {
263957
264057
  install: {
263958
264058
  type: "string",
263959
264059
  minLength: 1,
263960
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
264060
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
263961
264061
  },
263962
264062
  activity: {
263963
264063
  type: "string",
263964
264064
  minLength: 1,
263965
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
264065
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
263966
264066
  },
263967
264067
  device: {
263968
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
264068
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
263969
264069
  anyOf: [
263970
264070
  {
263971
264071
  type: "string",
@@ -263998,7 +264098,7 @@ var schemas_default = {
263998
264098
  transform: [
263999
264099
  "trim"
264000
264100
  ],
264001
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
264101
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
264002
264102
  },
264003
264103
  deviceType: {
264004
264104
  type: "string",
@@ -264011,11 +264111,11 @@ var schemas_default = {
264011
264111
  osVersion: {
264012
264112
  type: "string",
264013
264113
  minLength: 1,
264014
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264114
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264015
264115
  },
264016
264116
  headless: {
264017
264117
  type: "boolean",
264018
- description: "Run the Android emulator without a window. Ignored where not applicable."
264118
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
264019
264119
  },
264020
264120
  orientation: {
264021
264121
  type: "string",
@@ -264187,7 +264287,7 @@ var schemas_default = {
264187
264287
  transform: [
264188
264288
  "trim"
264189
264289
  ],
264190
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
264290
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
264191
264291
  },
264192
264292
  deviceType: {
264193
264293
  type: "string",
@@ -264200,11 +264300,11 @@ var schemas_default = {
264200
264300
  osVersion: {
264201
264301
  type: "string",
264202
264302
  minLength: 1,
264203
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264303
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264204
264304
  },
264205
264305
  headless: {
264206
264306
  type: "boolean",
264207
- description: "Run the Android emulator without a window. Ignored where not applicable."
264307
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
264208
264308
  },
264209
264309
  orientation: {
264210
264310
  type: "string",
@@ -264303,15 +264403,15 @@ var schemas_default = {
264303
264403
  install: {
264304
264404
  type: "string",
264305
264405
  minLength: 1,
264306
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
264406
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
264307
264407
  },
264308
264408
  activity: {
264309
264409
  type: "string",
264310
264410
  minLength: 1,
264311
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
264411
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
264312
264412
  },
264313
264413
  device: {
264314
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
264414
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
264315
264415
  anyOf: [
264316
264416
  {
264317
264417
  type: "string",
@@ -264344,7 +264444,7 @@ var schemas_default = {
264344
264444
  transform: [
264345
264445
  "trim"
264346
264446
  ],
264347
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
264447
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
264348
264448
  },
264349
264449
  deviceType: {
264350
264450
  type: "string",
@@ -264357,11 +264457,11 @@ var schemas_default = {
264357
264457
  osVersion: {
264358
264458
  type: "string",
264359
264459
  minLength: 1,
264360
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264460
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
264361
264461
  },
264362
264462
  headless: {
264363
264463
  type: "boolean",
264364
- description: "Run the Android emulator without a window. Ignored where not applicable."
264464
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
264365
264465
  },
264366
264466
  orientation: {
264367
264467
  type: "string",
@@ -270544,7 +270644,7 @@ var schemas_default = {
270544
270644
  ]
270545
270645
  },
270546
270646
  browsers: {
270547
- description: "Browsers to run tests on.",
270647
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
270548
270648
  anyOf: [
270549
270649
  {
270550
270650
  type: "string",
@@ -270555,7 +270655,7 @@ var schemas_default = {
270555
270655
  "safari",
270556
270656
  "webkit"
270557
270657
  ],
270558
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
270658
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270559
270659
  },
270560
270660
  {
270561
270661
  type: "object",
@@ -270574,7 +270674,7 @@ var schemas_default = {
270574
270674
  "safari",
270575
270675
  "webkit"
270576
270676
  ],
270577
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
270677
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270578
270678
  },
270579
270679
  explicit: {
270580
270680
  type: "boolean",
@@ -270634,7 +270734,7 @@ var schemas_default = {
270634
270734
  "safari",
270635
270735
  "webkit"
270636
270736
  ],
270637
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
270737
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270638
270738
  },
270639
270739
  {
270640
270740
  type: "object",
@@ -270653,7 +270753,7 @@ var schemas_default = {
270653
270753
  "safari",
270654
270754
  "webkit"
270655
270755
  ],
270656
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
270756
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270657
270757
  },
270658
270758
  explicit: {
270659
270759
  type: "boolean",
@@ -270829,7 +270929,7 @@ var schemas_default = {
270829
270929
  ]
270830
270930
  },
270831
270931
  device: {
270832
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
270932
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
270833
270933
  examples: [
270834
270934
  "pixel7",
270835
270935
  {
@@ -270868,7 +270968,7 @@ var schemas_default = {
270868
270968
  transform: [
270869
270969
  "trim"
270870
270970
  ],
270871
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
270971
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
270872
270972
  },
270873
270973
  deviceType: {
270874
270974
  type: "string",
@@ -270881,11 +270981,11 @@ var schemas_default = {
270881
270981
  osVersion: {
270882
270982
  type: "string",
270883
270983
  minLength: 1,
270884
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
270984
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
270885
270985
  },
270886
270986
  headless: {
270887
270987
  type: "boolean",
270888
- description: "Run the Android emulator without a window. Ignored where not applicable."
270988
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
270889
270989
  },
270890
270990
  orientation: {
270891
270991
  type: "string",
@@ -270939,7 +271039,7 @@ var schemas_default = {
270939
271039
  "safari",
270940
271040
  "webkit"
270941
271041
  ],
270942
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271042
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270943
271043
  },
270944
271044
  browser: {
270945
271045
  type: "object",
@@ -270958,7 +271058,7 @@ var schemas_default = {
270958
271058
  "safari",
270959
271059
  "webkit"
270960
271060
  ],
270961
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271061
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
270962
271062
  },
270963
271063
  explicit: {
270964
271064
  type: "boolean",
@@ -271098,6 +271198,26 @@ var schemas_default = {
271098
271198
  }
271099
271199
  }
271100
271200
  ]
271201
+ },
271202
+ {
271203
+ platforms: "android"
271204
+ },
271205
+ {
271206
+ platforms: [
271207
+ "windows",
271208
+ "mac",
271209
+ "android",
271210
+ "ios"
271211
+ ],
271212
+ browsers: "chrome"
271213
+ },
271214
+ {
271215
+ platforms: "ios",
271216
+ browsers: "safari",
271217
+ device: {
271218
+ name: "test-iphone",
271219
+ deviceType: "phone"
271220
+ }
271101
271221
  }
271102
271222
  ]
271103
271223
  }
@@ -271386,7 +271506,7 @@ var schemas_default = {
271386
271506
  ]
271387
271507
  },
271388
271508
  browsers: {
271389
- description: "Browsers to run tests on.",
271509
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
271390
271510
  anyOf: [
271391
271511
  {
271392
271512
  type: "string",
@@ -271397,7 +271517,7 @@ var schemas_default = {
271397
271517
  "safari",
271398
271518
  "webkit"
271399
271519
  ],
271400
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271520
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271401
271521
  },
271402
271522
  {
271403
271523
  type: "object",
@@ -271416,7 +271536,7 @@ var schemas_default = {
271416
271536
  "safari",
271417
271537
  "webkit"
271418
271538
  ],
271419
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271539
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271420
271540
  },
271421
271541
  explicit: {
271422
271542
  type: "boolean",
@@ -271476,7 +271596,7 @@ var schemas_default = {
271476
271596
  "safari",
271477
271597
  "webkit"
271478
271598
  ],
271479
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271599
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271480
271600
  },
271481
271601
  {
271482
271602
  type: "object",
@@ -271495,7 +271615,7 @@ var schemas_default = {
271495
271615
  "safari",
271496
271616
  "webkit"
271497
271617
  ],
271498
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271618
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271499
271619
  },
271500
271620
  explicit: {
271501
271621
  type: "boolean",
@@ -271671,7 +271791,7 @@ var schemas_default = {
271671
271791
  ]
271672
271792
  },
271673
271793
  device: {
271674
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
271794
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
271675
271795
  examples: [
271676
271796
  "pixel7",
271677
271797
  {
@@ -271710,7 +271830,7 @@ var schemas_default = {
271710
271830
  transform: [
271711
271831
  "trim"
271712
271832
  ],
271713
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
271833
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
271714
271834
  },
271715
271835
  deviceType: {
271716
271836
  type: "string",
@@ -271723,11 +271843,11 @@ var schemas_default = {
271723
271843
  osVersion: {
271724
271844
  type: "string",
271725
271845
  minLength: 1,
271726
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
271846
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
271727
271847
  },
271728
271848
  headless: {
271729
271849
  type: "boolean",
271730
- description: "Run the Android emulator without a window. Ignored where not applicable."
271850
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
271731
271851
  },
271732
271852
  orientation: {
271733
271853
  type: "string",
@@ -271781,7 +271901,7 @@ var schemas_default = {
271781
271901
  "safari",
271782
271902
  "webkit"
271783
271903
  ],
271784
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271904
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271785
271905
  },
271786
271906
  browser: {
271787
271907
  type: "object",
@@ -271800,7 +271920,7 @@ var schemas_default = {
271800
271920
  "safari",
271801
271921
  "webkit"
271802
271922
  ],
271803
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
271923
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
271804
271924
  },
271805
271925
  explicit: {
271806
271926
  type: "boolean",
@@ -271940,6 +272060,26 @@ var schemas_default = {
271940
272060
  }
271941
272061
  }
271942
272062
  ]
272063
+ },
272064
+ {
272065
+ platforms: "android"
272066
+ },
272067
+ {
272068
+ platforms: [
272069
+ "windows",
272070
+ "mac",
272071
+ "android",
272072
+ "ios"
272073
+ ],
272074
+ browsers: "chrome"
272075
+ },
272076
+ {
272077
+ platforms: "ios",
272078
+ browsers: "safari",
272079
+ device: {
272080
+ name: "test-iphone",
272081
+ deviceType: "phone"
272082
+ }
271943
272083
  }
271944
272084
  ]
271945
272085
  }
@@ -308316,7 +308456,7 @@ var schemas_default = {
308316
308456
  startSurface: {
308317
308457
  $schema: "http://json-schema.org/draft-07/schema#",
308318
308458
  title: "startSurface",
308319
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
308459
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
308320
308460
  components: {
308321
308461
  schemas: {
308322
308462
  appDescriptor: {
@@ -308368,15 +308508,15 @@ var schemas_default = {
308368
308508
  install: {
308369
308509
  type: "string",
308370
308510
  minLength: 1,
308371
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
308511
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
308372
308512
  },
308373
308513
  activity: {
308374
308514
  type: "string",
308375
308515
  minLength: 1,
308376
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
308516
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
308377
308517
  },
308378
308518
  device: {
308379
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
308519
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
308380
308520
  anyOf: [
308381
308521
  {
308382
308522
  type: "string",
@@ -308409,7 +308549,7 @@ var schemas_default = {
308409
308549
  transform: [
308410
308550
  "trim"
308411
308551
  ],
308412
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
308552
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
308413
308553
  },
308414
308554
  deviceType: {
308415
308555
  type: "string",
@@ -308422,11 +308562,11 @@ var schemas_default = {
308422
308562
  osVersion: {
308423
308563
  type: "string",
308424
308564
  minLength: 1,
308425
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308565
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308426
308566
  },
308427
308567
  headless: {
308428
308568
  type: "boolean",
308429
- description: "Run the Android emulator without a window. Ignored where not applicable."
308569
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
308430
308570
  },
308431
308571
  orientation: {
308432
308572
  type: "string",
@@ -308598,7 +308738,7 @@ var schemas_default = {
308598
308738
  transform: [
308599
308739
  "trim"
308600
308740
  ],
308601
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
308741
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
308602
308742
  },
308603
308743
  deviceType: {
308604
308744
  type: "string",
@@ -308611,11 +308751,11 @@ var schemas_default = {
308611
308751
  osVersion: {
308612
308752
  type: "string",
308613
308753
  minLength: 1,
308614
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308754
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308615
308755
  },
308616
308756
  headless: {
308617
308757
  type: "boolean",
308618
- description: "Run the Android emulator without a window. Ignored where not applicable."
308758
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
308619
308759
  },
308620
308760
  orientation: {
308621
308761
  type: "string",
@@ -308714,15 +308854,15 @@ var schemas_default = {
308714
308854
  install: {
308715
308855
  type: "string",
308716
308856
  minLength: 1,
308717
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
308857
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
308718
308858
  },
308719
308859
  activity: {
308720
308860
  type: "string",
308721
308861
  minLength: 1,
308722
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
308862
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
308723
308863
  },
308724
308864
  device: {
308725
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
308865
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
308726
308866
  anyOf: [
308727
308867
  {
308728
308868
  type: "string",
@@ -308755,7 +308895,7 @@ var schemas_default = {
308755
308895
  transform: [
308756
308896
  "trim"
308757
308897
  ],
308758
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
308898
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
308759
308899
  },
308760
308900
  deviceType: {
308761
308901
  type: "string",
@@ -308768,11 +308908,11 @@ var schemas_default = {
308768
308908
  osVersion: {
308769
308909
  type: "string",
308770
308910
  minLength: 1,
308771
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308911
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
308772
308912
  },
308773
308913
  headless: {
308774
308914
  type: "boolean",
308775
- description: "Run the Android emulator without a window. Ignored where not applicable."
308915
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
308776
308916
  },
308777
308917
  orientation: {
308778
308918
  type: "string",
@@ -314101,7 +314241,7 @@ var schemas_default = {
314101
314241
  "safari",
314102
314242
  "webkit"
314103
314243
  ],
314104
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
314244
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
314105
314245
  },
314106
314246
  explicit: {
314107
314247
  type: "boolean",
@@ -349806,7 +349946,7 @@ var schemas_default = {
349806
349946
  startSurface: {
349807
349947
  $schema: "http://json-schema.org/draft-07/schema#",
349808
349948
  title: "startSurface",
349809
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
349949
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
349810
349950
  components: {
349811
349951
  schemas: {
349812
349952
  appDescriptor: {
@@ -349858,15 +349998,15 @@ var schemas_default = {
349858
349998
  install: {
349859
349999
  type: "string",
349860
350000
  minLength: 1,
349861
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
350001
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
349862
350002
  },
349863
350003
  activity: {
349864
350004
  type: "string",
349865
350005
  minLength: 1,
349866
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
350006
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
349867
350007
  },
349868
350008
  device: {
349869
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
350009
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
349870
350010
  anyOf: [
349871
350011
  {
349872
350012
  type: "string",
@@ -349899,7 +350039,7 @@ var schemas_default = {
349899
350039
  transform: [
349900
350040
  "trim"
349901
350041
  ],
349902
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
350042
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
349903
350043
  },
349904
350044
  deviceType: {
349905
350045
  type: "string",
@@ -349912,11 +350052,11 @@ var schemas_default = {
349912
350052
  osVersion: {
349913
350053
  type: "string",
349914
350054
  minLength: 1,
349915
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
350055
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
349916
350056
  },
349917
350057
  headless: {
349918
350058
  type: "boolean",
349919
- description: "Run the Android emulator without a window. Ignored where not applicable."
350059
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
349920
350060
  },
349921
350061
  orientation: {
349922
350062
  type: "string",
@@ -350088,7 +350228,7 @@ var schemas_default = {
350088
350228
  transform: [
350089
350229
  "trim"
350090
350230
  ],
350091
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
350231
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
350092
350232
  },
350093
350233
  deviceType: {
350094
350234
  type: "string",
@@ -350101,11 +350241,11 @@ var schemas_default = {
350101
350241
  osVersion: {
350102
350242
  type: "string",
350103
350243
  minLength: 1,
350104
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
350244
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
350105
350245
  },
350106
350246
  headless: {
350107
350247
  type: "boolean",
350108
- description: "Run the Android emulator without a window. Ignored where not applicable."
350248
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
350109
350249
  },
350110
350250
  orientation: {
350111
350251
  type: "string",
@@ -350204,15 +350344,15 @@ var schemas_default = {
350204
350344
  install: {
350205
350345
  type: "string",
350206
350346
  minLength: 1,
350207
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
350347
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
350208
350348
  },
350209
350349
  activity: {
350210
350350
  type: "string",
350211
350351
  minLength: 1,
350212
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
350352
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
350213
350353
  },
350214
350354
  device: {
350215
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
350355
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
350216
350356
  anyOf: [
350217
350357
  {
350218
350358
  type: "string",
@@ -350245,7 +350385,7 @@ var schemas_default = {
350245
350385
  transform: [
350246
350386
  "trim"
350247
350387
  ],
350248
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
350388
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
350249
350389
  },
350250
350390
  deviceType: {
350251
350391
  type: "string",
@@ -350258,11 +350398,11 @@ var schemas_default = {
350258
350398
  osVersion: {
350259
350399
  type: "string",
350260
350400
  minLength: 1,
350261
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
350401
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
350262
350402
  },
350263
350403
  headless: {
350264
350404
  type: "boolean",
350265
- description: "Run the Android emulator without a window. Ignored where not applicable."
350405
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
350266
350406
  },
350267
350407
  orientation: {
350268
350408
  type: "string",
@@ -359658,7 +359798,7 @@ var schemas_default = {
359658
359798
  ]
359659
359799
  },
359660
359800
  browsers: {
359661
- description: "Browsers to run tests on.",
359801
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
359662
359802
  anyOf: [
359663
359803
  {
359664
359804
  type: "string",
@@ -359669,7 +359809,7 @@ var schemas_default = {
359669
359809
  "safari",
359670
359810
  "webkit"
359671
359811
  ],
359672
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
359812
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
359673
359813
  },
359674
359814
  {
359675
359815
  type: "object",
@@ -359688,7 +359828,7 @@ var schemas_default = {
359688
359828
  "safari",
359689
359829
  "webkit"
359690
359830
  ],
359691
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
359831
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
359692
359832
  },
359693
359833
  explicit: {
359694
359834
  type: "boolean",
@@ -359748,7 +359888,7 @@ var schemas_default = {
359748
359888
  "safari",
359749
359889
  "webkit"
359750
359890
  ],
359751
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
359891
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
359752
359892
  },
359753
359893
  {
359754
359894
  type: "object",
@@ -359767,7 +359907,7 @@ var schemas_default = {
359767
359907
  "safari",
359768
359908
  "webkit"
359769
359909
  ],
359770
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
359910
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
359771
359911
  },
359772
359912
  explicit: {
359773
359913
  type: "boolean",
@@ -359943,7 +360083,7 @@ var schemas_default = {
359943
360083
  ]
359944
360084
  },
359945
360085
  device: {
359946
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
360086
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
359947
360087
  examples: [
359948
360088
  "pixel7",
359949
360089
  {
@@ -359982,7 +360122,7 @@ var schemas_default = {
359982
360122
  transform: [
359983
360123
  "trim"
359984
360124
  ],
359985
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
360125
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
359986
360126
  },
359987
360127
  deviceType: {
359988
360128
  type: "string",
@@ -359995,11 +360135,11 @@ var schemas_default = {
359995
360135
  osVersion: {
359996
360136
  type: "string",
359997
360137
  minLength: 1,
359998
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
360138
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
359999
360139
  },
360000
360140
  headless: {
360001
360141
  type: "boolean",
360002
- description: "Run the Android emulator without a window. Ignored where not applicable."
360142
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
360003
360143
  },
360004
360144
  orientation: {
360005
360145
  type: "string",
@@ -360053,7 +360193,7 @@ var schemas_default = {
360053
360193
  "safari",
360054
360194
  "webkit"
360055
360195
  ],
360056
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360196
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360057
360197
  },
360058
360198
  browser: {
360059
360199
  type: "object",
@@ -360072,7 +360212,7 @@ var schemas_default = {
360072
360212
  "safari",
360073
360213
  "webkit"
360074
360214
  ],
360075
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360215
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360076
360216
  },
360077
360217
  explicit: {
360078
360218
  type: "boolean",
@@ -360212,6 +360352,26 @@ var schemas_default = {
360212
360352
  }
360213
360353
  }
360214
360354
  ]
360355
+ },
360356
+ {
360357
+ platforms: "android"
360358
+ },
360359
+ {
360360
+ platforms: [
360361
+ "windows",
360362
+ "mac",
360363
+ "android",
360364
+ "ios"
360365
+ ],
360366
+ browsers: "chrome"
360367
+ },
360368
+ {
360369
+ platforms: "ios",
360370
+ browsers: "safari",
360371
+ device: {
360372
+ name: "test-iphone",
360373
+ deviceType: "phone"
360374
+ }
360215
360375
  }
360216
360376
  ]
360217
360377
  }
@@ -360500,7 +360660,7 @@ var schemas_default = {
360500
360660
  ]
360501
360661
  },
360502
360662
  browsers: {
360503
- description: "Browsers to run tests on.",
360663
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
360504
360664
  anyOf: [
360505
360665
  {
360506
360666
  type: "string",
@@ -360511,7 +360671,7 @@ var schemas_default = {
360511
360671
  "safari",
360512
360672
  "webkit"
360513
360673
  ],
360514
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360674
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360515
360675
  },
360516
360676
  {
360517
360677
  type: "object",
@@ -360530,7 +360690,7 @@ var schemas_default = {
360530
360690
  "safari",
360531
360691
  "webkit"
360532
360692
  ],
360533
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360693
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360534
360694
  },
360535
360695
  explicit: {
360536
360696
  type: "boolean",
@@ -360590,7 +360750,7 @@ var schemas_default = {
360590
360750
  "safari",
360591
360751
  "webkit"
360592
360752
  ],
360593
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360753
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360594
360754
  },
360595
360755
  {
360596
360756
  type: "object",
@@ -360609,7 +360769,7 @@ var schemas_default = {
360609
360769
  "safari",
360610
360770
  "webkit"
360611
360771
  ],
360612
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
360772
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360613
360773
  },
360614
360774
  explicit: {
360615
360775
  type: "boolean",
@@ -360785,7 +360945,7 @@ var schemas_default = {
360785
360945
  ]
360786
360946
  },
360787
360947
  device: {
360788
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
360948
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
360789
360949
  examples: [
360790
360950
  "pixel7",
360791
360951
  {
@@ -360824,7 +360984,7 @@ var schemas_default = {
360824
360984
  transform: [
360825
360985
  "trim"
360826
360986
  ],
360827
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
360987
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
360828
360988
  },
360829
360989
  deviceType: {
360830
360990
  type: "string",
@@ -360837,11 +360997,11 @@ var schemas_default = {
360837
360997
  osVersion: {
360838
360998
  type: "string",
360839
360999
  minLength: 1,
360840
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
361000
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
360841
361001
  },
360842
361002
  headless: {
360843
361003
  type: "boolean",
360844
- description: "Run the Android emulator without a window. Ignored where not applicable."
361004
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
360845
361005
  },
360846
361006
  orientation: {
360847
361007
  type: "string",
@@ -360895,7 +361055,7 @@ var schemas_default = {
360895
361055
  "safari",
360896
361056
  "webkit"
360897
361057
  ],
360898
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
361058
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360899
361059
  },
360900
361060
  browser: {
360901
361061
  type: "object",
@@ -360914,7 +361074,7 @@ var schemas_default = {
360914
361074
  "safari",
360915
361075
  "webkit"
360916
361076
  ],
360917
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
361077
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
360918
361078
  },
360919
361079
  explicit: {
360920
361080
  type: "boolean",
@@ -361054,6 +361214,26 @@ var schemas_default = {
361054
361214
  }
361055
361215
  }
361056
361216
  ]
361217
+ },
361218
+ {
361219
+ platforms: "android"
361220
+ },
361221
+ {
361222
+ platforms: [
361223
+ "windows",
361224
+ "mac",
361225
+ "android",
361226
+ "ios"
361227
+ ],
361228
+ browsers: "chrome"
361229
+ },
361230
+ {
361231
+ platforms: "ios",
361232
+ browsers: "safari",
361233
+ device: {
361234
+ name: "test-iphone",
361235
+ deviceType: "phone"
361236
+ }
361057
361237
  }
361058
361238
  ]
361059
361239
  }
@@ -397430,7 +397610,7 @@ var schemas_default = {
397430
397610
  startSurface: {
397431
397611
  $schema: "http://json-schema.org/draft-07/schema#",
397432
397612
  title: "startSurface",
397433
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
397613
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
397434
397614
  components: {
397435
397615
  schemas: {
397436
397616
  appDescriptor: {
@@ -397482,15 +397662,15 @@ var schemas_default = {
397482
397662
  install: {
397483
397663
  type: "string",
397484
397664
  minLength: 1,
397485
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
397665
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
397486
397666
  },
397487
397667
  activity: {
397488
397668
  type: "string",
397489
397669
  minLength: 1,
397490
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
397670
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
397491
397671
  },
397492
397672
  device: {
397493
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
397673
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
397494
397674
  anyOf: [
397495
397675
  {
397496
397676
  type: "string",
@@ -397523,7 +397703,7 @@ var schemas_default = {
397523
397703
  transform: [
397524
397704
  "trim"
397525
397705
  ],
397526
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
397706
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
397527
397707
  },
397528
397708
  deviceType: {
397529
397709
  type: "string",
@@ -397536,11 +397716,11 @@ var schemas_default = {
397536
397716
  osVersion: {
397537
397717
  type: "string",
397538
397718
  minLength: 1,
397539
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
397719
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
397540
397720
  },
397541
397721
  headless: {
397542
397722
  type: "boolean",
397543
- description: "Run the Android emulator without a window. Ignored where not applicable."
397723
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
397544
397724
  },
397545
397725
  orientation: {
397546
397726
  type: "string",
@@ -397712,7 +397892,7 @@ var schemas_default = {
397712
397892
  transform: [
397713
397893
  "trim"
397714
397894
  ],
397715
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
397895
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
397716
397896
  },
397717
397897
  deviceType: {
397718
397898
  type: "string",
@@ -397725,11 +397905,11 @@ var schemas_default = {
397725
397905
  osVersion: {
397726
397906
  type: "string",
397727
397907
  minLength: 1,
397728
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
397908
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
397729
397909
  },
397730
397910
  headless: {
397731
397911
  type: "boolean",
397732
- description: "Run the Android emulator without a window. Ignored where not applicable."
397912
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
397733
397913
  },
397734
397914
  orientation: {
397735
397915
  type: "string",
@@ -397828,15 +398008,15 @@ var schemas_default = {
397828
398008
  install: {
397829
398009
  type: "string",
397830
398010
  minLength: 1,
397831
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
398011
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
397832
398012
  },
397833
398013
  activity: {
397834
398014
  type: "string",
397835
398015
  minLength: 1,
397836
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
398016
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
397837
398017
  },
397838
398018
  device: {
397839
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
398019
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
397840
398020
  anyOf: [
397841
398021
  {
397842
398022
  type: "string",
@@ -397869,7 +398049,7 @@ var schemas_default = {
397869
398049
  transform: [
397870
398050
  "trim"
397871
398051
  ],
397872
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
398052
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
397873
398053
  },
397874
398054
  deviceType: {
397875
398055
  type: "string",
@@ -397882,11 +398062,11 @@ var schemas_default = {
397882
398062
  osVersion: {
397883
398063
  type: "string",
397884
398064
  minLength: 1,
397885
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
398065
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
397886
398066
  },
397887
398067
  headless: {
397888
398068
  type: "boolean",
397889
- description: "Run the Android emulator without a window. Ignored where not applicable."
398069
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
397890
398070
  },
397891
398071
  orientation: {
397892
398072
  type: "string",
@@ -403215,7 +403395,7 @@ var schemas_default = {
403215
403395
  "safari",
403216
403396
  "webkit"
403217
403397
  ],
403218
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
403398
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
403219
403399
  },
403220
403400
  explicit: {
403221
403401
  type: "boolean",
@@ -438920,7 +439100,7 @@ var schemas_default = {
438920
439100
  startSurface: {
438921
439101
  $schema: "http://json-schema.org/draft-07/schema#",
438922
439102
  title: "startSurface",
438923
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
439103
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
438924
439104
  components: {
438925
439105
  schemas: {
438926
439106
  appDescriptor: {
@@ -438972,15 +439152,15 @@ var schemas_default = {
438972
439152
  install: {
438973
439153
  type: "string",
438974
439154
  minLength: 1,
438975
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
439155
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
438976
439156
  },
438977
439157
  activity: {
438978
439158
  type: "string",
438979
439159
  minLength: 1,
438980
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
439160
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
438981
439161
  },
438982
439162
  device: {
438983
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
439163
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
438984
439164
  anyOf: [
438985
439165
  {
438986
439166
  type: "string",
@@ -439013,7 +439193,7 @@ var schemas_default = {
439013
439193
  transform: [
439014
439194
  "trim"
439015
439195
  ],
439016
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
439196
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
439017
439197
  },
439018
439198
  deviceType: {
439019
439199
  type: "string",
@@ -439026,11 +439206,11 @@ var schemas_default = {
439026
439206
  osVersion: {
439027
439207
  type: "string",
439028
439208
  minLength: 1,
439029
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439209
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439030
439210
  },
439031
439211
  headless: {
439032
439212
  type: "boolean",
439033
- description: "Run the Android emulator without a window. Ignored where not applicable."
439213
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
439034
439214
  },
439035
439215
  orientation: {
439036
439216
  type: "string",
@@ -439202,7 +439382,7 @@ var schemas_default = {
439202
439382
  transform: [
439203
439383
  "trim"
439204
439384
  ],
439205
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
439385
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
439206
439386
  },
439207
439387
  deviceType: {
439208
439388
  type: "string",
@@ -439215,11 +439395,11 @@ var schemas_default = {
439215
439395
  osVersion: {
439216
439396
  type: "string",
439217
439397
  minLength: 1,
439218
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439398
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439219
439399
  },
439220
439400
  headless: {
439221
439401
  type: "boolean",
439222
- description: "Run the Android emulator without a window. Ignored where not applicable."
439402
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
439223
439403
  },
439224
439404
  orientation: {
439225
439405
  type: "string",
@@ -439318,15 +439498,15 @@ var schemas_default = {
439318
439498
  install: {
439319
439499
  type: "string",
439320
439500
  minLength: 1,
439321
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
439501
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
439322
439502
  },
439323
439503
  activity: {
439324
439504
  type: "string",
439325
439505
  minLength: 1,
439326
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
439506
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
439327
439507
  },
439328
439508
  device: {
439329
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
439509
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
439330
439510
  anyOf: [
439331
439511
  {
439332
439512
  type: "string",
@@ -439359,7 +439539,7 @@ var schemas_default = {
439359
439539
  transform: [
439360
439540
  "trim"
439361
439541
  ],
439362
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
439542
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
439363
439543
  },
439364
439544
  deviceType: {
439365
439545
  type: "string",
@@ -439372,11 +439552,11 @@ var schemas_default = {
439372
439552
  osVersion: {
439373
439553
  type: "string",
439374
439554
  minLength: 1,
439375
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439555
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
439376
439556
  },
439377
439557
  headless: {
439378
439558
  type: "boolean",
439379
- description: "Run the Android emulator without a window. Ignored where not applicable."
439559
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
439380
439560
  },
439381
439561
  orientation: {
439382
439562
  type: "string",
@@ -445216,7 +445396,7 @@ var schemas_default = {
445216
445396
  startSurface_v3: {
445217
445397
  $schema: "http://json-schema.org/draft-07/schema#",
445218
445398
  title: "startSurface",
445219
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
445399
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
445220
445400
  components: {
445221
445401
  schemas: {
445222
445402
  appDescriptor: {
@@ -445268,15 +445448,15 @@ var schemas_default = {
445268
445448
  install: {
445269
445449
  type: "string",
445270
445450
  minLength: 1,
445271
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
445451
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
445272
445452
  },
445273
445453
  activity: {
445274
445454
  type: "string",
445275
445455
  minLength: 1,
445276
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
445456
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
445277
445457
  },
445278
445458
  device: {
445279
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
445459
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
445280
445460
  anyOf: [
445281
445461
  {
445282
445462
  type: "string",
@@ -445309,7 +445489,7 @@ var schemas_default = {
445309
445489
  transform: [
445310
445490
  "trim"
445311
445491
  ],
445312
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
445492
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
445313
445493
  },
445314
445494
  deviceType: {
445315
445495
  type: "string",
@@ -445322,11 +445502,11 @@ var schemas_default = {
445322
445502
  osVersion: {
445323
445503
  type: "string",
445324
445504
  minLength: 1,
445325
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445505
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445326
445506
  },
445327
445507
  headless: {
445328
445508
  type: "boolean",
445329
- description: "Run the Android emulator without a window. Ignored where not applicable."
445509
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
445330
445510
  },
445331
445511
  orientation: {
445332
445512
  type: "string",
@@ -445498,7 +445678,7 @@ var schemas_default = {
445498
445678
  transform: [
445499
445679
  "trim"
445500
445680
  ],
445501
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
445681
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
445502
445682
  },
445503
445683
  deviceType: {
445504
445684
  type: "string",
@@ -445511,11 +445691,11 @@ var schemas_default = {
445511
445691
  osVersion: {
445512
445692
  type: "string",
445513
445693
  minLength: 1,
445514
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445694
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445515
445695
  },
445516
445696
  headless: {
445517
445697
  type: "boolean",
445518
- description: "Run the Android emulator without a window. Ignored where not applicable."
445698
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
445519
445699
  },
445520
445700
  orientation: {
445521
445701
  type: "string",
@@ -445614,15 +445794,15 @@ var schemas_default = {
445614
445794
  install: {
445615
445795
  type: "string",
445616
445796
  minLength: 1,
445617
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
445797
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
445618
445798
  },
445619
445799
  activity: {
445620
445800
  type: "string",
445621
445801
  minLength: 1,
445622
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
445802
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
445623
445803
  },
445624
445804
  device: {
445625
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
445805
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
445626
445806
  anyOf: [
445627
445807
  {
445628
445808
  type: "string",
@@ -445655,7 +445835,7 @@ var schemas_default = {
445655
445835
  transform: [
445656
445836
  "trim"
445657
445837
  ],
445658
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
445838
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
445659
445839
  },
445660
445840
  deviceType: {
445661
445841
  type: "string",
@@ -445668,11 +445848,11 @@ var schemas_default = {
445668
445848
  osVersion: {
445669
445849
  type: "string",
445670
445850
  minLength: 1,
445671
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445851
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
445672
445852
  },
445673
445853
  headless: {
445674
445854
  type: "boolean",
445675
- description: "Run the Android emulator without a window. Ignored where not applicable."
445855
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
445676
445856
  },
445677
445857
  orientation: {
445678
445858
  type: "string",
@@ -481296,7 +481476,7 @@ var schemas_default = {
481296
481476
  startSurface: {
481297
481477
  $schema: "http://json-schema.org/draft-07/schema#",
481298
481478
  title: "startSurface",
481299
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
481479
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
481300
481480
  components: {
481301
481481
  schemas: {
481302
481482
  appDescriptor: {
@@ -481348,15 +481528,15 @@ var schemas_default = {
481348
481528
  install: {
481349
481529
  type: "string",
481350
481530
  minLength: 1,
481351
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
481531
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
481352
481532
  },
481353
481533
  activity: {
481354
481534
  type: "string",
481355
481535
  minLength: 1,
481356
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
481536
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
481357
481537
  },
481358
481538
  device: {
481359
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
481539
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
481360
481540
  anyOf: [
481361
481541
  {
481362
481542
  type: "string",
@@ -481389,7 +481569,7 @@ var schemas_default = {
481389
481569
  transform: [
481390
481570
  "trim"
481391
481571
  ],
481392
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
481572
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
481393
481573
  },
481394
481574
  deviceType: {
481395
481575
  type: "string",
@@ -481402,11 +481582,11 @@ var schemas_default = {
481402
481582
  osVersion: {
481403
481583
  type: "string",
481404
481584
  minLength: 1,
481405
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481585
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481406
481586
  },
481407
481587
  headless: {
481408
481588
  type: "boolean",
481409
- description: "Run the Android emulator without a window. Ignored where not applicable."
481589
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
481410
481590
  },
481411
481591
  orientation: {
481412
481592
  type: "string",
@@ -481578,7 +481758,7 @@ var schemas_default = {
481578
481758
  transform: [
481579
481759
  "trim"
481580
481760
  ],
481581
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
481761
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
481582
481762
  },
481583
481763
  deviceType: {
481584
481764
  type: "string",
@@ -481591,11 +481771,11 @@ var schemas_default = {
481591
481771
  osVersion: {
481592
481772
  type: "string",
481593
481773
  minLength: 1,
481594
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481774
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481595
481775
  },
481596
481776
  headless: {
481597
481777
  type: "boolean",
481598
- description: "Run the Android emulator without a window. Ignored where not applicable."
481778
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
481599
481779
  },
481600
481780
  orientation: {
481601
481781
  type: "string",
@@ -481694,15 +481874,15 @@ var schemas_default = {
481694
481874
  install: {
481695
481875
  type: "string",
481696
481876
  minLength: 1,
481697
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
481877
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
481698
481878
  },
481699
481879
  activity: {
481700
481880
  type: "string",
481701
481881
  minLength: 1,
481702
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
481882
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
481703
481883
  },
481704
481884
  device: {
481705
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
481885
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
481706
481886
  anyOf: [
481707
481887
  {
481708
481888
  type: "string",
@@ -481735,7 +481915,7 @@ var schemas_default = {
481735
481915
  transform: [
481736
481916
  "trim"
481737
481917
  ],
481738
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
481918
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
481739
481919
  },
481740
481920
  deviceType: {
481741
481921
  type: "string",
@@ -481748,11 +481928,11 @@ var schemas_default = {
481748
481928
  osVersion: {
481749
481929
  type: "string",
481750
481930
  minLength: 1,
481751
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481931
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
481752
481932
  },
481753
481933
  headless: {
481754
481934
  type: "boolean",
481755
- description: "Run the Android emulator without a window. Ignored where not applicable."
481935
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
481756
481936
  },
481757
481937
  orientation: {
481758
481938
  type: "string",
@@ -487805,7 +487985,7 @@ var schemas_default = {
487805
487985
  ]
487806
487986
  },
487807
487987
  browsers: {
487808
- description: "Browsers to run tests on.",
487988
+ description: "Browsers to run tests on. On a mobile (`android`/`ios`) platform entry, the browser runs on the managed device: `chrome` on Android, `safari` on iOS (other combinations skip the context), and it fills in automatically when omitted. Device browsers don't take desktop display config: authored `window`/`viewport` dimensions and `headless: false` are rejected on mobile entries (the device owns its display \u2014 control it via the device descriptor's `headless`/`deviceType`); `headless: true` matches this schema's default and is ignored.",
487809
487989
  anyOf: [
487810
487990
  {
487811
487991
  type: "string",
@@ -487816,7 +487996,7 @@ var schemas_default = {
487816
487996
  "safari",
487817
487997
  "webkit"
487818
487998
  ],
487819
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
487999
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
487820
488000
  },
487821
488001
  {
487822
488002
  type: "object",
@@ -487835,7 +488015,7 @@ var schemas_default = {
487835
488015
  "safari",
487836
488016
  "webkit"
487837
488017
  ],
487838
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
488018
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
487839
488019
  },
487840
488020
  explicit: {
487841
488021
  type: "boolean",
@@ -487895,7 +488075,7 @@ var schemas_default = {
487895
488075
  "safari",
487896
488076
  "webkit"
487897
488077
  ],
487898
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
488078
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
487899
488079
  },
487900
488080
  {
487901
488081
  type: "object",
@@ -487914,7 +488094,7 @@ var schemas_default = {
487914
488094
  "safari",
487915
488095
  "webkit"
487916
488096
  ],
487917
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
488097
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
487918
488098
  },
487919
488099
  explicit: {
487920
488100
  type: "boolean",
@@ -488090,7 +488270,7 @@ var schemas_default = {
488090
488270
  ]
488091
488271
  },
488092
488272
  device: {
488093
- description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android`). Same shape as `startSurface.device`.",
488273
+ description: "Default device for a mobile (`android`/`ios`) context. A string references a device by name; an object refines it. The `platform` is implied by the context, so it is not required here. When the named device doesn't already exist, Doc Detective creates it with defaults (see `deviceType`/`osVersion`), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`). Same shape as `startSurface.device`.",
488094
488274
  examples: [
488095
488275
  "pixel7",
488096
488276
  {
@@ -488129,7 +488309,7 @@ var schemas_default = {
488129
488309
  transform: [
488130
488310
  "trim"
488131
488311
  ],
488132
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
488312
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
488133
488313
  },
488134
488314
  deviceType: {
488135
488315
  type: "string",
@@ -488142,11 +488322,11 @@ var schemas_default = {
488142
488322
  osVersion: {
488143
488323
  type: "string",
488144
488324
  minLength: 1,
488145
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
488325
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
488146
488326
  },
488147
488327
  headless: {
488148
488328
  type: "boolean",
488149
- description: "Run the Android emulator without a window. Ignored where not applicable."
488329
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
488150
488330
  },
488151
488331
  orientation: {
488152
488332
  type: "string",
@@ -488200,7 +488380,7 @@ var schemas_default = {
488200
488380
  "safari",
488201
488381
  "webkit"
488202
488382
  ],
488203
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
488383
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
488204
488384
  },
488205
488385
  browser: {
488206
488386
  type: "object",
@@ -488219,7 +488399,7 @@ var schemas_default = {
488219
488399
  "safari",
488220
488400
  "webkit"
488221
488401
  ],
488222
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
488402
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
488223
488403
  },
488224
488404
  explicit: {
488225
488405
  type: "boolean",
@@ -488359,6 +488539,26 @@ var schemas_default = {
488359
488539
  }
488360
488540
  }
488361
488541
  ]
488542
+ },
488543
+ {
488544
+ platforms: "android"
488545
+ },
488546
+ {
488547
+ platforms: [
488548
+ "windows",
488549
+ "mac",
488550
+ "android",
488551
+ "ios"
488552
+ ],
488553
+ browsers: "chrome"
488554
+ },
488555
+ {
488556
+ platforms: "ios",
488557
+ browsers: "safari",
488558
+ device: {
488559
+ name: "test-iphone",
488560
+ deviceType: "phone"
488561
+ }
488362
488562
  }
488363
488563
  ]
488364
488564
  }
@@ -524735,7 +524935,7 @@ var schemas_default = {
524735
524935
  startSurface: {
524736
524936
  $schema: "http://json-schema.org/draft-07/schema#",
524737
524937
  title: "startSurface",
524738
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
524938
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
524739
524939
  components: {
524740
524940
  schemas: {
524741
524941
  appDescriptor: {
@@ -524787,15 +524987,15 @@ var schemas_default = {
524787
524987
  install: {
524788
524988
  type: "string",
524789
524989
  minLength: 1,
524790
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
524990
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
524791
524991
  },
524792
524992
  activity: {
524793
524993
  type: "string",
524794
524994
  minLength: 1,
524795
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
524995
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
524796
524996
  },
524797
524997
  device: {
524798
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
524998
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
524799
524999
  anyOf: [
524800
525000
  {
524801
525001
  type: "string",
@@ -524828,7 +525028,7 @@ var schemas_default = {
524828
525028
  transform: [
524829
525029
  "trim"
524830
525030
  ],
524831
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
525031
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
524832
525032
  },
524833
525033
  deviceType: {
524834
525034
  type: "string",
@@ -524841,11 +525041,11 @@ var schemas_default = {
524841
525041
  osVersion: {
524842
525042
  type: "string",
524843
525043
  minLength: 1,
524844
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
525044
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
524845
525045
  },
524846
525046
  headless: {
524847
525047
  type: "boolean",
524848
- description: "Run the Android emulator without a window. Ignored where not applicable."
525048
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
524849
525049
  },
524850
525050
  orientation: {
524851
525051
  type: "string",
@@ -525017,7 +525217,7 @@ var schemas_default = {
525017
525217
  transform: [
525018
525218
  "trim"
525019
525219
  ],
525020
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
525220
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
525021
525221
  },
525022
525222
  deviceType: {
525023
525223
  type: "string",
@@ -525030,11 +525230,11 @@ var schemas_default = {
525030
525230
  osVersion: {
525031
525231
  type: "string",
525032
525232
  minLength: 1,
525033
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
525233
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
525034
525234
  },
525035
525235
  headless: {
525036
525236
  type: "boolean",
525037
- description: "Run the Android emulator without a window. Ignored where not applicable."
525237
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
525038
525238
  },
525039
525239
  orientation: {
525040
525240
  type: "string",
@@ -525133,15 +525333,15 @@ var schemas_default = {
525133
525333
  install: {
525134
525334
  type: "string",
525135
525335
  minLength: 1,
525136
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
525336
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
525137
525337
  },
525138
525338
  activity: {
525139
525339
  type: "string",
525140
525340
  minLength: 1,
525141
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
525341
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
525142
525342
  },
525143
525343
  device: {
525144
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
525344
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
525145
525345
  anyOf: [
525146
525346
  {
525147
525347
  type: "string",
@@ -525174,7 +525374,7 @@ var schemas_default = {
525174
525374
  transform: [
525175
525375
  "trim"
525176
525376
  ],
525177
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
525377
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
525178
525378
  },
525179
525379
  deviceType: {
525180
525380
  type: "string",
@@ -525187,11 +525387,11 @@ var schemas_default = {
525187
525387
  osVersion: {
525188
525388
  type: "string",
525189
525389
  minLength: 1,
525190
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
525390
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
525191
525391
  },
525192
525392
  headless: {
525193
525393
  type: "boolean",
525194
- description: "Run the Android emulator without a window. Ignored where not applicable."
525394
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
525195
525395
  },
525196
525396
  orientation: {
525197
525397
  type: "string",
@@ -530520,7 +530720,7 @@ var schemas_default = {
530520
530720
  "safari",
530521
530721
  "webkit"
530522
530722
  ],
530523
- $comment: "`safari` is just a shortcut for `webkit`. Included for visibility and to reduce questions."
530723
+ $comment: "On desktop platforms `safari` is a shortcut for the `webkit` engine. On an `ios` platform entry, `safari` means the real Safari browser on the managed simulator (`webkit` is not supported there). On `android`, `chrome` is the supported browser."
530524
530724
  },
530525
530725
  explicit: {
530526
530726
  type: "boolean",
@@ -566225,7 +566425,7 @@ var schemas_default = {
566225
566425
  startSurface: {
566226
566426
  $schema: "http://json-schema.org/draft-07/schema#",
566227
566427
  title: "startSurface",
566228
- description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator via the `device`, `install`, and `activity` fields (iOS lands in A4). Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
566428
+ description: "Open (provision) a surface and register it by name so later steps can target it with `surface`. Phases A1\u2013A2 ship the desktop native app branch: launch a Windows or macOS application by executable path, `.app` path, bundle ID, or UWP AppUserModelID. macOS additionally requires the Accessibility permission for the process that runs Doc Detective (System Settings \u2192 Privacy & Security \u2192 Accessibility); without it the context lands as SKIPPED with a walkthrough. Phase A3 adds Android apps on a managed emulator, and phase A4 adds iOS app surfaces on macOS via XCUITest/simctl. Browser/process branches and the parallel array form arrive with multi-surface Phase 6. See docs/design/native-app-surfaces.md.",
566229
566429
  components: {
566230
566430
  schemas: {
566231
566431
  appDescriptor: {
@@ -566277,15 +566477,15 @@ var schemas_default = {
566277
566477
  install: {
566278
566478
  type: "string",
566279
566479
  minLength: 1,
566280
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
566480
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
566281
566481
  },
566282
566482
  activity: {
566283
566483
  type: "string",
566284
566484
  minLength: 1,
566285
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
566485
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
566286
566486
  },
566287
566487
  device: {
566288
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
566488
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
566289
566489
  anyOf: [
566290
566490
  {
566291
566491
  type: "string",
@@ -566318,7 +566518,7 @@ var schemas_default = {
566318
566518
  transform: [
566319
566519
  "trim"
566320
566520
  ],
566321
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
566521
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
566322
566522
  },
566323
566523
  deviceType: {
566324
566524
  type: "string",
@@ -566331,11 +566531,11 @@ var schemas_default = {
566331
566531
  osVersion: {
566332
566532
  type: "string",
566333
566533
  minLength: 1,
566334
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566534
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566335
566535
  },
566336
566536
  headless: {
566337
566537
  type: "boolean",
566338
- description: "Run the Android emulator without a window. Ignored where not applicable."
566538
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
566339
566539
  },
566340
566540
  orientation: {
566341
566541
  type: "string",
@@ -566507,7 +566707,7 @@ var schemas_default = {
566507
566707
  transform: [
566508
566708
  "trim"
566509
566709
  ],
566510
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
566710
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
566511
566711
  },
566512
566712
  deviceType: {
566513
566713
  type: "string",
@@ -566520,11 +566720,11 @@ var schemas_default = {
566520
566720
  osVersion: {
566521
566721
  type: "string",
566522
566722
  minLength: 1,
566523
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566723
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566524
566724
  },
566525
566725
  headless: {
566526
566726
  type: "boolean",
566527
- description: "Run the Android emulator without a window. Ignored where not applicable."
566727
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
566528
566728
  },
566529
566729
  orientation: {
566530
566730
  type: "string",
@@ -566623,15 +566823,15 @@ var schemas_default = {
566623
566823
  install: {
566624
566824
  type: "string",
566625
566825
  minLength: 1,
566626
- description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Lands with the Android phase (A3); on other platforms it is validated but not yet honored."
566826
+ description: "Path to an installable artifact (`.apk`/`.app`/`.ipa`) to install on the device before launch. Supported on Android and iOS app surfaces."
566627
566827
  },
566628
566828
  activity: {
566629
566829
  type: "string",
566630
566830
  minLength: 1,
566631
- description: "Android main activity override (defaults to the package's launcher activity). Lands with the Android phase (A3)."
566831
+ description: "Android main activity override (defaults to the package's launcher activity). Android-only."
566632
566832
  },
566633
566833
  device: {
566634
- description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Lands with the Android phase (A3).",
566834
+ description: "Device the app runs on. Omit for a host desktop app, or (in a mobile context) to use the context's default device. A string references a device by name; an object refines it. Supported on Android and iOS mobile targets.",
566635
566835
  anyOf: [
566636
566836
  {
566637
566837
  type: "string",
@@ -566664,7 +566864,7 @@ var schemas_default = {
566664
566864
  transform: [
566665
566865
  "trim"
566666
566866
  ],
566667
- description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain and a matching system image are installed (`doc-detective install android`)."
566867
+ description: "Device name and registry identity \u2014 the same name resolves to the same device. Reference form: names an existing AVD (Android) / simulator (iOS) to reuse. If no device by this name exists, Doc Detective creates one under this name using `deviceType`/`osVersion` (or their defaults), provided the toolchain is installed (`doc-detective install android` or `doc-detective install ios`)."
566668
566868
  },
566669
566869
  deviceType: {
566670
566870
  type: "string",
@@ -566677,11 +566877,11 @@ var schemas_default = {
566677
566877
  osVersion: {
566678
566878
  type: "string",
566679
566879
  minLength: 1,
566680
- description: "Platform version used when creating a device; must match an installed system image (install more with `doc-detective install android`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566880
+ description: "Platform version used when creating a device; must match an installed image/runtime for the target platform (install more with `doc-detective install android` or `doc-detective install ios`). Ignored when `name` already matches an existing device. Default: the newest installed version."
566681
566881
  },
566682
566882
  headless: {
566683
566883
  type: "boolean",
566684
- description: "Run the Android emulator without a window. Ignored where not applicable."
566884
+ description: "Run the Android emulator without a window. No-op on iOS (simulators boot without the Simulator UI on CI) and ignored where not applicable."
566685
566885
  },
566686
566886
  orientation: {
566687
566887
  type: "string",