@parity/product-lab 0.0.1-placeholder → 0.1.1

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.
Files changed (2987) hide show
  1. package/CHANGELOG.md +1000 -0
  2. package/LICENSE +204 -0
  3. package/README.md +325 -2
  4. package/adapters/browser/playwright/README.md +214 -0
  5. package/adapters/browser/playwright/src/axe-scan.d.ts +6 -0
  6. package/adapters/browser/playwright/src/axe-scan.js +41 -0
  7. package/adapters/browser/playwright/src/bytes.d.ts +1 -0
  8. package/adapters/browser/playwright/src/bytes.js +5 -0
  9. package/adapters/browser/playwright/src/conditioned-socket.d.ts +28 -0
  10. package/adapters/browser/playwright/src/conditioned-socket.js +40 -0
  11. package/adapters/browser/playwright/src/devices.d.ts +14 -0
  12. package/adapters/browser/playwright/src/devices.js +24 -0
  13. package/adapters/browser/playwright/src/errors.d.ts +2 -0
  14. package/adapters/browser/playwright/src/errors.js +6 -0
  15. package/adapters/browser/playwright/src/evidence-url.d.ts +4 -0
  16. package/adapters/browser/playwright/src/evidence-url.js +29 -0
  17. package/adapters/browser/playwright/src/faithful-web-socket.d.ts +2 -0
  18. package/adapters/browser/playwright/src/faithful-web-socket.js +9 -0
  19. package/adapters/browser/playwright/src/free-loopback-port.d.ts +2 -0
  20. package/adapters/browser/playwright/src/free-loopback-port.js +13 -0
  21. package/adapters/browser/playwright/src/headless-app-surface.d.ts +30 -0
  22. package/adapters/browser/playwright/src/headless-app-surface.js +68 -0
  23. package/adapters/browser/playwright/src/index.d.ts +16 -0
  24. package/adapters/browser/playwright/src/index.js +18 -0
  25. package/adapters/browser/playwright/src/native-rtc.d.ts +11 -0
  26. package/adapters/browser/playwright/src/native-rtc.js +89 -0
  27. package/adapters/browser/playwright/src/network-evidence.d.ts +25 -0
  28. package/adapters/browser/playwright/src/network-evidence.js +575 -0
  29. package/adapters/browser/playwright/src/page-conditions.d.ts +37 -0
  30. package/adapters/browser/playwright/src/page-conditions.js +81 -0
  31. package/adapters/browser/playwright/src/page-console-watch.d.ts +12 -0
  32. package/adapters/browser/playwright/src/page-console-watch.js +43 -0
  33. package/adapters/browser/playwright/src/page-frame-capture.d.ts +32 -0
  34. package/adapters/browser/playwright/src/page-frame-capture.js +87 -0
  35. package/adapters/browser/playwright/src/page-video.d.ts +15 -0
  36. package/adapters/browser/playwright/src/page-video.js +25 -0
  37. package/adapters/browser/playwright/src/playwright-browser-context.d.ts +20 -0
  38. package/adapters/browser/playwright/src/playwright-browser-context.js +44 -0
  39. package/adapters/browser/playwright/src/playwright-browser-launcher.d.ts +9 -0
  40. package/adapters/browser/playwright/src/playwright-browser-launcher.js +53 -0
  41. package/adapters/browser/playwright/src/playwright-browser.d.ts +57 -0
  42. package/adapters/browser/playwright/src/playwright-browser.js +71 -0
  43. package/adapters/browser/playwright/src/playwright-page.d.ts +68 -0
  44. package/adapters/browser/playwright/src/playwright-page.js +111 -0
  45. package/adapters/browser/playwright/src/playwright-route.d.ts +13 -0
  46. package/adapters/browser/playwright/src/playwright-route.js +29 -0
  47. package/adapters/browser/playwright/src/playwright-slide-renderer.d.ts +11 -0
  48. package/adapters/browser/playwright/src/playwright-slide-renderer.js +26 -0
  49. package/adapters/browser/playwright/src/playwright-web-socket-route.d.ts +16 -0
  50. package/adapters/browser/playwright/src/playwright-web-socket-route.js +27 -0
  51. package/adapters/browser/playwright/src/press-target.d.ts +76 -0
  52. package/adapters/browser/playwright/src/press-target.js +186 -0
  53. package/adapters/browser/playwright/src/socket-routes.d.ts +14 -0
  54. package/adapters/browser/playwright/src/socket-routes.js +20 -0
  55. package/adapters/browser/playwright/src/wire-delivery.d.ts +10 -0
  56. package/adapters/browser/playwright/src/wire-delivery.js +31 -0
  57. package/adapters/browser/playwright/src/worker-hold.d.ts +26 -0
  58. package/adapters/browser/playwright/src/worker-hold.js +115 -0
  59. package/adapters/chain/papi/README.md +203 -0
  60. package/adapters/chain/papi/src/chain-access.d.ts +178 -0
  61. package/adapters/chain/papi/src/chain-access.js +530 -0
  62. package/adapters/chain/papi/src/errors.d.ts +15 -0
  63. package/adapters/chain/papi/src/errors.js +29 -0
  64. package/adapters/chain/papi/src/extrinsic-decoder.d.ts +21 -0
  65. package/adapters/chain/papi/src/extrinsic-decoder.js +396 -0
  66. package/adapters/chain/papi/src/extrinsic-signer.d.ts +2 -0
  67. package/adapters/chain/papi/src/extrinsic-signer.js +14 -0
  68. package/adapters/chain/papi/src/index.d.ts +5 -0
  69. package/adapters/chain/papi/src/index.js +7 -0
  70. package/adapters/chain/papi/src/plain-value.d.ts +7 -0
  71. package/adapters/chain/papi/src/plain-value.js +58 -0
  72. package/adapters/chain/papi/src/signer.d.ts +27 -0
  73. package/adapters/chain/papi/src/signer.js +51 -0
  74. package/adapters/chain/papi/src/statement-store-reader.d.ts +12 -0
  75. package/adapters/chain/papi/src/statement-store-reader.js +146 -0
  76. package/adapters/chain/papi/src/track-transaction.d.ts +47 -0
  77. package/adapters/chain/papi/src/track-transaction.js +97 -0
  78. package/adapters/chain/papi/src/transaction-submitter.d.ts +87 -0
  79. package/adapters/chain/papi/src/transaction-submitter.js +132 -0
  80. package/adapters/deploy/bulletin/README.md +148 -0
  81. package/adapters/deploy/bulletin/src/bulletin-deployer.d.ts +82 -0
  82. package/adapters/deploy/bulletin/src/bulletin-deployer.js +234 -0
  83. package/adapters/deploy/bulletin/src/bytes.d.ts +6 -0
  84. package/adapters/deploy/bulletin/src/bytes.js +25 -0
  85. package/adapters/deploy/bulletin/src/content/bulletin-content-reader.d.ts +35 -0
  86. package/adapters/deploy/bulletin/src/content/bulletin-content-reader.js +58 -0
  87. package/adapters/deploy/bulletin/src/content/car.d.ts +27 -0
  88. package/adapters/deploy/bulletin/src/content/car.js +112 -0
  89. package/adapters/deploy/bulletin/src/content/cid.d.ts +31 -0
  90. package/adapters/deploy/bulletin/src/content/cid.js +114 -0
  91. package/adapters/deploy/bulletin/src/content/dag.d.ts +27 -0
  92. package/adapters/deploy/bulletin/src/content/dag.js +157 -0
  93. package/adapters/deploy/bulletin/src/content/ipfs-gateway-source.d.ts +10 -0
  94. package/adapters/deploy/bulletin/src/content/ipfs-gateway-source.js +14 -0
  95. package/adapters/deploy/bulletin/src/content/retrieve-content.d.ts +3 -0
  96. package/adapters/deploy/bulletin/src/content/retrieve-content.js +18 -0
  97. package/adapters/deploy/bulletin/src/content/site.d.ts +16 -0
  98. package/adapters/deploy/bulletin/src/content/site.js +56 -0
  99. package/adapters/deploy/bulletin/src/deployment-check.d.ts +25 -0
  100. package/adapters/deploy/bulletin/src/deployment-check.js +51 -0
  101. package/adapters/deploy/bulletin/src/dotns/dotns-registrar.d.ts +31 -0
  102. package/adapters/deploy/bulletin/src/dotns/dotns-registrar.js +53 -0
  103. package/adapters/deploy/bulletin/src/dotns/dotns-resolver.d.ts +41 -0
  104. package/adapters/deploy/bulletin/src/dotns/dotns-resolver.js +148 -0
  105. package/adapters/deploy/bulletin/src/dotns/manifest-freshness.d.ts +66 -0
  106. package/adapters/deploy/bulletin/src/dotns/manifest-freshness.js +76 -0
  107. package/adapters/deploy/bulletin/src/dotns/read-only-rpc.d.ts +17 -0
  108. package/adapters/deploy/bulletin/src/dotns/read-only-rpc.js +23 -0
  109. package/adapters/deploy/bulletin/src/endpoints.d.ts +20 -0
  110. package/adapters/deploy/bulletin/src/endpoints.js +36 -0
  111. package/adapters/deploy/bulletin/src/errors.d.ts +13 -0
  112. package/adapters/deploy/bulletin/src/errors.js +13 -0
  113. package/adapters/deploy/bulletin/src/gateway/deployed-content-gateway.d.ts +46 -0
  114. package/adapters/deploy/bulletin/src/gateway/deployed-content-gateway.js +126 -0
  115. package/adapters/deploy/bulletin/src/gateway/gateway-destinations.d.ts +35 -0
  116. package/adapters/deploy/bulletin/src/gateway/gateway-destinations.js +45 -0
  117. package/adapters/deploy/bulletin/src/gateway/gateway-program.d.ts +79 -0
  118. package/adapters/deploy/bulletin/src/gateway/gateway-program.js +181 -0
  119. package/adapters/deploy/bulletin/src/index.d.ts +27 -0
  120. package/adapters/deploy/bulletin/src/index.js +29 -0
  121. package/adapters/deploy/bulletin/src/launch/deployed-local-launcher.d.ts +77 -0
  122. package/adapters/deploy/bulletin/src/launch/deployed-local-launcher.js +90 -0
  123. package/adapters/deploy/bulletin/src/launch/launch-mode.d.ts +12 -0
  124. package/adapters/deploy/bulletin/src/launch/launch-mode.js +23 -0
  125. package/adapters/deploy/bulletin/src/platform/bulletin-store.d.ts +17 -0
  126. package/adapters/deploy/bulletin/src/platform/bulletin-store.js +28 -0
  127. package/adapters/deploy/bulletin/src/platform/chain-ports.d.ts +69 -0
  128. package/adapters/deploy/bulletin/src/platform/chain-ports.js +69 -0
  129. package/adapters/deploy/bulletin/src/platform/platform-requirements.d.ts +34 -0
  130. package/adapters/deploy/bulletin/src/platform/platform-requirements.js +12 -0
  131. package/adapters/deploy/bulletin/src/platform/revive-contracts.d.ts +53 -0
  132. package/adapters/deploy/bulletin/src/platform/revive-contracts.js +86 -0
  133. package/adapters/deploy/bulletin/src/platform/statement-store.d.ts +50 -0
  134. package/adapters/deploy/bulletin/src/platform/statement-store.js +96 -0
  135. package/adapters/deploy/bulletin/src/tool/bulletin-deploy-library.d.ts +64 -0
  136. package/adapters/deploy/bulletin/src/tool/bulletin-deploy-library.js +33 -0
  137. package/adapters/deploy/bulletin/src/tool/bulletin-deploy-tool.d.ts +18 -0
  138. package/adapters/deploy/bulletin/src/tool/bulletin-deploy-tool.js +73 -0
  139. package/adapters/deploy/bulletin/src/tool/environment-file.d.ts +34 -0
  140. package/adapters/deploy/bulletin/src/tool/environment-file.js +36 -0
  141. package/adapters/environment/attached/README.md +75 -0
  142. package/adapters/environment/attached/src/index.d.ts +54 -0
  143. package/adapters/environment/attached/src/index.js +123 -0
  144. package/adapters/environment/attached/src/live-network.d.ts +62 -0
  145. package/adapters/environment/attached/src/live-network.js +96 -0
  146. package/adapters/environment/attached/src/versions.d.ts +29 -0
  147. package/adapters/environment/attached/src/versions.js +51 -0
  148. package/adapters/environment/chopsticks/README.md +200 -0
  149. package/adapters/environment/chopsticks/src/chopsticks-environment-factory.d.ts +140 -0
  150. package/adapters/environment/chopsticks/src/chopsticks-environment-factory.js +55 -0
  151. package/adapters/environment/chopsticks/src/chopsticks-topology.d.ts +176 -0
  152. package/adapters/environment/chopsticks/src/chopsticks-topology.js +287 -0
  153. package/adapters/environment/chopsticks/src/constants.d.ts +11 -0
  154. package/adapters/environment/chopsticks/src/constants.js +15 -0
  155. package/adapters/environment/chopsticks/src/dev-authority.d.ts +21 -0
  156. package/adapters/environment/chopsticks/src/dev-authority.js +66 -0
  157. package/adapters/environment/chopsticks/src/environment.d.ts +133 -0
  158. package/adapters/environment/chopsticks/src/environment.js +358 -0
  159. package/adapters/environment/chopsticks/src/extensions.d.ts +27 -0
  160. package/adapters/environment/chopsticks/src/extensions.js +60 -0
  161. package/adapters/environment/chopsticks/src/general-extrinsic-support.d.ts +17 -0
  162. package/adapters/environment/chopsticks/src/general-extrinsic-support.js +58 -0
  163. package/adapters/environment/chopsticks/src/index.d.ts +15 -0
  164. package/adapters/environment/chopsticks/src/index.js +17 -0
  165. package/adapters/environment/chopsticks/src/options.d.ts +75 -0
  166. package/adapters/environment/chopsticks/src/options.js +56 -0
  167. package/adapters/environment/chopsticks/src/plan.d.ts +49 -0
  168. package/adapters/environment/chopsticks/src/plan.js +68 -0
  169. package/adapters/environment/chopsticks/src/provider.d.ts +43 -0
  170. package/adapters/environment/chopsticks/src/provider.js +78 -0
  171. package/adapters/environment/chopsticks/src/spec-proxy.d.ts +16 -0
  172. package/adapters/environment/chopsticks/src/spec-proxy.js +109 -0
  173. package/adapters/environment/chopsticks/src/sqlite-support.d.ts +15 -0
  174. package/adapters/environment/chopsticks/src/sqlite-support.js +32 -0
  175. package/adapters/environment/chopsticks/src/time.d.ts +18 -0
  176. package/adapters/environment/chopsticks/src/time.js +96 -0
  177. package/adapters/environment/chopsticks/src/topology-options-schema.d.ts +119 -0
  178. package/adapters/environment/chopsticks/src/topology-options-schema.js +58 -0
  179. package/adapters/environment/chopsticks/src/topology.d.ts +11 -0
  180. package/adapters/environment/chopsticks/src/topology.js +64 -0
  181. package/adapters/environment/chopsticks/src/upstream.d.ts +22 -0
  182. package/adapters/environment/chopsticks/src/upstream.js +58 -0
  183. package/adapters/environment/chopsticks/src/versions.d.ts +31 -0
  184. package/adapters/environment/chopsticks/src/versions.js +58 -0
  185. package/adapters/environment/engine/README.md +123 -0
  186. package/adapters/environment/engine/engine.example.json +9 -0
  187. package/adapters/environment/engine/src/engine/approval-pin.d.ts +106 -0
  188. package/adapters/environment/engine/src/engine/approval-pin.js +98 -0
  189. package/adapters/environment/engine/src/engine/chain-clock.d.ts +55 -0
  190. package/adapters/environment/engine/src/engine/chain-clock.js +66 -0
  191. package/adapters/environment/engine/src/engine/checkout-lock.d.ts +52 -0
  192. package/adapters/environment/engine/src/engine/checkout-lock.js +136 -0
  193. package/adapters/environment/engine/src/engine/drain.d.ts +54 -0
  194. package/adapters/environment/engine/src/engine/drain.js +74 -0
  195. package/adapters/environment/engine/src/engine/engine-config.d.ts +97 -0
  196. package/adapters/environment/engine/src/engine/engine-config.js +55 -0
  197. package/adapters/environment/engine/src/engine/engine-health.d.ts +99 -0
  198. package/adapters/environment/engine/src/engine/engine-health.js +217 -0
  199. package/adapters/environment/engine/src/engine/engine-ports.d.ts +13 -0
  200. package/adapters/environment/engine/src/engine/engine-ports.js +60 -0
  201. package/adapters/environment/engine/src/engine/engine-prepare.d.ts +55 -0
  202. package/adapters/environment/engine/src/engine/engine-prepare.js +86 -0
  203. package/adapters/environment/engine/src/engine/engine-setup-jobs.d.ts +16 -0
  204. package/adapters/environment/engine/src/engine/engine-setup-jobs.js +63 -0
  205. package/adapters/environment/engine/src/engine/engine-start-phases.d.ts +65 -0
  206. package/adapters/environment/engine/src/engine/engine-start-phases.js +230 -0
  207. package/adapters/environment/engine/src/engine/eth-rpc-probe.d.ts +17 -0
  208. package/adapters/environment/engine/src/engine/eth-rpc-probe.js +23 -0
  209. package/adapters/environment/engine/src/engine/finality-stall.d.ts +41 -0
  210. package/adapters/environment/engine/src/engine/finality-stall.js +61 -0
  211. package/adapters/environment/engine/src/engine/fork-bundle.d.ts +59 -0
  212. package/adapters/environment/engine/src/engine/fork-bundle.js +159 -0
  213. package/adapters/environment/engine/src/engine/fork-freshness.d.ts +154 -0
  214. package/adapters/environment/engine/src/engine/fork-freshness.js +238 -0
  215. package/adapters/environment/engine/src/engine/fork-isolation.d.ts +19 -0
  216. package/adapters/environment/engine/src/engine/fork-isolation.js +44 -0
  217. package/adapters/environment/engine/src/engine/fork-refresh.d.ts +75 -0
  218. package/adapters/environment/engine/src/engine/fork-refresh.js +264 -0
  219. package/adapters/environment/engine/src/engine/fork-setup.d.ts +59 -0
  220. package/adapters/environment/engine/src/engine/fork-setup.js +87 -0
  221. package/adapters/environment/engine/src/engine/fork-snapshot.d.ts +6 -0
  222. package/adapters/environment/engine/src/engine/fork-snapshot.js +42 -0
  223. package/adapters/environment/engine/src/engine/fork-toml.d.ts +110 -0
  224. package/adapters/environment/engine/src/engine/fork-toml.js +260 -0
  225. package/adapters/environment/engine/src/engine/fork-topology.d.ts +65 -0
  226. package/adapters/environment/engine/src/engine/fork-topology.js +61 -0
  227. package/adapters/environment/engine/src/engine/fork-updates.d.ts +61 -0
  228. package/adapters/environment/engine/src/engine/fork-updates.js +148 -0
  229. package/adapters/environment/engine/src/engine/ipfs-isolation.d.ts +38 -0
  230. package/adapters/environment/engine/src/engine/ipfs-isolation.js +62 -0
  231. package/adapters/environment/engine/src/engine/live-network.d.ts +32 -0
  232. package/adapters/environment/engine/src/engine/live-network.js +41 -0
  233. package/adapters/environment/engine/src/engine/network-adoption.d.ts +56 -0
  234. package/adapters/environment/engine/src/engine/network-adoption.js +195 -0
  235. package/adapters/environment/engine/src/engine/network-plan.d.ts +71 -0
  236. package/adapters/environment/engine/src/engine/network-plan.js +158 -0
  237. package/adapters/environment/engine/src/engine/network-reset.d.ts +18 -0
  238. package/adapters/environment/engine/src/engine/network-reset.js +21 -0
  239. package/adapters/environment/engine/src/engine/network-seed.d.ts +82 -0
  240. package/adapters/environment/engine/src/engine/network-seed.js +183 -0
  241. package/adapters/environment/engine/src/engine/network-snapshots.d.ts +64 -0
  242. package/adapters/environment/engine/src/engine/network-snapshots.js +161 -0
  243. package/adapters/environment/engine/src/engine/network-template.d.ts +65 -0
  244. package/adapters/environment/engine/src/engine/network-template.js +98 -0
  245. package/adapters/environment/engine/src/engine/node-isolation.d.ts +83 -0
  246. package/adapters/environment/engine/src/engine/node-isolation.js +164 -0
  247. package/adapters/environment/engine/src/engine/node-temp-dir.d.ts +27 -0
  248. package/adapters/environment/engine/src/engine/node-temp-dir.js +31 -0
  249. package/adapters/environment/engine/src/engine/owned-engine.d.ts +312 -0
  250. package/adapters/environment/engine/src/engine/owned-engine.js +595 -0
  251. package/adapters/environment/engine/src/engine/owned-environment.d.ts +24 -0
  252. package/adapters/environment/engine/src/engine/owned-environment.js +84 -0
  253. package/adapters/environment/engine/src/engine/persisted-data.d.ts +67 -0
  254. package/adapters/environment/engine/src/engine/persisted-data.js +147 -0
  255. package/adapters/environment/engine/src/engine/persisted-isolation.d.ts +33 -0
  256. package/adapters/environment/engine/src/engine/persisted-isolation.js +91 -0
  257. package/adapters/environment/engine/src/engine/persistent-network.d.ts +354 -0
  258. package/adapters/environment/engine/src/engine/persistent-network.js +580 -0
  259. package/adapters/environment/engine/src/engine/plan-ports.d.ts +83 -0
  260. package/adapters/environment/engine/src/engine/plan-ports.js +165 -0
  261. package/adapters/environment/engine/src/engine/published-bundle.d.ts +117 -0
  262. package/adapters/environment/engine/src/engine/published-bundle.js +250 -0
  263. package/adapters/environment/engine/src/engine/runtime-upgrade.d.ts +131 -0
  264. package/adapters/environment/engine/src/engine/runtime-upgrade.js +202 -0
  265. package/adapters/environment/engine/src/engine/saved-tooling.d.ts +10 -0
  266. package/adapters/environment/engine/src/engine/saved-tooling.js +32 -0
  267. package/adapters/environment/engine/src/engine/turn-relay.d.ts +80 -0
  268. package/adapters/environment/engine/src/engine/turn-relay.js +103 -0
  269. package/adapters/environment/engine/src/errors.d.ts +140 -0
  270. package/adapters/environment/engine/src/errors.js +131 -0
  271. package/adapters/environment/engine/src/evidence/engine-logs.d.ts +4 -0
  272. package/adapters/environment/engine/src/evidence/engine-logs.js +20 -0
  273. package/adapters/environment/engine/src/evidence/engine-progress.d.ts +18 -0
  274. package/adapters/environment/engine/src/evidence/engine-progress.js +102 -0
  275. package/adapters/environment/engine/src/index.d.ts +52 -0
  276. package/adapters/environment/engine/src/index.js +54 -0
  277. package/adapters/environment/engine/src/saved-fork/saved-fork-tooling.d.ts +20 -0
  278. package/adapters/environment/engine/src/saved-fork/saved-fork-tooling.js +66 -0
  279. package/adapters/environment/engine/src/saved-fork/saved-fork.d.ts +118 -0
  280. package/adapters/environment/engine/src/saved-fork/saved-fork.js +298 -0
  281. package/adapters/environment/engine/src/session/chain-observation.d.ts +30 -0
  282. package/adapters/environment/engine/src/session/chain-observation.js +23 -0
  283. package/adapters/environment/engine/src/session/engine-networks.d.ts +8 -0
  284. package/adapters/environment/engine/src/session/engine-networks.js +6 -0
  285. package/adapters/environment/engine/src/session/network-lock.d.ts +107 -0
  286. package/adapters/environment/engine/src/session/network-lock.js +125 -0
  287. package/adapters/environment/engine/src/session/readiness.d.ts +181 -0
  288. package/adapters/environment/engine/src/session/readiness.js +251 -0
  289. package/adapters/environment/engine/src/session/runtime-dependency.d.ts +188 -0
  290. package/adapters/environment/engine/src/session/runtime-dependency.js +20 -0
  291. package/adapters/environment/engine/src/session/session.d.ts +243 -0
  292. package/adapters/environment/engine/src/session/session.js +98 -0
  293. package/adapters/environment/engine/src/setup/engine-build.d.ts +13 -0
  294. package/adapters/environment/engine/src/setup/engine-build.js +24 -0
  295. package/adapters/environment/engine/src/setup/patch-catalogue.d.ts +20 -0
  296. package/adapters/environment/engine/src/setup/patch-catalogue.js +15 -0
  297. package/adapters/environment/engine/src/setup/patches.d.ts +37 -0
  298. package/adapters/environment/engine/src/setup/patches.js +48 -0
  299. package/adapters/environment/engine/src/setup/prepare-engine.d.ts +86 -0
  300. package/adapters/environment/engine/src/setup/prepare-engine.js +186 -0
  301. package/adapters/environment/engine/src/setup/setup-command.d.ts +11 -0
  302. package/adapters/environment/engine/src/setup/setup-command.js +17 -0
  303. package/adapters/environment/engine/src/setup/sync-command.d.ts +3 -0
  304. package/adapters/environment/engine/src/setup/sync-command.js +10 -0
  305. package/adapters/environment/engine/src/testing/engine-dashboard.d.ts +37 -0
  306. package/adapters/environment/engine/src/testing/engine-dashboard.js +83 -0
  307. package/adapters/environment/engine/src/topology/engine-environment-factory.d.ts +107 -0
  308. package/adapters/environment/engine/src/topology/engine-environment-factory.js +37 -0
  309. package/adapters/environment/engine/src/topology/engine-plan.d.ts +35 -0
  310. package/adapters/environment/engine/src/topology/engine-plan.js +84 -0
  311. package/adapters/environment/engine/src/topology/engine-provider.d.ts +25 -0
  312. package/adapters/environment/engine/src/topology/engine-provider.js +109 -0
  313. package/adapters/environment/engine/src/topology/engine-run.d.ts +63 -0
  314. package/adapters/environment/engine/src/topology/engine-run.js +129 -0
  315. package/adapters/environment/engine/src/topology/engine-topology.d.ts +131 -0
  316. package/adapters/environment/engine/src/topology/engine-topology.js +236 -0
  317. package/adapters/environment/engine/src/topology/topology-options-schema.d.ts +79 -0
  318. package/adapters/environment/engine/src/topology/topology-options-schema.js +57 -0
  319. package/adapters/environment/engine/src/versions/engine-versions.d.ts +90 -0
  320. package/adapters/environment/engine/src/versions/engine-versions.js +138 -0
  321. package/adapters/environment/relayless/README.md +199 -0
  322. package/adapters/environment/relayless/src/chain-readiness.d.ts +37 -0
  323. package/adapters/environment/relayless/src/chain-readiness.js +51 -0
  324. package/adapters/environment/relayless/src/fast-baseline.d.ts +43 -0
  325. package/adapters/environment/relayless/src/fast-baseline.js +56 -0
  326. package/adapters/environment/relayless/src/index.d.ts +15 -0
  327. package/adapters/environment/relayless/src/index.js +17 -0
  328. package/adapters/environment/relayless/src/manual-seal-session.d.ts +125 -0
  329. package/adapters/environment/relayless/src/manual-seal-session.js +82 -0
  330. package/adapters/environment/relayless/src/owned-people-node.d.ts +55 -0
  331. package/adapters/environment/relayless/src/owned-people-node.js +199 -0
  332. package/adapters/environment/relayless/src/prepare-people-genesis.d.ts +87 -0
  333. package/adapters/environment/relayless/src/prepare-people-genesis.js +119 -0
  334. package/adapters/environment/relayless/src/topology/dev-chain-spec.d.ts +44 -0
  335. package/adapters/environment/relayless/src/topology/dev-chain-spec.js +131 -0
  336. package/adapters/environment/relayless/src/topology/dev-node.d.ts +21 -0
  337. package/adapters/environment/relayless/src/topology/dev-node.js +41 -0
  338. package/adapters/environment/relayless/src/topology/locked-artifacts.d.ts +35 -0
  339. package/adapters/environment/relayless/src/topology/locked-artifacts.js +87 -0
  340. package/adapters/environment/relayless/src/topology/relayless-environment-factory.d.ts +106 -0
  341. package/adapters/environment/relayless/src/topology/relayless-environment-factory.js +38 -0
  342. package/adapters/environment/relayless/src/topology/relayless-environment.d.ts +152 -0
  343. package/adapters/environment/relayless/src/topology/relayless-environment.js +443 -0
  344. package/adapters/environment/relayless/src/topology/relayless-plan.d.ts +43 -0
  345. package/adapters/environment/relayless/src/topology/relayless-plan.js +85 -0
  346. package/adapters/environment/relayless/src/topology/relayless-provider.d.ts +60 -0
  347. package/adapters/environment/relayless/src/topology/relayless-provider.js +231 -0
  348. package/adapters/environment/relayless/src/topology/relayless-snapshots.d.ts +24 -0
  349. package/adapters/environment/relayless/src/topology/relayless-snapshots.js +112 -0
  350. package/adapters/environment/relayless/src/topology/relayless-time.d.ts +66 -0
  351. package/adapters/environment/relayless/src/topology/relayless-time.js +124 -0
  352. package/adapters/environment/relayless/src/topology/relayless-topology.d.ts +122 -0
  353. package/adapters/environment/relayless/src/topology/relayless-topology.js +178 -0
  354. package/adapters/environment/relayless/src/topology/spec-cache.d.ts +24 -0
  355. package/adapters/environment/relayless/src/topology/spec-cache.js +53 -0
  356. package/adapters/environment/relayless/src/topology/statement-store.d.ts +20 -0
  357. package/adapters/environment/relayless/src/topology/statement-store.js +60 -0
  358. package/adapters/environment/relayless/src/topology/topology-options-schema.d.ts +79 -0
  359. package/adapters/environment/relayless/src/topology/topology-options-schema.js +57 -0
  360. package/adapters/environment/relayless/src/topology/workspace-record.d.ts +30 -0
  361. package/adapters/environment/relayless/src/topology/workspace-record.js +49 -0
  362. package/adapters/features/cucumber/README.md +85 -0
  363. package/adapters/features/cucumber/src/cucumber-child.d.ts +1 -0
  364. package/adapters/features/cucumber/src/cucumber-child.js +53 -0
  365. package/adapters/features/cucumber/src/cucumber-feature-runner.d.ts +49 -0
  366. package/adapters/features/cucumber/src/cucumber-feature-runner.js +114 -0
  367. package/adapters/features/cucumber/src/cucumber-installation.d.ts +14 -0
  368. package/adapters/features/cucumber/src/cucumber-installation.js +44 -0
  369. package/adapters/features/cucumber/src/cucumber-report.d.ts +11 -0
  370. package/adapters/features/cucumber/src/cucumber-report.js +121 -0
  371. package/adapters/features/cucumber/src/cucumber-run.d.ts +38 -0
  372. package/adapters/features/cucumber/src/cucumber-run.js +126 -0
  373. package/adapters/features/cucumber/src/glob-feature-source.d.ts +9 -0
  374. package/adapters/features/cucumber/src/glob-feature-source.js +31 -0
  375. package/adapters/features/cucumber/src/in-process-cucumber-run.d.ts +20 -0
  376. package/adapters/features/cucumber/src/in-process-cucumber-run.js +119 -0
  377. package/adapters/features/cucumber/src/index.d.ts +9 -0
  378. package/adapters/features/cucumber/src/index.js +11 -0
  379. package/adapters/features/cucumber/src/plain-format.d.ts +11 -0
  380. package/adapters/features/cucumber/src/plain-format.js +20 -0
  381. package/adapters/features/cucumber/src/plain-run.d.ts +153 -0
  382. package/adapters/features/cucumber/src/plain-run.js +207 -0
  383. package/adapters/features/cucumber/src/run-log.d.ts +16 -0
  384. package/adapters/features/cucumber/src/run-log.js +50 -0
  385. package/adapters/features/cucumber/src/steps/feature-session-settings.d.ts +7 -0
  386. package/adapters/features/cucumber/src/steps/feature-session-settings.js +15 -0
  387. package/adapters/features/cucumber/src/steps/register-feature-steps.d.ts +144 -0
  388. package/adapters/features/cucumber/src/steps/register-feature-steps.js +276 -0
  389. package/adapters/features/cucumber/src/support/bundled-support.d.ts +1 -0
  390. package/adapters/features/cucumber/src/support/bundled-support.js +69 -0
  391. package/adapters/host/dotli/README.md +135 -0
  392. package/adapters/host/dotli/src/dotli-build.d.ts +85 -0
  393. package/adapters/host/dotli/src/dotli-build.js +169 -0
  394. package/adapters/host/dotli/src/dotli-host-factory.d.ts +66 -0
  395. package/adapters/host/dotli/src/dotli-host-factory.js +82 -0
  396. package/adapters/host/dotli/src/dotli-host.d.ts +182 -0
  397. package/adapters/host/dotli/src/dotli-host.js +327 -0
  398. package/adapters/host/dotli/src/dotli-server.d.ts +9 -0
  399. package/adapters/host/dotli/src/dotli-server.js +135 -0
  400. package/adapters/host/dotli/src/framing.d.ts +10 -0
  401. package/adapters/host/dotli/src/framing.js +20 -0
  402. package/adapters/host/dotli/src/index.d.ts +40 -0
  403. package/adapters/host/dotli/src/index.js +21 -0
  404. package/adapters/host/dotli/src/interception.d.ts +59 -0
  405. package/adapters/host/dotli/src/interception.js +115 -0
  406. package/adapters/host/dotli/src/page-console.d.ts +40 -0
  407. package/adapters/host/dotli/src/page-console.js +44 -0
  408. package/adapters/host/dotli/src/routing.d.ts +119 -0
  409. package/adapters/host/dotli/src/routing.js +157 -0
  410. package/adapters/host/truapi-cli/README.md +807 -0
  411. package/adapters/host/truapi-cli/host.lock.json +33 -0
  412. package/adapters/host/truapi-cli/src/acquire.d.ts +81 -0
  413. package/adapters/host/truapi-cli/src/acquire.js +213 -0
  414. package/adapters/host/truapi-cli/src/attest-provision.d.ts +49 -0
  415. package/adapters/host/truapi-cli/src/attest-provision.js +181 -0
  416. package/adapters/host/truapi-cli/src/build.d.ts +45 -0
  417. package/adapters/host/truapi-cli/src/build.js +234 -0
  418. package/adapters/host/truapi-cli/src/capability-probes.d.ts +66 -0
  419. package/adapters/host/truapi-cli/src/capability-probes.js +272 -0
  420. package/adapters/host/truapi-cli/src/checkout.d.ts +25 -0
  421. package/adapters/host/truapi-cli/src/checkout.js +33 -0
  422. package/adapters/host/truapi-cli/src/cli-identity.d.ts +12 -0
  423. package/adapters/host/truapi-cli/src/cli-identity.js +31 -0
  424. package/adapters/host/truapi-cli/src/cli-session.d.ts +12 -0
  425. package/adapters/host/truapi-cli/src/cli-session.js +245 -0
  426. package/adapters/host/truapi-cli/src/conditioned-routing.d.ts +17 -0
  427. package/adapters/host/truapi-cli/src/conditioned-routing.js +48 -0
  428. package/adapters/host/truapi-cli/src/host-cache.d.ts +25 -0
  429. package/adapters/host/truapi-cli/src/host-cache.js +131 -0
  430. package/adapters/host/truapi-cli/src/host-link.d.ts +16 -0
  431. package/adapters/host/truapi-cli/src/host-link.js +87 -0
  432. package/adapters/host/truapi-cli/src/host-lock.d.ts +59 -0
  433. package/adapters/host/truapi-cli/src/host-lock.js +81 -0
  434. package/adapters/host/truapi-cli/src/host-options.d.ts +65 -0
  435. package/adapters/host/truapi-cli/src/host-options.js +61 -0
  436. package/adapters/host/truapi-cli/src/host-process.d.ts +79 -0
  437. package/adapters/host/truapi-cli/src/host-process.js +160 -0
  438. package/adapters/host/truapi-cli/src/host-records.d.ts +73 -0
  439. package/adapters/host/truapi-cli/src/host-records.js +16 -0
  440. package/adapters/host/truapi-cli/src/host-requests.d.ts +24 -0
  441. package/adapters/host/truapi-cli/src/host-requests.js +75 -0
  442. package/adapters/host/truapi-cli/src/host-temp-dir.d.ts +26 -0
  443. package/adapters/host/truapi-cli/src/host-temp-dir.js +31 -0
  444. package/adapters/host/truapi-cli/src/host-types.d.ts +115 -0
  445. package/adapters/host/truapi-cli/src/host-types.js +3 -0
  446. package/adapters/host/truapi-cli/src/host-verification.d.ts +20 -0
  447. package/adapters/host/truapi-cli/src/host-verification.js +101 -0
  448. package/adapters/host/truapi-cli/src/host.d.ts +14 -0
  449. package/adapters/host/truapi-cli/src/host.js +186 -0
  450. package/adapters/host/truapi-cli/src/identity-fingerprint.d.ts +3 -0
  451. package/adapters/host/truapi-cli/src/identity-fingerprint.js +6 -0
  452. package/adapters/host/truapi-cli/src/index.d.ts +26 -0
  453. package/adapters/host/truapi-cli/src/index.js +28 -0
  454. package/adapters/host/truapi-cli/src/launch.d.ts +113 -0
  455. package/adapters/host/truapi-cli/src/launch.js +244 -0
  456. package/adapters/host/truapi-cli/src/navigation.d.ts +23 -0
  457. package/adapters/host/truapi-cli/src/navigation.js +111 -0
  458. package/adapters/host/truapi-cli/src/network-config.d.ts +35 -0
  459. package/adapters/host/truapi-cli/src/network-config.js +41 -0
  460. package/adapters/host/truapi-cli/src/network-guard.d.ts +37 -0
  461. package/adapters/host/truapi-cli/src/network-guard.js +72 -0
  462. package/adapters/host/truapi-cli/src/official-behaviours.d.ts +33 -0
  463. package/adapters/host/truapi-cli/src/official-behaviours.js +57 -0
  464. package/adapters/host/truapi-cli/src/official-release.d.ts +18 -0
  465. package/adapters/host/truapi-cli/src/official-release.js +57 -0
  466. package/adapters/host/truapi-cli/src/patch-catalogue.d.ts +8 -0
  467. package/adapters/host/truapi-cli/src/patch-catalogue.js +9 -0
  468. package/adapters/host/truapi-cli/src/patch-manifest.d.ts +78 -0
  469. package/adapters/host/truapi-cli/src/patch-manifest.js +103 -0
  470. package/adapters/host/truapi-cli/src/patches.d.ts +36 -0
  471. package/adapters/host/truapi-cli/src/patches.js +7 -0
  472. package/adapters/host/truapi-cli/src/probe-script.d.ts +21 -0
  473. package/adapters/host/truapi-cli/src/probe-script.js +85 -0
  474. package/adapters/host/truapi-cli/src/probe-stub.d.ts +41 -0
  475. package/adapters/host/truapi-cli/src/probe-stub.js +187 -0
  476. package/adapters/host/truapi-cli/src/product-config.d.ts +17 -0
  477. package/adapters/host/truapi-cli/src/product-config.js +35 -0
  478. package/adapters/host/truapi-cli/src/provision.d.ts +88 -0
  479. package/adapters/host/truapi-cli/src/provision.js +172 -0
  480. package/adapters/host/truapi-cli/src/rebase-check.d.ts +218 -0
  481. package/adapters/host/truapi-cli/src/rebase-check.js +366 -0
  482. package/adapters/host/truapi-cli/src/resolved-host.d.ts +23 -0
  483. package/adapters/host/truapi-cli/src/resolved-host.js +31 -0
  484. package/adapters/host/truapi-cli/src/route-release.d.ts +65 -0
  485. package/adapters/host/truapi-cli/src/route-release.js +133 -0
  486. package/adapters/host/truapi-cli/src/sandbox-spec.d.ts +4 -0
  487. package/adapters/host/truapi-cli/src/sandbox-spec.js +14 -0
  488. package/adapters/host/truapi-cli/src/script-account-read.d.ts +48 -0
  489. package/adapters/host/truapi-cli/src/script-account-read.js +98 -0
  490. package/adapters/host/truapi-cli/src/serve-persisted.d.ts +47 -0
  491. package/adapters/host/truapi-cli/src/serve-persisted.js +115 -0
  492. package/adapters/host/truapi-cli/src/signing-evidence.d.ts +4 -0
  493. package/adapters/host/truapi-cli/src/signing-evidence.js +71 -0
  494. package/adapters/host/truapi-cli/src/signing-host-flags.d.ts +9 -0
  495. package/adapters/host/truapi-cli/src/signing-host-flags.js +24 -0
  496. package/adapters/host/truapi-cli/src/truapi-cli-host-factory.d.ts +210 -0
  497. package/adapters/host/truapi-cli/src/truapi-cli-host-factory.js +345 -0
  498. package/adapters/host/truapi-wasm/README.md +228 -0
  499. package/adapters/host/truapi-wasm/src/bulletin-read-probe.d.ts +42 -0
  500. package/adapters/host/truapi-wasm/src/bulletin-read-probe.js +69 -0
  501. package/adapters/host/truapi-wasm/src/config.d.ts +79 -0
  502. package/adapters/host/truapi-wasm/src/config.js +80 -0
  503. package/adapters/host/truapi-wasm/src/endpoint-chains.d.ts +5 -0
  504. package/adapters/host/truapi-wasm/src/endpoint-chains.js +30 -0
  505. package/adapters/host/truapi-wasm/src/entropy-patch.d.ts +27 -0
  506. package/adapters/host/truapi-wasm/src/entropy-patch.js +23 -0
  507. package/adapters/host/truapi-wasm/src/framing.d.ts +10 -0
  508. package/adapters/host/truapi-wasm/src/framing.js +20 -0
  509. package/adapters/host/truapi-wasm/src/host-package.d.ts +38 -0
  510. package/adapters/host/truapi-wasm/src/host-package.js +119 -0
  511. package/adapters/host/truapi-wasm/src/host-page-layout.d.ts +12 -0
  512. package/adapters/host/truapi-wasm/src/host-page-layout.js +16 -0
  513. package/adapters/host/truapi-wasm/src/identity.d.ts +3 -0
  514. package/adapters/host/truapi-wasm/src/identity.js +8 -0
  515. package/adapters/host/truapi-wasm/src/index.d.ts +25 -0
  516. package/adapters/host/truapi-wasm/src/index.js +15 -0
  517. package/adapters/host/truapi-wasm/src/own-script.d.ts +4 -0
  518. package/adapters/host/truapi-wasm/src/own-script.js +4 -0
  519. package/adapters/host/truapi-wasm/src/provider.d.ts +190 -0
  520. package/adapters/host/truapi-wasm/src/provider.js +496 -0
  521. package/adapters/host/truapi-wasm/src/ring-vrf-member.d.ts +4 -0
  522. package/adapters/host/truapi-wasm/src/ring-vrf-member.js +47 -0
  523. package/adapters/host/truapi-wasm/src/route-release.d.ts +29 -0
  524. package/adapters/host/truapi-wasm/src/route-release.js +47 -0
  525. package/adapters/host/truapi-wasm/src/shared-host.d.ts +94 -0
  526. package/adapters/host/truapi-wasm/src/shared-host.js +63 -0
  527. package/adapters/host/truapi-wasm/src/shared-page.d.ts +1 -0
  528. package/adapters/host/truapi-wasm/src/shared-page.js +336 -0
  529. package/adapters/host/truapi-wasm/src/sign-in.d.ts +44 -0
  530. package/adapters/host/truapi-wasm/src/sign-in.js +38 -0
  531. package/adapters/host/truapi-wasm/src/truapi-pairing.d.ts +7 -0
  532. package/adapters/host/truapi-wasm/src/truapi-pairing.js +23 -0
  533. package/adapters/host/truapi-wasm/src/truapi-wasm-host-factory.d.ts +111 -0
  534. package/adapters/host/truapi-wasm/src/truapi-wasm-host-factory.js +99 -0
  535. package/adapters/keys/sr25519/README.md +53 -0
  536. package/adapters/keys/sr25519/src/index.d.ts +3 -0
  537. package/adapters/keys/sr25519/src/index.js +5 -0
  538. package/adapters/keys/sr25519/src/sr25519-key-derivation.d.ts +34 -0
  539. package/adapters/keys/sr25519/src/sr25519-key-derivation.js +66 -0
  540. package/adapters/keys/sr25519/src/sr25519-product-accounts.d.ts +8 -0
  541. package/adapters/keys/sr25519/src/sr25519-product-accounts.js +95 -0
  542. package/adapters/lab/module/src/config-path.d.ts +2 -0
  543. package/adapters/lab/module/src/config-path.js +10 -0
  544. package/adapters/lab/module/src/definition-lab-source.d.ts +11 -0
  545. package/adapters/lab/module/src/definition-lab-source.js +16 -0
  546. package/adapters/lab/module/src/index.d.ts +6 -0
  547. package/adapters/lab/module/src/index.js +8 -0
  548. package/adapters/lab/module/src/module-host-tools.d.ts +11 -0
  549. package/adapters/lab/module/src/module-host-tools.js +37 -0
  550. package/adapters/lab/module/src/module-lab-source.d.ts +16 -0
  551. package/adapters/lab/module/src/module-lab-source.js +50 -0
  552. package/adapters/lab/module/src/reload-hook.mjs +24 -0
  553. package/adapters/lab/module/src/source-fingerprint.d.ts +8 -0
  554. package/adapters/lab/module/src/source-fingerprint.js +48 -0
  555. package/adapters/lab/module/src/transpiled-client-bundles.d.ts +8 -0
  556. package/adapters/lab/module/src/transpiled-client-bundles.js +57 -0
  557. package/adapters/notify/file/README.md +5 -0
  558. package/adapters/notify/file/src/file-notifier.d.ts +11 -0
  559. package/adapters/notify/file/src/file-notifier.js +45 -0
  560. package/adapters/notify/file/src/index.d.ts +2 -0
  561. package/adapters/notify/file/src/index.js +4 -0
  562. package/adapters/notify/file/src/noop-notifier.d.ts +6 -0
  563. package/adapters/notify/file/src/noop-notifier.js +8 -0
  564. package/adapters/storage/filesystem/README.md +41 -0
  565. package/adapters/storage/filesystem/src/directory-fixture-source.d.ts +19 -0
  566. package/adapters/storage/filesystem/src/directory-fixture-source.js +83 -0
  567. package/adapters/storage/filesystem/src/file-breakpoint-store.d.ts +4 -0
  568. package/adapters/storage/filesystem/src/file-breakpoint-store.js +5 -0
  569. package/adapters/storage/filesystem/src/file-environment-option-choices.d.ts +11 -0
  570. package/adapters/storage/filesystem/src/file-environment-option-choices.js +44 -0
  571. package/adapters/storage/filesystem/src/file-evidence-journal.d.ts +10 -0
  572. package/adapters/storage/filesystem/src/file-evidence-journal.js +19 -0
  573. package/adapters/storage/filesystem/src/file-fixture-archives.d.ts +17 -0
  574. package/adapters/storage/filesystem/src/file-fixture-archives.js +250 -0
  575. package/adapters/storage/filesystem/src/file-fixture-store.d.ts +29 -0
  576. package/adapters/storage/filesystem/src/file-fixture-store.js +209 -0
  577. package/adapters/storage/filesystem/src/file-journey-docs.d.ts +9 -0
  578. package/adapters/storage/filesystem/src/file-journey-docs.js +113 -0
  579. package/adapters/storage/filesystem/src/file-json-document.d.ts +7 -0
  580. package/adapters/storage/filesystem/src/file-json-document.js +30 -0
  581. package/adapters/storage/filesystem/src/file-lab-settings-store.d.ts +4 -0
  582. package/adapters/storage/filesystem/src/file-lab-settings-store.js +5 -0
  583. package/adapters/storage/filesystem/src/file-lock-store.d.ts +23 -0
  584. package/adapters/storage/filesystem/src/file-lock-store.js +55 -0
  585. package/adapters/storage/filesystem/src/file-recording-store.d.ts +22 -0
  586. package/adapters/storage/filesystem/src/file-recording-store.js +161 -0
  587. package/adapters/storage/filesystem/src/file-rpc-choices.d.ts +11 -0
  588. package/adapters/storage/filesystem/src/file-rpc-choices.js +46 -0
  589. package/adapters/storage/filesystem/src/file-run-bundle-archives.d.ts +8 -0
  590. package/adapters/storage/filesystem/src/file-run-bundle-archives.js +200 -0
  591. package/adapters/storage/filesystem/src/file-run-manifest-store.d.ts +17 -0
  592. package/adapters/storage/filesystem/src/file-run-manifest-store.js +26 -0
  593. package/adapters/storage/filesystem/src/file-suite-evidence-bundles.d.ts +16 -0
  594. package/adapters/storage/filesystem/src/file-suite-evidence-bundles.js +168 -0
  595. package/adapters/storage/filesystem/src/file-visual-baselines.d.ts +10 -0
  596. package/adapters/storage/filesystem/src/file-visual-baselines.js +42 -0
  597. package/adapters/storage/filesystem/src/index.d.ts +18 -0
  598. package/adapters/storage/filesystem/src/index.js +20 -0
  599. package/adapters/storage/filesystem/src/lock-running-lab-record.d.ts +13 -0
  600. package/adapters/storage/filesystem/src/lock-running-lab-record.js +63 -0
  601. package/adapters/storage/filesystem/src/node-file-system.d.ts +21 -0
  602. package/adapters/storage/filesystem/src/node-file-system.js +122 -0
  603. package/adapters/storage/filesystem/src/running-lab.d.ts +2 -0
  604. package/adapters/storage/filesystem/src/running-lab.js +4 -0
  605. package/adapters/storage/filesystem/src/tar-archive.d.ts +73 -0
  606. package/adapters/storage/filesystem/src/tar-archive.js +401 -0
  607. package/adapters/storage/filesystem/src/workspace-store.d.ts +33 -0
  608. package/adapters/storage/filesystem/src/workspace-store.js +51 -0
  609. package/adapters/system/node/README.md +141 -0
  610. package/adapters/system/node/src/app-proxy/bridge-script.d.ts +21 -0
  611. package/adapters/system/node/src/app-proxy/bridge-script.js +186 -0
  612. package/adapters/system/node/src/app-proxy/next-turbopack-updates.d.ts +2 -0
  613. package/adapters/system/node/src/app-proxy/next-turbopack-updates.js +13 -0
  614. package/adapters/system/node/src/app-proxy/next-webpack-updates.d.ts +2 -0
  615. package/adapters/system/node/src/app-proxy/next-webpack-updates.js +19 -0
  616. package/adapters/system/node/src/app-proxy/node-app-proxy.d.ts +15 -0
  617. package/adapters/system/node/src/app-proxy/node-app-proxy.js +395 -0
  618. package/adapters/system/node/src/app-proxy/vite-updates.d.ts +2 -0
  619. package/adapters/system/node/src/app-proxy/vite-updates.js +8 -0
  620. package/adapters/system/node/src/app-proxy/web-socket-tunnel.d.ts +28 -0
  621. package/adapters/system/node/src/app-proxy/web-socket-tunnel.js +479 -0
  622. package/adapters/system/node/src/app-proxy/webpack-dev-server-updates.d.ts +2 -0
  623. package/adapters/system/node/src/app-proxy/webpack-dev-server-updates.js +13 -0
  624. package/adapters/system/node/src/console-logger.d.ts +25 -0
  625. package/adapters/system/node/src/console-logger.js +31 -0
  626. package/adapters/system/node/src/file-lock-manager.d.ts +26 -0
  627. package/adapters/system/node/src/file-lock-manager.js +103 -0
  628. package/adapters/system/node/src/git-change-source.d.ts +37 -0
  629. package/adapters/system/node/src/git-change-source.js +127 -0
  630. package/adapters/system/node/src/http-json-rpc-client.d.ts +20 -0
  631. package/adapters/system/node/src/http-json-rpc-client.js +25 -0
  632. package/adapters/system/node/src/index.d.ts +35 -0
  633. package/adapters/system/node/src/index.js +37 -0
  634. package/adapters/system/node/src/json-rpc-reply.d.ts +6 -0
  635. package/adapters/system/node/src/json-rpc-reply.js +18 -0
  636. package/adapters/system/node/src/linux-namespace-sandbox.d.ts +53 -0
  637. package/adapters/system/node/src/linux-namespace-sandbox.js +143 -0
  638. package/adapters/system/node/src/linux-network-namespace.mjs +177 -0
  639. package/adapters/system/node/src/lsof-connection-monitor.d.ts +50 -0
  640. package/adapters/system/node/src/lsof-connection-monitor.js +208 -0
  641. package/adapters/system/node/src/node-chain-gates.d.ts +10 -0
  642. package/adapters/system/node/src/node-chain-gates.js +173 -0
  643. package/adapters/system/node/src/node-command-runner.d.ts +17 -0
  644. package/adapters/system/node/src/node-command-runner.js +143 -0
  645. package/adapters/system/node/src/node-conditioned-links.d.ts +4 -0
  646. package/adapters/system/node/src/node-conditioned-links.js +140 -0
  647. package/adapters/system/node/src/node-document-headers.d.ts +28 -0
  648. package/adapters/system/node/src/node-document-headers.js +38 -0
  649. package/adapters/system/node/src/node-http-probe.d.ts +21 -0
  650. package/adapters/system/node/src/node-http-probe.js +39 -0
  651. package/adapters/system/node/src/node-machine-metrics.d.ts +61 -0
  652. package/adapters/system/node/src/node-machine-metrics.js +109 -0
  653. package/adapters/system/node/src/node-os-ports.d.ts +24 -0
  654. package/adapters/system/node/src/node-os-ports.js +82 -0
  655. package/adapters/system/node/src/node-owned-processes.d.ts +96 -0
  656. package/adapters/system/node/src/node-owned-processes.js +440 -0
  657. package/adapters/system/node/src/node-process-runner.d.ts +51 -0
  658. package/adapters/system/node/src/node-process-runner.js +110 -0
  659. package/adapters/system/node/src/node-process-sandbox.d.ts +51 -0
  660. package/adapters/system/node/src/node-process-sandbox.js +79 -0
  661. package/adapters/system/node/src/node-source-watcher.d.ts +7 -0
  662. package/adapters/system/node/src/node-source-watcher.js +91 -0
  663. package/adapters/system/node/src/node-stdio-worker.d.ts +11 -0
  664. package/adapters/system/node/src/node-stdio-worker.js +133 -0
  665. package/adapters/system/node/src/node-sync-command-runner.d.ts +8 -0
  666. package/adapters/system/node/src/node-sync-command-runner.js +96 -0
  667. package/adapters/system/node/src/node-terminal-command-runner.d.ts +14 -0
  668. package/adapters/system/node/src/node-terminal-command-runner.js +23 -0
  669. package/adapters/system/node/src/node-tree-cloner.d.ts +16 -0
  670. package/adapters/system/node/src/node-tree-cloner.js +46 -0
  671. package/adapters/system/node/src/owned-group-anchor.mjs +72 -0
  672. package/adapters/system/node/src/port-blocks.d.ts +32 -0
  673. package/adapters/system/node/src/port-blocks.js +132 -0
  674. package/adapters/system/node/src/process-environment-variables.d.ts +8 -0
  675. package/adapters/system/node/src/process-environment-variables.js +14 -0
  676. package/adapters/system/node/src/process-group.d.ts +35 -0
  677. package/adapters/system/node/src/process-group.js +81 -0
  678. package/adapters/system/node/src/process-table.d.ts +25 -0
  679. package/adapters/system/node/src/process-table.js +8 -0
  680. package/adapters/system/node/src/process.d.ts +7 -0
  681. package/adapters/system/node/src/process.js +9 -0
  682. package/adapters/system/node/src/ps-process-table.d.ts +34 -0
  683. package/adapters/system/node/src/ps-process-table.js +87 -0
  684. package/adapters/system/node/src/random-id-generator.d.ts +5 -0
  685. package/adapters/system/node/src/random-id-generator.js +8 -0
  686. package/adapters/system/node/src/recorded-members.d.ts +10 -0
  687. package/adapters/system/node/src/recorded-members.js +24 -0
  688. package/adapters/system/node/src/request-head.d.ts +9 -0
  689. package/adapters/system/node/src/request-head.js +37 -0
  690. package/adapters/system/node/src/system-clock.d.ts +7 -0
  691. package/adapters/system/node/src/system-clock.js +25 -0
  692. package/adapters/system/node/src/tcp-port-allocator.d.ts +56 -0
  693. package/adapters/system/node/src/tcp-port-allocator.js +117 -0
  694. package/adapters/system/node/src/web-socket-json-rpc-client.d.ts +23 -0
  695. package/adapters/system/node/src/web-socket-json-rpc-client.js +54 -0
  696. package/adapters/versions/chain/README.md +40 -0
  697. package/adapters/versions/chain/src/deployed-runtime-source.d.ts +43 -0
  698. package/adapters/versions/chain/src/deployed-runtime-source.js +97 -0
  699. package/adapters/versions/chain/src/index.d.ts +1 -0
  700. package/adapters/versions/chain/src/index.js +3 -0
  701. package/adapters/versions/github/README.md +108 -0
  702. package/adapters/versions/github/src/fetch-http-client.d.ts +15 -0
  703. package/adapters/versions/github/src/fetch-http-client.js +23 -0
  704. package/adapters/versions/github/src/github-release-artifacts.d.ts +36 -0
  705. package/adapters/versions/github/src/github-release-artifacts.js +166 -0
  706. package/adapters/versions/github/src/github-release-fixture-source.d.ts +51 -0
  707. package/adapters/versions/github/src/github-release-fixture-source.js +193 -0
  708. package/adapters/versions/github/src/github-version-source.d.ts +78 -0
  709. package/adapters/versions/github/src/github-version-source.js +281 -0
  710. package/adapters/versions/github/src/index.d.ts +4 -0
  711. package/adapters/versions/github/src/index.js +6 -0
  712. package/adapters/versions/npm/README.md +32 -0
  713. package/adapters/versions/npm/src/index.d.ts +1 -0
  714. package/adapters/versions/npm/src/index.js +3 -0
  715. package/adapters/versions/npm/src/npm-version-source.d.ts +53 -0
  716. package/adapters/versions/npm/src/npm-version-source.js +151 -0
  717. package/adapters/video/ffmpeg/README.md +39 -0
  718. package/adapters/video/ffmpeg/src/ffmpeg-video-editor.d.ts +40 -0
  719. package/adapters/video/ffmpeg/src/ffmpeg-video-editor.js +105 -0
  720. package/adapters/video/ffmpeg/src/index.d.ts +1 -0
  721. package/adapters/video/ffmpeg/src/index.js +3 -0
  722. package/adapters/visual/pixelmatch/README.md +29 -0
  723. package/adapters/visual/pixelmatch/src/index.d.ts +1 -0
  724. package/adapters/visual/pixelmatch/src/index.js +3 -0
  725. package/adapters/visual/pixelmatch/src/pixelmatch-comparison.d.ts +10 -0
  726. package/adapters/visual/pixelmatch/src/pixelmatch-comparison.js +19 -0
  727. package/composition/README.md +281 -0
  728. package/composition/src/actor-conditions.d.ts +14 -0
  729. package/composition/src/actor-conditions.js +36 -0
  730. package/composition/src/actor-funds.d.ts +18 -0
  731. package/composition/src/actor-funds.js +17 -0
  732. package/composition/src/adapter-catalogue.d.ts +39 -0
  733. package/composition/src/adapter-catalogue.js +59 -0
  734. package/composition/src/app-readiness.d.ts +32 -0
  735. package/composition/src/app-readiness.js +141 -0
  736. package/composition/src/app-server.d.ts +52 -0
  737. package/composition/src/app-server.js +124 -0
  738. package/composition/src/app-updates.d.ts +1 -0
  739. package/composition/src/app-updates.js +3 -0
  740. package/composition/src/artifacts.d.ts +3 -0
  741. package/composition/src/artifacts.js +6 -0
  742. package/composition/src/attached/attached-lab-runtime.d.ts +13 -0
  743. package/composition/src/attached/attached-lab-runtime.js +112 -0
  744. package/composition/src/attached/attached-runs.d.ts +47 -0
  745. package/composition/src/attached/attached-runs.js +119 -0
  746. package/composition/src/attached/following-lab-runtime.d.ts +10 -0
  747. package/composition/src/attached/following-lab-runtime.js +41 -0
  748. package/composition/src/attached/headless-lab.d.ts +20 -0
  749. package/composition/src/attached/headless-lab.js +65 -0
  750. package/composition/src/attached/lab-window-launcher.d.ts +33 -0
  751. package/composition/src/attached/lab-window-launcher.js +78 -0
  752. package/composition/src/attached/window-client.d.ts +21 -0
  753. package/composition/src/attached/window-client.js +72 -0
  754. package/composition/src/chain-connections.d.ts +39 -0
  755. package/composition/src/chain-connections.js +52 -0
  756. package/composition/src/checkout.d.ts +4 -0
  757. package/composition/src/checkout.js +11 -0
  758. package/composition/src/chopsticks-of-fast.d.ts +34 -0
  759. package/composition/src/chopsticks-of-fast.js +91 -0
  760. package/composition/src/create-lab-runtime.d.ts +70 -0
  761. package/composition/src/create-lab-runtime.js +248 -0
  762. package/composition/src/cucumber.d.ts +8 -0
  763. package/composition/src/cucumber.js +8 -0
  764. package/composition/src/default-dev-server.d.ts +20 -0
  765. package/composition/src/default-dev-server.js +52 -0
  766. package/composition/src/default-lab.d.ts +79 -0
  767. package/composition/src/default-lab.js +597 -0
  768. package/composition/src/default-session-browser.d.ts +7 -0
  769. package/composition/src/default-session-browser.js +17 -0
  770. package/composition/src/default-session-keep.d.ts +60 -0
  771. package/composition/src/default-session-keep.js +86 -0
  772. package/composition/src/default-session-page.d.ts +35 -0
  773. package/composition/src/default-session-page.js +40 -0
  774. package/composition/src/default-session-persons.d.ts +51 -0
  775. package/composition/src/default-session-persons.js +42 -0
  776. package/composition/src/default-session.d.ts +12 -0
  777. package/composition/src/default-session.js +594 -0
  778. package/composition/src/demo-ports.d.ts +8 -0
  779. package/composition/src/demo-ports.js +21 -0
  780. package/composition/src/deployed-app-server.d.ts +36 -0
  781. package/composition/src/deployed-app-server.js +62 -0
  782. package/composition/src/deployed-local-app.d.ts +30 -0
  783. package/composition/src/deployed-local-app.js +48 -0
  784. package/composition/src/device-browsers.d.ts +6 -0
  785. package/composition/src/device-browsers.js +16 -0
  786. package/composition/src/engine-setup.d.ts +1 -0
  787. package/composition/src/engine-setup.js +37 -0
  788. package/composition/src/feature-runtime.d.ts +5 -0
  789. package/composition/src/feature-runtime.js +12 -0
  790. package/composition/src/fixture-sharing.d.ts +12 -0
  791. package/composition/src/fixture-sharing.js +62 -0
  792. package/composition/src/fork-attach.d.ts +31 -0
  793. package/composition/src/fork-attach.js +80 -0
  794. package/composition/src/fork-live.d.ts +13 -0
  795. package/composition/src/fork-live.js +70 -0
  796. package/composition/src/gateway-program.d.ts +1 -0
  797. package/composition/src/gateway-program.js +24 -0
  798. package/composition/src/gateway-shutdown.d.ts +4 -0
  799. package/composition/src/gateway-shutdown.js +13 -0
  800. package/composition/src/host-tool-services.d.ts +21 -0
  801. package/composition/src/host-tool-services.js +27 -0
  802. package/composition/src/host-words.d.ts +3 -0
  803. package/composition/src/host-words.js +16 -0
  804. package/composition/src/identity-funding.d.ts +37 -0
  805. package/composition/src/identity-funding.js +92 -0
  806. package/composition/src/index.d.ts +38 -0
  807. package/composition/src/index.js +40 -0
  808. package/composition/src/machine-inputs.d.ts +67 -0
  809. package/composition/src/machine-inputs.js +98 -0
  810. package/composition/src/network-copies.d.ts +19 -0
  811. package/composition/src/network-copies.js +44 -0
  812. package/composition/src/node-system.d.ts +69 -0
  813. package/composition/src/node-system.js +89 -0
  814. package/composition/src/observe-browser-page.d.ts +15 -0
  815. package/composition/src/observe-browser-page.js +39 -0
  816. package/composition/src/old-environment-state.d.ts +13 -0
  817. package/composition/src/old-environment-state.js +138 -0
  818. package/composition/src/people-dev/genesis.d.ts +20 -0
  819. package/composition/src/people-dev/genesis.js +6 -0
  820. package/composition/src/people-dev/member-key.d.ts +58 -0
  821. package/composition/src/people-dev/member-key.js +110 -0
  822. package/composition/src/people-dev/onboarding.d.ts +142 -0
  823. package/composition/src/people-dev/onboarding.js +220 -0
  824. package/composition/src/people-dev/people-chunks.json +14 -0
  825. package/composition/src/people-dev/readings.d.ts +15 -0
  826. package/composition/src/people-dev/readings.js +35 -0
  827. package/composition/src/people-dev/xcm-stand-in.d.ts +163 -0
  828. package/composition/src/people-dev/xcm-stand-in.js +183 -0
  829. package/composition/src/people-keep/discard.d.ts +29 -0
  830. package/composition/src/people-keep/discard.js +59 -0
  831. package/composition/src/people-keep/kept-people.d.ts +53 -0
  832. package/composition/src/people-keep/kept-people.js +56 -0
  833. package/composition/src/people-keep/lifecycle.d.ts +48 -0
  834. package/composition/src/people-keep/lifecycle.js +69 -0
  835. package/composition/src/people-keep/saved-people.d.ts +35 -0
  836. package/composition/src/people-keep/saved-people.js +56 -0
  837. package/composition/src/platform/index.d.ts +1 -0
  838. package/composition/src/platform/index.js +3 -0
  839. package/composition/src/platform/platform-integration.d.ts +41 -0
  840. package/composition/src/platform/platform-integration.js +251 -0
  841. package/composition/src/platform/reported-ports.d.ts +4 -0
  842. package/composition/src/platform/reported-ports.js +31 -0
  843. package/composition/src/pre-onboarded-identities.d.ts +12 -0
  844. package/composition/src/pre-onboarded-identities.js +42 -0
  845. package/composition/src/process.d.ts +22 -0
  846. package/composition/src/process.js +27 -0
  847. package/composition/src/product-versions.d.ts +40 -0
  848. package/composition/src/product-versions.js +51 -0
  849. package/composition/src/public-identities.d.ts +44 -0
  850. package/composition/src/public-identities.js +88 -0
  851. package/composition/src/recording-browsers.d.ts +3 -0
  852. package/composition/src/recording-browsers.js +9 -0
  853. package/composition/src/recordings-directory.d.ts +1 -0
  854. package/composition/src/recordings-directory.js +10 -0
  855. package/composition/src/redact-console.d.ts +5 -0
  856. package/composition/src/redact-console.js +10 -0
  857. package/composition/src/root-call-support.d.ts +3 -0
  858. package/composition/src/root-call-support.js +16 -0
  859. package/composition/src/running-lab-variable.d.ts +8 -0
  860. package/composition/src/running-lab-variable.js +14 -0
  861. package/composition/src/session-frames.d.ts +5 -0
  862. package/composition/src/session-frames.js +12 -0
  863. package/composition/src/session-hosts.d.ts +66 -0
  864. package/composition/src/session-hosts.js +217 -0
  865. package/composition/src/session-placement.d.ts +25 -0
  866. package/composition/src/session-placement.js +21 -0
  867. package/composition/src/versions/lab-version-ports.d.ts +27 -0
  868. package/composition/src/versions/lab-version-ports.js +57 -0
  869. package/composition/src/versions/version-source-catalogue.d.ts +90 -0
  870. package/composition/src/versions/version-source-catalogue.js +134 -0
  871. package/contracts/browser/README.md +65 -0
  872. package/contracts/browser/src/index.d.ts +2 -0
  873. package/contracts/browser/src/index.js +4 -0
  874. package/contracts/browser/src/kit.d.ts +83 -0
  875. package/contracts/browser/src/kit.js +493 -0
  876. package/contracts/browser/src/runner.d.ts +71 -0
  877. package/contracts/browser/src/runner.js +156 -0
  878. package/contracts/chain/README.md +81 -0
  879. package/contracts/chain/src/cases/access.d.ts +3 -0
  880. package/contracts/chain/src/cases/access.js +68 -0
  881. package/contracts/chain/src/cases/history.d.ts +3 -0
  882. package/contracts/chain/src/cases/history.js +82 -0
  883. package/contracts/chain/src/cases/keys.d.ts +3 -0
  884. package/contracts/chain/src/cases/keys.js +131 -0
  885. package/contracts/chain/src/cases/submit.d.ts +3 -0
  886. package/contracts/chain/src/cases/submit.js +223 -0
  887. package/contracts/chain/src/cases/validator.d.ts +3 -0
  888. package/contracts/chain/src/cases/validator.js +59 -0
  889. package/contracts/chain/src/context.d.ts +51 -0
  890. package/contracts/chain/src/context.js +125 -0
  891. package/contracts/chain/src/index.d.ts +2 -0
  892. package/contracts/chain/src/index.js +4 -0
  893. package/contracts/chain/src/kit.d.ts +36 -0
  894. package/contracts/chain/src/kit.js +33 -0
  895. package/contracts/chain/src/runner.d.ts +71 -0
  896. package/contracts/chain/src/runner.js +156 -0
  897. package/contracts/chain/src/subject.d.ts +75 -0
  898. package/contracts/chain/src/subject.js +25 -0
  899. package/contracts/environment/README.md +90 -0
  900. package/contracts/environment/src/cases/declared-options.d.ts +3 -0
  901. package/contracts/environment/src/cases/declared-options.js +103 -0
  902. package/contracts/environment/src/cases/lifecycle.d.ts +3 -0
  903. package/contracts/environment/src/cases/lifecycle.js +130 -0
  904. package/contracts/environment/src/cases/options.d.ts +3 -0
  905. package/contracts/environment/src/cases/options.js +123 -0
  906. package/contracts/environment/src/cases/probe.d.ts +3 -0
  907. package/contracts/environment/src/cases/probe.js +63 -0
  908. package/contracts/environment/src/cases/topology.d.ts +3 -0
  909. package/contracts/environment/src/cases/topology.js +101 -0
  910. package/contracts/environment/src/checks.d.ts +31 -0
  911. package/contracts/environment/src/checks.js +93 -0
  912. package/contracts/environment/src/context.d.ts +23 -0
  913. package/contracts/environment/src/context.js +51 -0
  914. package/contracts/environment/src/index.d.ts +2 -0
  915. package/contracts/environment/src/index.js +4 -0
  916. package/contracts/environment/src/kit.d.ts +32 -0
  917. package/contracts/environment/src/kit.js +34 -0
  918. package/contracts/environment/src/runner.d.ts +71 -0
  919. package/contracts/environment/src/runner.js +156 -0
  920. package/contracts/environment/src/subject.d.ts +83 -0
  921. package/contracts/environment/src/subject.js +14 -0
  922. package/contracts/host/README.md +71 -0
  923. package/contracts/host/src/cases/approvals.d.ts +3 -0
  924. package/contracts/host/src/cases/approvals.js +112 -0
  925. package/contracts/host/src/cases/conditions.d.ts +3 -0
  926. package/contracts/host/src/cases/conditions.js +43 -0
  927. package/contracts/host/src/cases/hostile.d.ts +3 -0
  928. package/contracts/host/src/cases/hostile.js +131 -0
  929. package/contracts/host/src/cases/identity-navigation.d.ts +3 -0
  930. package/contracts/host/src/cases/identity-navigation.js +85 -0
  931. package/contracts/host/src/cases/network.d.ts +3 -0
  932. package/contracts/host/src/cases/network.js +46 -0
  933. package/contracts/host/src/cases/sessions.d.ts +3 -0
  934. package/contracts/host/src/cases/sessions.js +113 -0
  935. package/contracts/host/src/context.d.ts +85 -0
  936. package/contracts/host/src/context.js +145 -0
  937. package/contracts/host/src/derivation.d.ts +19 -0
  938. package/contracts/host/src/derivation.js +76 -0
  939. package/contracts/host/src/index.d.ts +6 -0
  940. package/contracts/host/src/index.js +8 -0
  941. package/contracts/host/src/kit.d.ts +27 -0
  942. package/contracts/host/src/kit.js +128 -0
  943. package/contracts/host/src/module-host-verifier.d.ts +19 -0
  944. package/contracts/host/src/module-host-verifier.js +80 -0
  945. package/contracts/host/src/probe/channels.d.ts +18 -0
  946. package/contracts/host/src/probe/channels.js +11 -0
  947. package/contracts/host/src/probe/page.d.ts +89 -0
  948. package/contracts/host/src/probe/page.js +253 -0
  949. package/contracts/host/src/probe/server.d.ts +23 -0
  950. package/contracts/host/src/probe/server.js +102 -0
  951. package/contracts/host/src/probe/truapi-version.d.ts +5 -0
  952. package/contracts/host/src/probe/truapi-version.js +20 -0
  953. package/contracts/host/src/targets.d.ts +49 -0
  954. package/contracts/host/src/targets.js +39 -0
  955. package/core/application/README.md +517 -0
  956. package/core/application/src/actors/actor-bindings.d.ts +18 -0
  957. package/core/application/src/actors/actor-bindings.js +38 -0
  958. package/core/application/src/actors/actor-view.d.ts +35 -0
  959. package/core/application/src/actors/actor-view.js +40 -0
  960. package/core/application/src/actors/bind-actors.d.ts +82 -0
  961. package/core/application/src/actors/bind-actors.js +156 -0
  962. package/core/application/src/actors/binding-error.d.ts +4 -0
  963. package/core/application/src/actors/binding-error.js +5 -0
  964. package/core/application/src/actors/manage-actors.d.ts +64 -0
  965. package/core/application/src/actors/manage-actors.js +147 -0
  966. package/core/application/src/apps/app-gate.d.ts +43 -0
  967. package/core/application/src/apps/app-gate.js +106 -0
  968. package/core/application/src/apps/app-reloads.d.ts +74 -0
  969. package/core/application/src/apps/app-reloads.js +470 -0
  970. package/core/application/src/apps/app-update-hub.d.ts +33 -0
  971. package/core/application/src/apps/app-update-hub.js +116 -0
  972. package/core/application/src/apps/inspect-app-framing.d.ts +9 -0
  973. package/core/application/src/apps/inspect-app-framing.js +25 -0
  974. package/core/application/src/bisect/bisect-regression.d.ts +52 -0
  975. package/core/application/src/bisect/bisect-regression.js +168 -0
  976. package/core/application/src/bisect/probe-session.d.ts +52 -0
  977. package/core/application/src/bisect/probe-session.js +208 -0
  978. package/core/application/src/builder/build-scenarios.d.ts +55 -0
  979. package/core/application/src/builder/build-scenarios.js +261 -0
  980. package/core/application/src/environment/account-watch.d.ts +41 -0
  981. package/core/application/src/environment/account-watch.js +117 -0
  982. package/core/application/src/environment/active-environment.d.ts +165 -0
  983. package/core/application/src/environment/active-environment.js +361 -0
  984. package/core/application/src/environment/advance-environment-time.d.ts +37 -0
  985. package/core/application/src/environment/advance-environment-time.js +52 -0
  986. package/core/application/src/environment/chain-day-ended.d.ts +7 -0
  987. package/core/application/src/environment/chain-day-ended.js +8 -0
  988. package/core/application/src/environment/confirmations.d.ts +15 -0
  989. package/core/application/src/environment/confirmations.js +23 -0
  990. package/core/application/src/environment/endpoint-heads.d.ts +4 -0
  991. package/core/application/src/environment/endpoint-heads.js +26 -0
  992. package/core/application/src/environment/endpoint-services.d.ts +13 -0
  993. package/core/application/src/environment/endpoint-services.js +35 -0
  994. package/core/application/src/environment/environment-option-picker.d.ts +38 -0
  995. package/core/application/src/environment/environment-option-picker.js +62 -0
  996. package/core/application/src/environment/environment-option-views.d.ts +30 -0
  997. package/core/application/src/environment/environment-option-views.js +22 -0
  998. package/core/application/src/environment/environment-request-error.d.ts +1 -0
  999. package/core/application/src/environment/environment-request-error.js +3 -0
  1000. package/core/application/src/environment/environment-retention.d.ts +11 -0
  1001. package/core/application/src/environment/environment-retention.js +16 -0
  1002. package/core/application/src/environment/environment-rpc.d.ts +17 -0
  1003. package/core/application/src/environment/environment-rpc.js +39 -0
  1004. package/core/application/src/environment/keep-between-starts.d.ts +18 -0
  1005. package/core/application/src/environment/keep-between-starts.js +44 -0
  1006. package/core/application/src/environment/prepare-environment-tooling.d.ts +21 -0
  1007. package/core/application/src/environment/prepare-environment-tooling.js +65 -0
  1008. package/core/application/src/environment/public-writes.d.ts +5 -0
  1009. package/core/application/src/environment/public-writes.js +9 -0
  1010. package/core/application/src/environment/read-chain-console.d.ts +23 -0
  1011. package/core/application/src/environment/read-chain-console.js +117 -0
  1012. package/core/application/src/environment/reset-environment.d.ts +12 -0
  1013. package/core/application/src/environment/reset-environment.js +38 -0
  1014. package/core/application/src/environment/running-labs.d.ts +13 -0
  1015. package/core/application/src/environment/running-labs.js +22 -0
  1016. package/core/application/src/environment/show-environment.d.ts +19 -0
  1017. package/core/application/src/environment/show-environment.js +63 -0
  1018. package/core/application/src/environment/start-environment.d.ts +85 -0
  1019. package/core/application/src/environment/start-environment.js +223 -0
  1020. package/core/application/src/environment/stop-environment.d.ts +11 -0
  1021. package/core/application/src/environment/stop-environment.js +33 -0
  1022. package/core/application/src/environment/switch-environment.d.ts +62 -0
  1023. package/core/application/src/environment/switch-environment.js +175 -0
  1024. package/core/application/src/explore/exploration-runs.d.ts +21 -0
  1025. package/core/application/src/explore/exploration-runs.js +54 -0
  1026. package/core/application/src/explore/explore-lab.d.ts +30 -0
  1027. package/core/application/src/explore/explore-lab.js +185 -0
  1028. package/core/application/src/explore/what-if-lab.d.ts +27 -0
  1029. package/core/application/src/explore/what-if-lab.js +166 -0
  1030. package/core/application/src/features/breakpoint-error.d.ts +4 -0
  1031. package/core/application/src/features/breakpoint-error.js +5 -0
  1032. package/core/application/src/features/check-host-network.d.ts +29 -0
  1033. package/core/application/src/features/check-host-network.js +82 -0
  1034. package/core/application/src/features/check-host-requests.d.ts +5 -0
  1035. package/core/application/src/features/check-host-requests.js +22 -0
  1036. package/core/application/src/features/coverage-lab.d.ts +9 -0
  1037. package/core/application/src/features/coverage-lab.js +74 -0
  1038. package/core/application/src/features/expand-outline.d.ts +9 -0
  1039. package/core/application/src/features/expand-outline.js +16 -0
  1040. package/core/application/src/features/feature-calls.d.ts +49 -0
  1041. package/core/application/src/features/feature-calls.js +104 -0
  1042. package/core/application/src/features/feature-plan-error.d.ts +16 -0
  1043. package/core/application/src/features/feature-plan-error.js +19 -0
  1044. package/core/application/src/features/feature-run-error.d.ts +6 -0
  1045. package/core/application/src/features/feature-run-error.js +10 -0
  1046. package/core/application/src/features/feature-run.d.ts +75 -0
  1047. package/core/application/src/features/feature-run.js +231 -0
  1048. package/core/application/src/features/feature-scenario.d.ts +156 -0
  1049. package/core/application/src/features/feature-scenario.js +623 -0
  1050. package/core/application/src/features/feature-step-error.d.ts +17 -0
  1051. package/core/application/src/features/feature-step-error.js +17 -0
  1052. package/core/application/src/features/feature-step-gate.d.ts +54 -0
  1053. package/core/application/src/features/feature-step-gate.js +93 -0
  1054. package/core/application/src/features/feature-step-times.d.ts +16 -0
  1055. package/core/application/src/features/feature-step-times.js +30 -0
  1056. package/core/application/src/features/feature-steps.d.ts +3 -0
  1057. package/core/application/src/features/feature-steps.js +22 -0
  1058. package/core/application/src/features/inspect-pause.d.ts +27 -0
  1059. package/core/application/src/features/inspect-pause.js +176 -0
  1060. package/core/application/src/features/inspect-scenario.d.ts +14 -0
  1061. package/core/application/src/features/inspect-scenario.js +98 -0
  1062. package/core/application/src/features/lab-feature-session.d.ts +67 -0
  1063. package/core/application/src/features/lab-feature-session.js +264 -0
  1064. package/core/application/src/features/lint-lab.d.ts +15 -0
  1065. package/core/application/src/features/lint-lab.js +204 -0
  1066. package/core/application/src/features/list-features.d.ts +26 -0
  1067. package/core/application/src/features/list-features.js +92 -0
  1068. package/core/application/src/features/manage-breakpoints.d.ts +45 -0
  1069. package/core/application/src/features/manage-breakpoints.js +105 -0
  1070. package/core/application/src/features/no-funds.d.ts +3 -0
  1071. package/core/application/src/features/no-funds.js +13 -0
  1072. package/core/application/src/features/pause-inspection-error.d.ts +4 -0
  1073. package/core/application/src/features/pause-inspection-error.js +5 -0
  1074. package/core/application/src/features/plan-feature-scenario.d.ts +28 -0
  1075. package/core/application/src/features/plan-feature-scenario.js +66 -0
  1076. package/core/application/src/features/plan-mutants.d.ts +9 -0
  1077. package/core/application/src/features/plan-mutants.js +33 -0
  1078. package/core/application/src/features/prepared-characters.d.ts +13 -0
  1079. package/core/application/src/features/prepared-characters.js +52 -0
  1080. package/core/application/src/features/read-scenario-conditions.d.ts +29 -0
  1081. package/core/application/src/features/read-scenario-conditions.js +38 -0
  1082. package/core/application/src/features/reconcile-host-bypass.d.ts +7 -0
  1083. package/core/application/src/features/reconcile-host-bypass.js +20 -0
  1084. package/core/application/src/features/resolve-run-devices.d.ts +14 -0
  1085. package/core/application/src/features/resolve-run-devices.js +31 -0
  1086. package/core/application/src/features/run-feature-steps.d.ts +41 -0
  1087. package/core/application/src/features/run-feature-steps.js +37 -0
  1088. package/core/application/src/features/run-features.d.ts +112 -0
  1089. package/core/application/src/features/run-features.js +397 -0
  1090. package/core/application/src/features/run-scoped-values.d.ts +17 -0
  1091. package/core/application/src/features/run-scoped-values.js +37 -0
  1092. package/core/application/src/features/scenario-actor-creation.d.ts +60 -0
  1093. package/core/application/src/features/scenario-actor-creation.js +107 -0
  1094. package/core/application/src/features/scenario-conditions.d.ts +13 -0
  1095. package/core/application/src/features/scenario-conditions.js +64 -0
  1096. package/core/application/src/features/scenario-inspection.d.ts +5 -0
  1097. package/core/application/src/features/scenario-inspection.js +34 -0
  1098. package/core/application/src/features/scenario-race.d.ts +8 -0
  1099. package/core/application/src/features/scenario-race.js +8 -0
  1100. package/core/application/src/features/scenario-step-checks.d.ts +22 -0
  1101. package/core/application/src/features/scenario-step-checks.js +114 -0
  1102. package/core/application/src/features/step-checks.d.ts +49 -0
  1103. package/core/application/src/features/step-checks.js +42 -0
  1104. package/core/application/src/features/watch-features.d.ts +23 -0
  1105. package/core/application/src/features/watch-features.js +80 -0
  1106. package/core/application/src/fixtures/build-fixture.d.ts +22 -0
  1107. package/core/application/src/fixtures/build-fixture.js +69 -0
  1108. package/core/application/src/fixtures/check-fixtures.d.ts +15 -0
  1109. package/core/application/src/fixtures/check-fixtures.js +80 -0
  1110. package/core/application/src/fixtures/download-fixture.d.ts +19 -0
  1111. package/core/application/src/fixtures/download-fixture.js +92 -0
  1112. package/core/application/src/fixtures/export-fixture.d.ts +16 -0
  1113. package/core/application/src/fixtures/export-fixture.js +87 -0
  1114. package/core/application/src/fixtures/fixture-characters.d.ts +10 -0
  1115. package/core/application/src/fixtures/fixture-characters.js +24 -0
  1116. package/core/application/src/fixtures/fixture-checkout.d.ts +15 -0
  1117. package/core/application/src/fixtures/fixture-checkout.js +25 -0
  1118. package/core/application/src/fixtures/fixture-context.d.ts +79 -0
  1119. package/core/application/src/fixtures/fixture-context.js +139 -0
  1120. package/core/application/src/fixtures/fixture-maintenance-service.d.ts +23 -0
  1121. package/core/application/src/fixtures/fixture-maintenance-service.js +26 -0
  1122. package/core/application/src/fixtures/fixture-run-guard.d.ts +17 -0
  1123. package/core/application/src/fixtures/fixture-run-guard.js +42 -0
  1124. package/core/application/src/fixtures/fixture-sharing-ports.d.ts +17 -0
  1125. package/core/application/src/fixtures/fixture-sharing-ports.js +3 -0
  1126. package/core/application/src/fixtures/fixture-sharing-service.d.ts +22 -0
  1127. package/core/application/src/fixtures/fixture-sharing-service.js +28 -0
  1128. package/core/application/src/fixtures/import-fixture.d.ts +42 -0
  1129. package/core/application/src/fixtures/import-fixture.js +212 -0
  1130. package/core/application/src/fixtures/isolate-scenario.d.ts +23 -0
  1131. package/core/application/src/fixtures/isolate-scenario.js +104 -0
  1132. package/core/application/src/fixtures/keep-run-start.d.ts +36 -0
  1133. package/core/application/src/fixtures/keep-run-start.js +77 -0
  1134. package/core/application/src/fixtures/list-fixtures.d.ts +16 -0
  1135. package/core/application/src/fixtures/list-fixtures.js +91 -0
  1136. package/core/application/src/fixtures/prepare-scenario-fixture.d.ts +42 -0
  1137. package/core/application/src/fixtures/prepare-scenario-fixture.js +157 -0
  1138. package/core/application/src/fixtures/push-fixture.d.ts +15 -0
  1139. package/core/application/src/fixtures/push-fixture.js +43 -0
  1140. package/core/application/src/fixtures/refresh-fixture.d.ts +27 -0
  1141. package/core/application/src/fixtures/refresh-fixture.js +141 -0
  1142. package/core/application/src/fixtures/restore-fixture.d.ts +36 -0
  1143. package/core/application/src/fixtures/restore-fixture.js +129 -0
  1144. package/core/application/src/fixtures/save-fixture.d.ts +35 -0
  1145. package/core/application/src/fixtures/save-fixture.js +137 -0
  1146. package/core/application/src/fixtures/start-from-fixture.d.ts +23 -0
  1147. package/core/application/src/fixtures/start-from-fixture.js +43 -0
  1148. package/core/application/src/hosts/acquire-host.d.ts +23 -0
  1149. package/core/application/src/hosts/acquire-host.js +59 -0
  1150. package/core/application/src/hosts/host-request-error.d.ts +6 -0
  1151. package/core/application/src/hosts/host-request-error.js +10 -0
  1152. package/core/application/src/hosts/verify-host.d.ts +37 -0
  1153. package/core/application/src/hosts/verify-host.js +93 -0
  1154. package/core/application/src/index.d.ts +96 -0
  1155. package/core/application/src/index.js +96 -0
  1156. package/core/application/src/lab/before-close.d.ts +12 -0
  1157. package/core/application/src/lab/before-close.js +14 -0
  1158. package/core/application/src/lab/check-extensions.d.ts +5 -0
  1159. package/core/application/src/lab/check-extensions.js +12 -0
  1160. package/core/application/src/lab/check-lab.d.ts +35 -0
  1161. package/core/application/src/lab/check-lab.js +82 -0
  1162. package/core/application/src/lab/lab-state.d.ts +87 -0
  1163. package/core/application/src/lab/lab-state.js +38 -0
  1164. package/core/application/src/lab/load-lab.d.ts +15 -0
  1165. package/core/application/src/lab/load-lab.js +35 -0
  1166. package/core/application/src/lab/runtime-events.d.ts +7 -0
  1167. package/core/application/src/lab/runtime-events.js +17 -0
  1168. package/core/application/src/lab-runtime-ports.d.ts +297 -0
  1169. package/core/application/src/lab-runtime-ports.js +3 -0
  1170. package/core/application/src/lab-runtime-service.d.ts +281 -0
  1171. package/core/application/src/lab-runtime-service.js +520 -0
  1172. package/core/application/src/lab-runtime-use-cases.d.ts +3 -0
  1173. package/core/application/src/lab-runtime-use-cases.js +280 -0
  1174. package/core/application/src/load/run-load.d.ts +23 -0
  1175. package/core/application/src/load/run-load.js +88 -0
  1176. package/core/application/src/navigation/resolve-navigation-destination.d.ts +8 -0
  1177. package/core/application/src/navigation/resolve-navigation-destination.js +39 -0
  1178. package/core/application/src/orchestration/activity/monitor.d.ts +16 -0
  1179. package/core/application/src/orchestration/activity/monitor.js +49 -0
  1180. package/core/application/src/orchestration/activity/types.d.ts +1 -0
  1181. package/core/application/src/orchestration/activity/types.js +3 -0
  1182. package/core/application/src/orchestration/capabilities.d.ts +8 -0
  1183. package/core/application/src/orchestration/capabilities.js +3 -0
  1184. package/core/application/src/orchestration/chain/account-queue.d.ts +26 -0
  1185. package/core/application/src/orchestration/chain/account-queue.js +61 -0
  1186. package/core/application/src/orchestration/chain/activity-ids.d.ts +14 -0
  1187. package/core/application/src/orchestration/chain/activity-ids.js +11 -0
  1188. package/core/application/src/orchestration/chain/batch-failed-error.d.ts +13 -0
  1189. package/core/application/src/orchestration/chain/batch-failed-error.js +14 -0
  1190. package/core/application/src/orchestration/chain/batch-submission.d.ts +60 -0
  1191. package/core/application/src/orchestration/chain/batch-submission.js +77 -0
  1192. package/core/application/src/orchestration/chain/chain-connection.d.ts +78 -0
  1193. package/core/application/src/orchestration/chain/chain-connection.js +82 -0
  1194. package/core/application/src/orchestration/chain/dispatch-failed-error.d.ts +12 -0
  1195. package/core/application/src/orchestration/chain/dispatch-failed-error.js +16 -0
  1196. package/core/application/src/orchestration/chain/events.d.ts +56 -0
  1197. package/core/application/src/orchestration/chain/events.js +97 -0
  1198. package/core/application/src/orchestration/chain/funding-batch.d.ts +40 -0
  1199. package/core/application/src/orchestration/chain/funding-batch.js +100 -0
  1200. package/core/application/src/orchestration/chain/index.d.ts +14 -0
  1201. package/core/application/src/orchestration/chain/index.js +15 -0
  1202. package/core/application/src/orchestration/chain/root-call-failed-error.d.ts +6 -0
  1203. package/core/application/src/orchestration/chain/root-call-failed-error.js +8 -0
  1204. package/core/application/src/orchestration/chain/root-call-refused-error.d.ts +6 -0
  1205. package/core/application/src/orchestration/chain/root-call-refused-error.js +8 -0
  1206. package/core/application/src/orchestration/chain/root-caller.d.ts +56 -0
  1207. package/core/application/src/orchestration/chain/root-caller.js +54 -0
  1208. package/core/application/src/orchestration/chain/scenario-journal.d.ts +27 -0
  1209. package/core/application/src/orchestration/chain/scenario-journal.js +28 -0
  1210. package/core/application/src/orchestration/chain/signing-queues.d.ts +28 -0
  1211. package/core/application/src/orchestration/chain/signing-queues.js +93 -0
  1212. package/core/application/src/orchestration/chain/statement-reader.d.ts +79 -0
  1213. package/core/application/src/orchestration/chain/statement-reader.js +108 -0
  1214. package/core/application/src/orchestration/chain/transaction-executor.d.ts +85 -0
  1215. package/core/application/src/orchestration/chain/transaction-executor.js +184 -0
  1216. package/core/application/src/orchestration/chain/unreadable-blocks-error.d.ts +15 -0
  1217. package/core/application/src/orchestration/chain/unreadable-blocks-error.js +17 -0
  1218. package/core/application/src/orchestration/definitions.d.ts +2 -0
  1219. package/core/application/src/orchestration/definitions.js +5 -0
  1220. package/core/application/src/orchestration/host/chain-gate-source.d.ts +34 -0
  1221. package/core/application/src/orchestration/host/chain-gate-source.js +65 -0
  1222. package/core/application/src/orchestration/host/destinations.d.ts +6 -0
  1223. package/core/application/src/orchestration/host/destinations.js +3 -0
  1224. package/core/application/src/orchestration/host/host-registry.d.ts +93 -0
  1225. package/core/application/src/orchestration/host/host-registry.js +255 -0
  1226. package/core/application/src/orchestration/host/host-routes.d.ts +14 -0
  1227. package/core/application/src/orchestration/host/host-routes.js +11 -0
  1228. package/core/application/src/orchestration/host/host-session-registry.d.ts +79 -0
  1229. package/core/application/src/orchestration/host/host-session-registry.js +150 -0
  1230. package/core/application/src/orchestration/host/index.d.ts +8 -0
  1231. package/core/application/src/orchestration/host/index.js +10 -0
  1232. package/core/application/src/orchestration/host/lab-navigation.d.ts +103 -0
  1233. package/core/application/src/orchestration/host/lab-navigation.js +188 -0
  1234. package/core/application/src/orchestration/host/navigation-bridge.d.ts +82 -0
  1235. package/core/application/src/orchestration/host/navigation-bridge.js +123 -0
  1236. package/core/application/src/orchestration/host/port.d.ts +12 -0
  1237. package/core/application/src/orchestration/host/port.js +3 -0
  1238. package/core/application/src/orchestration/host/session-records.d.ts +11 -0
  1239. package/core/application/src/orchestration/host/session-records.js +23 -0
  1240. package/core/application/src/orchestration/identity/index.d.ts +1 -0
  1241. package/core/application/src/orchestration/identity/index.js +3 -0
  1242. package/core/application/src/orchestration/identity/port.d.ts +11 -0
  1243. package/core/application/src/orchestration/identity/port.js +3 -0
  1244. package/core/application/src/orchestration/index.d.ts +52 -0
  1245. package/core/application/src/orchestration/index.js +46 -0
  1246. package/core/application/src/orchestration/integrations/chain-event-assertion.d.ts +49 -0
  1247. package/core/application/src/orchestration/integrations/chain-event-assertion.js +33 -0
  1248. package/core/application/src/orchestration/integrations/define.d.ts +472 -0
  1249. package/core/application/src/orchestration/integrations/define.js +64 -0
  1250. package/core/application/src/orchestration/integrations/generic-sentences.d.ts +1 -0
  1251. package/core/application/src/orchestration/integrations/generic-sentences.js +3 -0
  1252. package/core/application/src/orchestration/integrations/integration-registry.d.ts +53 -0
  1253. package/core/application/src/orchestration/integrations/integration-registry.js +261 -0
  1254. package/core/application/src/orchestration/integrations/integration-scenarios.d.ts +17 -0
  1255. package/core/application/src/orchestration/integrations/integration-scenarios.js +48 -0
  1256. package/core/application/src/orchestration/integrations/integration-sentences.d.ts +78 -0
  1257. package/core/application/src/orchestration/integrations/integration-sentences.js +214 -0
  1258. package/core/application/src/orchestration/integrations/known-submission-error.d.ts +16 -0
  1259. package/core/application/src/orchestration/integrations/known-submission-error.js +22 -0
  1260. package/core/application/src/orchestration/integrations/ui-chain-check.d.ts +104 -0
  1261. package/core/application/src/orchestration/integrations/ui-chain-check.js +191 -0
  1262. package/core/application/src/orchestration/lab/block-availability.d.ts +20 -0
  1263. package/core/application/src/orchestration/lab/block-availability.js +30 -0
  1264. package/core/application/src/orchestration/lab/checked-environment-time.d.ts +29 -0
  1265. package/core/application/src/orchestration/lab/checked-environment-time.js +52 -0
  1266. package/core/application/src/orchestration/lab/compile.d.ts +66 -0
  1267. package/core/application/src/orchestration/lab/compile.js +54 -0
  1268. package/core/application/src/orchestration/lab/declared-lab-catalog.d.ts +132 -0
  1269. package/core/application/src/orchestration/lab/declared-lab-catalog.js +343 -0
  1270. package/core/application/src/orchestration/lab/define.d.ts +377 -0
  1271. package/core/application/src/orchestration/lab/define.js +18 -0
  1272. package/core/application/src/orchestration/lab/environment-actors.d.ts +18 -0
  1273. package/core/application/src/orchestration/lab/environment-actors.js +22 -0
  1274. package/core/application/src/orchestration/lab/environment-fixtures.d.ts +14 -0
  1275. package/core/application/src/orchestration/lab/environment-fixtures.js +43 -0
  1276. package/core/application/src/orchestration/lab/environment-options.d.ts +20 -0
  1277. package/core/application/src/orchestration/lab/environment-options.js +26 -0
  1278. package/core/application/src/orchestration/lab/environment-registry.d.ts +50 -0
  1279. package/core/application/src/orchestration/lab/environment-registry.js +124 -0
  1280. package/core/application/src/orchestration/lab/environment-view.d.ts +12 -0
  1281. package/core/application/src/orchestration/lab/environment-view.js +73 -0
  1282. package/core/application/src/orchestration/lab/environments.d.ts +74 -0
  1283. package/core/application/src/orchestration/lab/environments.js +98 -0
  1284. package/core/application/src/orchestration/lab/holding-browsers.d.ts +16 -0
  1285. package/core/application/src/orchestration/lab/holding-browsers.js +18 -0
  1286. package/core/application/src/orchestration/lab/integration-availability.d.ts +39 -0
  1287. package/core/application/src/orchestration/lab/integration-availability.js +51 -0
  1288. package/core/application/src/orchestration/lab/kept-placements.d.ts +11 -0
  1289. package/core/application/src/orchestration/lab/kept-placements.js +17 -0
  1290. package/core/application/src/orchestration/lab/lab-rpc.d.ts +30 -0
  1291. package/core/application/src/orchestration/lab/lab-rpc.js +153 -0
  1292. package/core/application/src/orchestration/lab/loaded-lab.d.ts +42 -0
  1293. package/core/application/src/orchestration/lab/loaded-lab.js +48 -0
  1294. package/core/application/src/orchestration/lab/product-lab-config.d.ts +244 -0
  1295. package/core/application/src/orchestration/lab/product-lab-config.js +8 -0
  1296. package/core/application/src/orchestration/lab/registry.d.ts +25 -0
  1297. package/core/application/src/orchestration/lab/registry.js +168 -0
  1298. package/core/application/src/orchestration/lab/root-call-access.d.ts +46 -0
  1299. package/core/application/src/orchestration/lab/root-call-access.js +50 -0
  1300. package/core/application/src/orchestration/lab/scenario-conditions.d.ts +25 -0
  1301. package/core/application/src/orchestration/lab/scenario-conditions.js +31 -0
  1302. package/core/application/src/orchestration/lab/session-ports.d.ts +63 -0
  1303. package/core/application/src/orchestration/lab/session-ports.js +132 -0
  1304. package/core/application/src/orchestration/lab/source-lab-loader.d.ts +60 -0
  1305. package/core/application/src/orchestration/lab/source-lab-loader.js +57 -0
  1306. package/core/application/src/orchestration/lab/start-lab-environment.d.ts +6 -0
  1307. package/core/application/src/orchestration/lab/start-lab-environment.js +609 -0
  1308. package/core/application/src/orchestration/lab/topology-overrides.d.ts +3 -0
  1309. package/core/application/src/orchestration/lab/topology-overrides.js +42 -0
  1310. package/core/application/src/orchestration/lab/validate.d.ts +36 -0
  1311. package/core/application/src/orchestration/lab/validate.js +235 -0
  1312. package/core/application/src/orchestration/managed-environment.d.ts +7 -0
  1313. package/core/application/src/orchestration/managed-environment.js +109 -0
  1314. package/core/application/src/orchestration/run/index.d.ts +8 -0
  1315. package/core/application/src/orchestration/run/index.js +3 -0
  1316. package/core/application/src/orchestration/run/resources.d.ts +8 -0
  1317. package/core/application/src/orchestration/run/resources.js +3 -0
  1318. package/core/application/src/orchestration/secrets/dev-account-source.d.ts +10 -0
  1319. package/core/application/src/orchestration/secrets/dev-account-source.js +18 -0
  1320. package/core/application/src/orchestration/secrets/env-source.d.ts +10 -0
  1321. package/core/application/src/orchestration/secrets/env-source.js +19 -0
  1322. package/core/application/src/orchestration/secrets/secret-error.d.ts +5 -0
  1323. package/core/application/src/orchestration/secrets/secret-error.js +10 -0
  1324. package/core/application/src/orchestration/secrets/secret-resolver.d.ts +53 -0
  1325. package/core/application/src/orchestration/secrets/secret-resolver.js +92 -0
  1326. package/core/application/src/orchestration/secrets/secret-source.d.ts +18 -0
  1327. package/core/application/src/orchestration/secrets/secret-source.js +12 -0
  1328. package/core/application/src/orchestration/secrets/sources.d.ts +27 -0
  1329. package/core/application/src/orchestration/secrets/sources.js +42 -0
  1330. package/core/application/src/orchestration/services/authority-error.d.ts +7 -0
  1331. package/core/application/src/orchestration/services/authority-error.js +9 -0
  1332. package/core/application/src/orchestration/services/authorized-service.d.ts +54 -0
  1333. package/core/application/src/orchestration/services/authorized-service.js +59 -0
  1334. package/core/application/src/orchestration/services/define.d.ts +61 -0
  1335. package/core/application/src/orchestration/services/define.js +49 -0
  1336. package/core/application/src/orchestration/services/service-container.d.ts +85 -0
  1337. package/core/application/src/orchestration/services/service-container.js +320 -0
  1338. package/core/application/src/orchestration/services/service-error.d.ts +7 -0
  1339. package/core/application/src/orchestration/services/service-error.js +10 -0
  1340. package/core/application/src/orchestration/services/service-lifetime-scope.d.ts +22 -0
  1341. package/core/application/src/orchestration/services/service-lifetime-scope.js +22 -0
  1342. package/core/application/src/orchestration/services/stale-generation-error.d.ts +5 -0
  1343. package/core/application/src/orchestration/services/stale-generation-error.js +9 -0
  1344. package/core/application/src/orchestration/steps.d.ts +28 -0
  1345. package/core/application/src/orchestration/steps.js +36 -0
  1346. package/core/application/src/orchestration/topology.d.ts +7 -0
  1347. package/core/application/src/orchestration/topology.js +6 -0
  1348. package/core/application/src/orchestration/types.d.ts +4 -0
  1349. package/core/application/src/orchestration/types.js +3 -0
  1350. package/core/application/src/recordings/check-step-speed.d.ts +10 -0
  1351. package/core/application/src/recordings/check-step-speed.js +43 -0
  1352. package/core/application/src/recordings/console-collector.d.ts +21 -0
  1353. package/core/application/src/recordings/console-collector.js +43 -0
  1354. package/core/application/src/recordings/console-log.d.ts +19 -0
  1355. package/core/application/src/recordings/console-log.js +29 -0
  1356. package/core/application/src/recordings/deadline.d.ts +16 -0
  1357. package/core/application/src/recordings/deadline.js +23 -0
  1358. package/core/application/src/recordings/demo-markup.d.ts +66 -0
  1359. package/core/application/src/recordings/demo-markup.js +90 -0
  1360. package/core/application/src/recordings/demo-recording.d.ts +32 -0
  1361. package/core/application/src/recordings/demo-recording.js +213 -0
  1362. package/core/application/src/recordings/frame-sources.d.ts +9 -0
  1363. package/core/application/src/recordings/frame-sources.js +14 -0
  1364. package/core/application/src/recordings/health-sampler.d.ts +33 -0
  1365. package/core/application/src/recordings/health-sampler.js +71 -0
  1366. package/core/application/src/recordings/host-logs.d.ts +17 -0
  1367. package/core/application/src/recordings/host-logs.js +43 -0
  1368. package/core/application/src/recordings/list-recordings.d.ts +11 -0
  1369. package/core/application/src/recordings/list-recordings.js +23 -0
  1370. package/core/application/src/recordings/open-recording.d.ts +17 -0
  1371. package/core/application/src/recordings/open-recording.js +41 -0
  1372. package/core/application/src/recordings/read-run-step-health.d.ts +18 -0
  1373. package/core/application/src/recordings/read-run-step-health.js +39 -0
  1374. package/core/application/src/recordings/record-runs.d.ts +121 -0
  1375. package/core/application/src/recordings/record-runs.js +426 -0
  1376. package/core/application/src/recordings/recording-draft.d.ts +108 -0
  1377. package/core/application/src/recordings/recording-draft.js +214 -0
  1378. package/core/application/src/recordings/recording-stores.d.ts +18 -0
  1379. package/core/application/src/recordings/recording-stores.js +21 -0
  1380. package/core/application/src/recordings/step-chain-reader.d.ts +54 -0
  1381. package/core/application/src/recordings/step-chain-reader.js +176 -0
  1382. package/core/application/src/recordings/step-host-request-reader.d.ts +18 -0
  1383. package/core/application/src/recordings/step-host-request-reader.js +63 -0
  1384. package/core/application/src/recordings/write-journey-docs.d.ts +17 -0
  1385. package/core/application/src/recordings/write-journey-docs.js +119 -0
  1386. package/core/application/src/redaction/bip39-english.d.ts +1 -0
  1387. package/core/application/src/redaction/bip39-english.js +132 -0
  1388. package/core/application/src/redaction/secret-redactor.d.ts +21 -0
  1389. package/core/application/src/redaction/secret-redactor.js +104 -0
  1390. package/core/application/src/runs/activity-log.d.ts +49 -0
  1391. package/core/application/src/runs/activity-log.js +199 -0
  1392. package/core/application/src/runs/after-failure-checks.d.ts +56 -0
  1393. package/core/application/src/runs/after-failure-checks.js +89 -0
  1394. package/core/application/src/runs/after-failure-words.d.ts +9 -0
  1395. package/core/application/src/runs/after-failure-words.js +63 -0
  1396. package/core/application/src/runs/bundles/bundle-paths.d.ts +12 -0
  1397. package/core/application/src/runs/bundles/bundle-paths.js +59 -0
  1398. package/core/application/src/runs/bundles/bundle-recording.d.ts +44 -0
  1399. package/core/application/src/runs/bundles/bundle-recording.js +288 -0
  1400. package/core/application/src/runs/bundles/open-run-bundle.d.ts +23 -0
  1401. package/core/application/src/runs/bundles/open-run-bundle.js +50 -0
  1402. package/core/application/src/runs/bundles/reproduce-run.d.ts +44 -0
  1403. package/core/application/src/runs/bundles/reproduce-run.js +173 -0
  1404. package/core/application/src/runs/bundles/run-bundle-ports.d.ts +7 -0
  1405. package/core/application/src/runs/bundles/run-bundle-ports.js +3 -0
  1406. package/core/application/src/runs/bundles/run-bundle-sources.d.ts +18 -0
  1407. package/core/application/src/runs/bundles/run-bundle-sources.js +43 -0
  1408. package/core/application/src/runs/bundles/run-bundles-service.d.ts +20 -0
  1409. package/core/application/src/runs/bundles/run-bundles-service.js +22 -0
  1410. package/core/application/src/runs/bundles/start-state.d.ts +7 -0
  1411. package/core/application/src/runs/bundles/start-state.js +5 -0
  1412. package/core/application/src/runs/cancelled-error.d.ts +4 -0
  1413. package/core/application/src/runs/cancelled-error.js +5 -0
  1414. package/core/application/src/runs/check-stores.d.ts +28 -0
  1415. package/core/application/src/runs/check-stores.js +103 -0
  1416. package/core/application/src/runs/check-transaction-landed.d.ts +59 -0
  1417. package/core/application/src/runs/check-transaction-landed.js +202 -0
  1418. package/core/application/src/runs/collect-evidence.d.ts +11 -0
  1419. package/core/application/src/runs/collect-evidence.js +48 -0
  1420. package/core/application/src/runs/declared-writes.d.ts +17 -0
  1421. package/core/application/src/runs/declared-writes.js +34 -0
  1422. package/core/application/src/runs/explain-failure.d.ts +4 -0
  1423. package/core/application/src/runs/explain-failure.js +95 -0
  1424. package/core/application/src/runs/failure-rules.d.ts +15 -0
  1425. package/core/application/src/runs/failure-rules.js +197 -0
  1426. package/core/application/src/runs/host-bypass-monitor.d.ts +56 -0
  1427. package/core/application/src/runs/host-bypass-monitor.js +420 -0
  1428. package/core/application/src/runs/judge-negative-control.d.ts +4 -0
  1429. package/core/application/src/runs/judge-negative-control.js +8 -0
  1430. package/core/application/src/runs/node-route-identities.d.ts +9 -0
  1431. package/core/application/src/runs/node-route-identities.js +32 -0
  1432. package/core/application/src/runs/plan-error.d.ts +4 -0
  1433. package/core/application/src/runs/plan-error.js +5 -0
  1434. package/core/application/src/runs/quarantined-resource-error.d.ts +6 -0
  1435. package/core/application/src/runs/quarantined-resource-error.js +12 -0
  1436. package/core/application/src/runs/resource-locks.d.ts +44 -0
  1437. package/core/application/src/runs/resource-locks.js +104 -0
  1438. package/core/application/src/runs/run-console.d.ts +35 -0
  1439. package/core/application/src/runs/run-console.js +43 -0
  1440. package/core/application/src/runs/run-failure-message.d.ts +4 -0
  1441. package/core/application/src/runs/run-failure-message.js +28 -0
  1442. package/core/application/src/runs/run-scenario.d.ts +69 -0
  1443. package/core/application/src/runs/run-scenario.js +240 -0
  1444. package/core/application/src/runs/run-transactions.d.ts +17 -0
  1445. package/core/application/src/runs/run-transactions.js +117 -0
  1446. package/core/application/src/runs/scenario-inputs.d.ts +6 -0
  1447. package/core/application/src/runs/scenario-inputs.js +26 -0
  1448. package/core/application/src/runs/scenario-run.d.ts +244 -0
  1449. package/core/application/src/runs/scenario-run.js +600 -0
  1450. package/core/application/src/runs/scheduler.d.ts +235 -0
  1451. package/core/application/src/runs/scheduler.js +400 -0
  1452. package/core/application/src/runs/settle-failed-step.d.ts +27 -0
  1453. package/core/application/src/runs/settle-failed-step.js +110 -0
  1454. package/core/application/src/runs/statement-window.d.ts +37 -0
  1455. package/core/application/src/runs/statement-window.js +76 -0
  1456. package/core/application/src/runs/step-timeout-error.d.ts +4 -0
  1457. package/core/application/src/runs/step-timeout-error.js +5 -0
  1458. package/core/application/src/runs/submission-window.d.ts +102 -0
  1459. package/core/application/src/runs/submission-window.js +233 -0
  1460. package/core/application/src/settings/manage-lab-settings.d.ts +10 -0
  1461. package/core/application/src/settings/manage-lab-settings.js +70 -0
  1462. package/core/application/src/suites/compare-suite-runs.d.ts +15 -0
  1463. package/core/application/src/suites/compare-suite-runs.js +55 -0
  1464. package/core/application/src/suites/observed-versions-file.d.ts +30 -0
  1465. package/core/application/src/suites/observed-versions-file.js +30 -0
  1466. package/core/application/src/suites/row-combination.d.ts +9 -0
  1467. package/core/application/src/suites/row-combination.js +36 -0
  1468. package/core/application/src/suites/row-host-route.d.ts +26 -0
  1469. package/core/application/src/suites/row-host-route.js +30 -0
  1470. package/core/application/src/suites/run-suite.d.ts +76 -0
  1471. package/core/application/src/suites/run-suite.js +367 -0
  1472. package/core/application/src/suites/run-timings-file.d.ts +21 -0
  1473. package/core/application/src/suites/run-timings-file.js +39 -0
  1474. package/core/application/src/suites/run-workers.d.ts +19 -0
  1475. package/core/application/src/suites/run-workers.js +118 -0
  1476. package/core/application/src/suites/start-together.d.ts +15 -0
  1477. package/core/application/src/suites/start-together.js +30 -0
  1478. package/core/application/src/suites/suite-metrics.d.ts +8 -0
  1479. package/core/application/src/suites/suite-metrics.js +67 -0
  1480. package/core/application/src/suites/summarize-suite-run.d.ts +6 -0
  1481. package/core/application/src/suites/summarize-suite-run.js +57 -0
  1482. package/core/application/src/tools/runtime-tool-context.d.ts +5 -0
  1483. package/core/application/src/tools/runtime-tool-context.js +40 -0
  1484. package/core/application/src/tools/save-scenario.d.ts +18 -0
  1485. package/core/application/src/tools/save-scenario.js +49 -0
  1486. package/core/application/src/tools/tool-catalog.d.ts +27 -0
  1487. package/core/application/src/tools/tool-catalog.js +157 -0
  1488. package/core/application/src/tools/tool-context.d.ts +34 -0
  1489. package/core/application/src/tools/tool-context.js +3 -0
  1490. package/core/application/src/tools/tool-reports.d.ts +56 -0
  1491. package/core/application/src/tools/tool-reports.js +253 -0
  1492. package/core/application/src/tools/tool-runner.d.ts +67 -0
  1493. package/core/application/src/tools/tool-runner.js +423 -0
  1494. package/core/application/src/versions/check-recovery.d.ts +20 -0
  1495. package/core/application/src/versions/check-recovery.js +14 -0
  1496. package/core/application/src/versions/lab-artifacts.d.ts +27 -0
  1497. package/core/application/src/versions/lab-artifacts.js +72 -0
  1498. package/core/application/src/versions/lab-versions-service.d.ts +87 -0
  1499. package/core/application/src/versions/lab-versions-service.js +93 -0
  1500. package/core/application/src/versions/lock-proposal-body.d.ts +5 -0
  1501. package/core/application/src/versions/lock-proposal-body.js +59 -0
  1502. package/core/application/src/versions/lock-proposal-evidence.d.ts +28 -0
  1503. package/core/application/src/versions/lock-proposal-evidence.js +158 -0
  1504. package/core/application/src/versions/lock-writer.d.ts +13 -0
  1505. package/core/application/src/versions/lock-writer.js +24 -0
  1506. package/core/application/src/versions/pin-version.d.ts +21 -0
  1507. package/core/application/src/versions/pin-version.js +23 -0
  1508. package/core/application/src/versions/policy-reader.d.ts +16 -0
  1509. package/core/application/src/versions/policy-reader.js +21 -0
  1510. package/core/application/src/versions/propose-lock.d.ts +23 -0
  1511. package/core/application/src/versions/propose-lock.js +100 -0
  1512. package/core/application/src/versions/resolve-versions.d.ts +52 -0
  1513. package/core/application/src/versions/resolve-versions.js +85 -0
  1514. package/core/application/src/versions/run-versions.d.ts +15 -0
  1515. package/core/application/src/versions/run-versions.js +3 -0
  1516. package/core/application/src/versions/show-versions.d.ts +19 -0
  1517. package/core/application/src/versions/show-versions.js +51 -0
  1518. package/core/application/src/versions/update-lock.d.ts +24 -0
  1519. package/core/application/src/versions/update-lock.js +49 -0
  1520. package/core/application/src/versions/verify-lock.d.ts +21 -0
  1521. package/core/application/src/versions/verify-lock.js +53 -0
  1522. package/core/application/src/versions/version-sources.d.ts +18 -0
  1523. package/core/application/src/versions/version-sources.js +33 -0
  1524. package/core/domain/README.md +197 -0
  1525. package/core/domain/src/accounts/account-address.d.ts +48 -0
  1526. package/core/domain/src/accounts/account-address.js +153 -0
  1527. package/core/domain/src/accounts/account-format-error.d.ts +12 -0
  1528. package/core/domain/src/accounts/account-format-error.js +14 -0
  1529. package/core/domain/src/accounts/account-functions.d.ts +15 -0
  1530. package/core/domain/src/accounts/account-functions.js +16 -0
  1531. package/core/domain/src/accounts/ambiguous-account-error.d.ts +9 -0
  1532. package/core/domain/src/accounts/ambiguous-account-error.js +13 -0
  1533. package/core/domain/src/accounts/expected-account.d.ts +19 -0
  1534. package/core/domain/src/accounts/expected-account.js +35 -0
  1535. package/core/domain/src/accounts/hashes.d.ts +4 -0
  1536. package/core/domain/src/accounts/hashes.js +131 -0
  1537. package/core/domain/src/accounts/index.d.ts +5 -0
  1538. package/core/domain/src/accounts/index.js +7 -0
  1539. package/core/domain/src/actors/actor-alias.d.ts +13 -0
  1540. package/core/domain/src/actors/actor-alias.js +24 -0
  1541. package/core/domain/src/actors/actor-id.d.ts +13 -0
  1542. package/core/domain/src/actors/actor-id.js +24 -0
  1543. package/core/domain/src/actors/actor-roster.d.ts +19 -0
  1544. package/core/domain/src/actors/actor-roster.js +36 -0
  1545. package/core/domain/src/actors/actor.d.ts +122 -0
  1546. package/core/domain/src/actors/actor.js +49 -0
  1547. package/core/domain/src/actors/host-color.d.ts +4 -0
  1548. package/core/domain/src/actors/host-color.js +6 -0
  1549. package/core/domain/src/actors/host-options.d.ts +74 -0
  1550. package/core/domain/src/actors/host-options.js +100 -0
  1551. package/core/domain/src/actors/index.d.ts +8 -0
  1552. package/core/domain/src/actors/index.js +10 -0
  1553. package/core/domain/src/actors/principal.d.ts +42 -0
  1554. package/core/domain/src/actors/principal.js +33 -0
  1555. package/core/domain/src/actors/session.d.ts +20 -0
  1556. package/core/domain/src/actors/session.js +35 -0
  1557. package/core/domain/src/agreement/agreement-judge.d.ts +66 -0
  1558. package/core/domain/src/agreement/agreement-judge.js +272 -0
  1559. package/core/domain/src/agreement/agreement-mode.d.ts +14 -0
  1560. package/core/domain/src/agreement/agreement-mode.js +16 -0
  1561. package/core/domain/src/agreement/agreement-record.d.ts +142 -0
  1562. package/core/domain/src/agreement/agreement-record.js +14 -0
  1563. package/core/domain/src/agreement/agreement-sample.d.ts +65 -0
  1564. package/core/domain/src/agreement/agreement-sample.js +3 -0
  1565. package/core/domain/src/agreement/agreement-settings.d.ts +36 -0
  1566. package/core/domain/src/agreement/agreement-settings.js +55 -0
  1567. package/core/domain/src/agreement/claims.d.ts +9 -0
  1568. package/core/domain/src/agreement/claims.js +55 -0
  1569. package/core/domain/src/agreement/index.d.ts +7 -0
  1570. package/core/domain/src/agreement/index.js +9 -0
  1571. package/core/domain/src/agreement/ui-chain-disagreement-error.d.ts +18 -0
  1572. package/core/domain/src/agreement/ui-chain-disagreement-error.js +22 -0
  1573. package/core/domain/src/apps/app-account-source.d.ts +29 -0
  1574. package/core/domain/src/apps/app-account-source.js +41 -0
  1575. package/core/domain/src/apps/app-announcement-window.d.ts +17 -0
  1576. package/core/domain/src/apps/app-announcement-window.js +30 -0
  1577. package/core/domain/src/apps/app-build-message.d.ts +75 -0
  1578. package/core/domain/src/apps/app-build-message.js +42 -0
  1579. package/core/domain/src/apps/app-deployed-source.d.ts +62 -0
  1580. package/core/domain/src/apps/app-deployed-source.js +100 -0
  1581. package/core/domain/src/apps/app-dev-server.d.ts +115 -0
  1582. package/core/domain/src/apps/app-dev-server.js +186 -0
  1583. package/core/domain/src/apps/app-framing.d.ts +70 -0
  1584. package/core/domain/src/apps/app-framing.js +133 -0
  1585. package/core/domain/src/apps/app-readiness.d.ts +102 -0
  1586. package/core/domain/src/apps/app-readiness.js +138 -0
  1587. package/core/domain/src/apps/app-watch.d.ts +62 -0
  1588. package/core/domain/src/apps/app-watch.js +106 -0
  1589. package/core/domain/src/apps/dev-server-socket.d.ts +27 -0
  1590. package/core/domain/src/apps/dev-server-socket.js +76 -0
  1591. package/core/domain/src/apps/host-bypass-policy.d.ts +5 -0
  1592. package/core/domain/src/apps/host-bypass-policy.js +12 -0
  1593. package/core/domain/src/apps/html-script.d.ts +9 -0
  1594. package/core/domain/src/apps/html-script.js +21 -0
  1595. package/core/domain/src/apps/index.d.ts +15 -0
  1596. package/core/domain/src/apps/index.js +17 -0
  1597. package/core/domain/src/apps/next-turbopack-announcement.d.ts +8 -0
  1598. package/core/domain/src/apps/next-turbopack-announcement.js +62 -0
  1599. package/core/domain/src/apps/next-webpack-announcement.d.ts +5 -0
  1600. package/core/domain/src/apps/next-webpack-announcement.js +42 -0
  1601. package/core/domain/src/apps/vite-app-announcement.d.ts +2 -0
  1602. package/core/domain/src/apps/vite-app-announcement.js +30 -0
  1603. package/core/domain/src/apps/webpack-dev-server-announcement.d.ts +12 -0
  1604. package/core/domain/src/apps/webpack-dev-server-announcement.js +56 -0
  1605. package/core/domain/src/builder/builder-check.d.ts +81 -0
  1606. package/core/domain/src/builder/builder-check.js +253 -0
  1607. package/core/domain/src/builder/builder-document.d.ts +95 -0
  1608. package/core/domain/src/builder/builder-document.js +16 -0
  1609. package/core/domain/src/builder/builder-edit.d.ts +70 -0
  1610. package/core/domain/src/builder/builder-edit.js +190 -0
  1611. package/core/domain/src/builder/builder-error.d.ts +8 -0
  1612. package/core/domain/src/builder/builder-error.js +11 -0
  1613. package/core/domain/src/builder/builder-palette.d.ts +101 -0
  1614. package/core/domain/src/builder/builder-palette.js +90 -0
  1615. package/core/domain/src/builder/feature-reader.d.ts +4 -0
  1616. package/core/domain/src/builder/feature-reader.js +326 -0
  1617. package/core/domain/src/builder/feature-writer.d.ts +51 -0
  1618. package/core/domain/src/builder/feature-writer.js +230 -0
  1619. package/core/domain/src/builder/index.d.ts +8 -0
  1620. package/core/domain/src/builder/index.js +10 -0
  1621. package/core/domain/src/builder/round-trip-error.d.ts +6 -0
  1622. package/core/domain/src/builder/round-trip-error.js +10 -0
  1623. package/core/domain/src/checks/index.d.ts +3 -0
  1624. package/core/domain/src/checks/index.js +5 -0
  1625. package/core/domain/src/checks/side-reading.d.ts +96 -0
  1626. package/core/domain/src/checks/side-reading.js +105 -0
  1627. package/core/domain/src/checks/step-check-error.d.ts +4 -0
  1628. package/core/domain/src/checks/step-check-error.js +5 -0
  1629. package/core/domain/src/checks/step-checks.d.ts +115 -0
  1630. package/core/domain/src/checks/step-checks.js +120 -0
  1631. package/core/domain/src/conditions/condition-error.d.ts +4 -0
  1632. package/core/domain/src/conditions/condition-error.js +8 -0
  1633. package/core/domain/src/conditions/condition-profiles.d.ts +15 -0
  1634. package/core/domain/src/conditions/condition-profiles.js +42 -0
  1635. package/core/domain/src/conditions/condition-step.d.ts +29 -0
  1636. package/core/domain/src/conditions/condition-step.js +45 -0
  1637. package/core/domain/src/conditions/conditioned-traffic.d.ts +25 -0
  1638. package/core/domain/src/conditions/conditioned-traffic.js +31 -0
  1639. package/core/domain/src/conditions/conditioned-wire.d.ts +21 -0
  1640. package/core/domain/src/conditions/conditioned-wire.js +38 -0
  1641. package/core/domain/src/conditions/cpu-slowdown.d.ts +4 -0
  1642. package/core/domain/src/conditions/cpu-slowdown.js +9 -0
  1643. package/core/domain/src/conditions/index.d.ts +7 -0
  1644. package/core/domain/src/conditions/index.js +9 -0
  1645. package/core/domain/src/conditions/network-condition.d.ts +18 -0
  1646. package/core/domain/src/conditions/network-condition.js +25 -0
  1647. package/core/domain/src/devices/device-profile.d.ts +43 -0
  1648. package/core/domain/src/devices/device-profile.js +70 -0
  1649. package/core/domain/src/devices/index.d.ts +2 -0
  1650. package/core/domain/src/devices/index.js +4 -0
  1651. package/core/domain/src/devices/synthetic-media.d.ts +15 -0
  1652. package/core/domain/src/devices/synthetic-media.js +7 -0
  1653. package/core/domain/src/explore/exploration-alphabet.d.ts +30 -0
  1654. package/core/domain/src/explore/exploration-alphabet.js +88 -0
  1655. package/core/domain/src/explore/failure-signature.d.ts +13 -0
  1656. package/core/domain/src/explore/failure-signature.js +14 -0
  1657. package/core/domain/src/explore/index.d.ts +6 -0
  1658. package/core/domain/src/explore/index.js +8 -0
  1659. package/core/domain/src/explore/seeded-random.d.ts +11 -0
  1660. package/core/domain/src/explore/seeded-random.js +27 -0
  1661. package/core/domain/src/explore/shrink-steps.d.ts +15 -0
  1662. package/core/domain/src/explore/shrink-steps.js +42 -0
  1663. package/core/domain/src/explore/what-if-branches.d.ts +34 -0
  1664. package/core/domain/src/explore/what-if-branches.js +62 -0
  1665. package/core/domain/src/explore/what-if-plan-error.d.ts +5 -0
  1666. package/core/domain/src/explore/what-if-plan-error.js +10 -0
  1667. package/core/domain/src/features/cleanup-report.d.ts +22 -0
  1668. package/core/domain/src/features/cleanup-report.js +23 -0
  1669. package/core/domain/src/features/feature-file.d.ts +111 -0
  1670. package/core/domain/src/features/feature-file.js +290 -0
  1671. package/core/domain/src/features/feature-path.d.ts +7 -0
  1672. package/core/domain/src/features/feature-path.js +19 -0
  1673. package/core/domain/src/features/index.d.ts +8 -0
  1674. package/core/domain/src/features/index.js +10 -0
  1675. package/core/domain/src/features/plain-output.d.ts +43 -0
  1676. package/core/domain/src/features/plain-output.js +47 -0
  1677. package/core/domain/src/features/scenario-conditions.d.ts +28 -0
  1678. package/core/domain/src/features/scenario-conditions.js +51 -0
  1679. package/core/domain/src/features/scenario-environments.d.ts +47 -0
  1680. package/core/domain/src/features/scenario-environments.js +47 -0
  1681. package/core/domain/src/features/step-breakpoints.d.ts +48 -0
  1682. package/core/domain/src/features/step-breakpoints.js +75 -0
  1683. package/core/domain/src/features/tag-expression.d.ts +1 -0
  1684. package/core/domain/src/features/tag-expression.js +45 -0
  1685. package/core/domain/src/fixtures/fixture-bundle.d.ts +123 -0
  1686. package/core/domain/src/fixtures/fixture-bundle.js +183 -0
  1687. package/core/domain/src/fixtures/fixture-catalog.d.ts +49 -0
  1688. package/core/domain/src/fixtures/fixture-catalog.js +91 -0
  1689. package/core/domain/src/fixtures/fixture-declaration.d.ts +22 -0
  1690. package/core/domain/src/fixtures/fixture-declaration.js +60 -0
  1691. package/core/domain/src/fixtures/fixture-import-incomplete-error.d.ts +10 -0
  1692. package/core/domain/src/fixtures/fixture-import-incomplete-error.js +10 -0
  1693. package/core/domain/src/fixtures/fixture-key.d.ts +57 -0
  1694. package/core/domain/src/fixtures/fixture-key.js +129 -0
  1695. package/core/domain/src/fixtures/fixture-record.d.ts +89 -0
  1696. package/core/domain/src/fixtures/fixture-record.js +105 -0
  1697. package/core/domain/src/fixtures/fixture-refused-error.d.ts +11 -0
  1698. package/core/domain/src/fixtures/fixture-refused-error.js +13 -0
  1699. package/core/domain/src/fixtures/fixture-source-declaration.d.ts +21 -0
  1700. package/core/domain/src/fixtures/fixture-source-declaration.js +36 -0
  1701. package/core/domain/src/fixtures/index.d.ts +9 -0
  1702. package/core/domain/src/fixtures/index.js +11 -0
  1703. package/core/domain/src/fixtures/scenario-fixture.d.ts +34 -0
  1704. package/core/domain/src/fixtures/scenario-fixture.js +33 -0
  1705. package/core/domain/src/identity/identity.d.ts +50 -0
  1706. package/core/domain/src/identity/identity.js +47 -0
  1707. package/core/domain/src/identity/index.d.ts +2 -0
  1708. package/core/domain/src/identity/index.js +4 -0
  1709. package/core/domain/src/identity/pre-onboarded-actor.d.ts +34 -0
  1710. package/core/domain/src/identity/pre-onboarded-actor.js +66 -0
  1711. package/core/domain/src/index.d.ts +27 -0
  1712. package/core/domain/src/index.js +29 -0
  1713. package/core/domain/src/lab/capability-policy.d.ts +37 -0
  1714. package/core/domain/src/lab/capability-policy.js +50 -0
  1715. package/core/domain/src/lab/capability.d.ts +4 -0
  1716. package/core/domain/src/lab/capability.js +13 -0
  1717. package/core/domain/src/lab/chain-pace.d.ts +20 -0
  1718. package/core/domain/src/lab/chain-pace.js +19 -0
  1719. package/core/domain/src/lab/confirmation-required-error.d.ts +8 -0
  1720. package/core/domain/src/lab/confirmation-required-error.js +10 -0
  1721. package/core/domain/src/lab/environment-options.d.ts +43 -0
  1722. package/core/domain/src/lab/environment-options.js +39 -0
  1723. package/core/domain/src/lab/environment-request-error.d.ts +10 -0
  1724. package/core/domain/src/lab/environment-request-error.js +5 -0
  1725. package/core/domain/src/lab/host-capabilities.d.ts +60 -0
  1726. package/core/domain/src/lab/host-capabilities.js +15 -0
  1727. package/core/domain/src/lab/index.d.ts +24 -0
  1728. package/core/domain/src/lab/index.js +26 -0
  1729. package/core/domain/src/lab/integration-readiness.d.ts +37 -0
  1730. package/core/domain/src/lab/integration-readiness.js +35 -0
  1731. package/core/domain/src/lab/lab-configuration-error.d.ts +5 -0
  1732. package/core/domain/src/lab/lab-configuration-error.js +10 -0
  1733. package/core/domain/src/lab/offer.d.ts +47 -0
  1734. package/core/domain/src/lab/offer.js +62 -0
  1735. package/core/domain/src/lab/public-target.d.ts +94 -0
  1736. package/core/domain/src/lab/public-target.js +114 -0
  1737. package/core/domain/src/lab/requirement-check.d.ts +23 -0
  1738. package/core/domain/src/lab/requirement-check.js +30 -0
  1739. package/core/domain/src/lab/requirement-functions.d.ts +14 -0
  1740. package/core/domain/src/lab/requirement-functions.js +13 -0
  1741. package/core/domain/src/lab/requirements.d.ts +25 -0
  1742. package/core/domain/src/lab/requirements.js +29 -0
  1743. package/core/domain/src/lab/resolved-config.d.ts +81 -0
  1744. package/core/domain/src/lab/resolved-config.js +91 -0
  1745. package/core/domain/src/lab/rpc-selection.d.ts +62 -0
  1746. package/core/domain/src/lab/rpc-selection.js +95 -0
  1747. package/core/domain/src/lab/run-manifest.d.ts +36 -0
  1748. package/core/domain/src/lab/run-manifest.js +24 -0
  1749. package/core/domain/src/lab/running-lab.d.ts +6 -0
  1750. package/core/domain/src/lab/running-lab.js +5 -0
  1751. package/core/domain/src/lab/runtime-wire.d.ts +21 -0
  1752. package/core/domain/src/lab/runtime-wire.js +87 -0
  1753. package/core/domain/src/lab/topology-error.d.ts +5 -0
  1754. package/core/domain/src/lab/topology-error.js +10 -0
  1755. package/core/domain/src/lab/topology-functions.d.ts +66 -0
  1756. package/core/domain/src/lab/topology-functions.js +159 -0
  1757. package/core/domain/src/lab/topology-issues.d.ts +16 -0
  1758. package/core/domain/src/lab/topology-issues.js +45 -0
  1759. package/core/domain/src/lab/topology.d.ts +188 -0
  1760. package/core/domain/src/lab/topology.js +53 -0
  1761. package/core/domain/src/lab/value-tones.d.ts +30 -0
  1762. package/core/domain/src/lab/value-tones.js +66 -0
  1763. package/core/domain/src/load/index.d.ts +3 -0
  1764. package/core/domain/src/load/index.js +5 -0
  1765. package/core/domain/src/load/load-guard.d.ts +14 -0
  1766. package/core/domain/src/load/load-guard.js +13 -0
  1767. package/core/domain/src/load/load-plan.d.ts +26 -0
  1768. package/core/domain/src/load/load-plan.js +32 -0
  1769. package/core/domain/src/load/load-report.d.ts +64 -0
  1770. package/core/domain/src/load/load-report.js +73 -0
  1771. package/core/domain/src/navigation/app-routes.d.ts +27 -0
  1772. package/core/domain/src/navigation/app-routes.js +85 -0
  1773. package/core/domain/src/navigation/app-url.d.ts +9 -0
  1774. package/core/domain/src/navigation/app-url.js +22 -0
  1775. package/core/domain/src/navigation/index.d.ts +7 -0
  1776. package/core/domain/src/navigation/index.js +9 -0
  1777. package/core/domain/src/navigation/named-destination.d.ts +43 -0
  1778. package/core/domain/src/navigation/named-destination.js +49 -0
  1779. package/core/domain/src/navigation/navigation-evidence.d.ts +20 -0
  1780. package/core/domain/src/navigation/navigation-evidence.js +3 -0
  1781. package/core/domain/src/navigation/navigation-expectation.d.ts +16 -0
  1782. package/core/domain/src/navigation/navigation-expectation.js +40 -0
  1783. package/core/domain/src/navigation/navigation-request.d.ts +16 -0
  1784. package/core/domain/src/navigation/navigation-request.js +13 -0
  1785. package/core/domain/src/navigation/navigation-resolution.d.ts +69 -0
  1786. package/core/domain/src/navigation/navigation-resolution.js +37 -0
  1787. package/core/domain/src/network/endpoint-locality.d.ts +14 -0
  1788. package/core/domain/src/network/endpoint-locality.js +39 -0
  1789. package/core/domain/src/network/environment-endpoints.d.ts +36 -0
  1790. package/core/domain/src/network/environment-endpoints.js +49 -0
  1791. package/core/domain/src/network/host-network-routes.d.ts +73 -0
  1792. package/core/domain/src/network/host-network-routes.js +138 -0
  1793. package/core/domain/src/network/host-route-closures.d.ts +9 -0
  1794. package/core/domain/src/network/host-route-closures.js +23 -0
  1795. package/core/domain/src/network/index.d.ts +8 -0
  1796. package/core/domain/src/network/index.js +10 -0
  1797. package/core/domain/src/network/loopback-url.d.ts +33 -0
  1798. package/core/domain/src/network/loopback-url.js +63 -0
  1799. package/core/domain/src/network/mixed-endpoints-error.d.ts +12 -0
  1800. package/core/domain/src/network/mixed-endpoints-error.js +17 -0
  1801. package/core/domain/src/network/network-policy.d.ts +98 -0
  1802. package/core/domain/src/network/network-policy.js +157 -0
  1803. package/core/domain/src/network/observed-endpoints.d.ts +17 -0
  1804. package/core/domain/src/network/observed-endpoints.js +47 -0
  1805. package/core/domain/src/network/worker-hold.d.ts +24 -0
  1806. package/core/domain/src/network/worker-hold.js +14 -0
  1807. package/core/domain/src/products/index.d.ts +3 -0
  1808. package/core/domain/src/products/index.js +5 -0
  1809. package/core/domain/src/products/product-config-policy.d.ts +19 -0
  1810. package/core/domain/src/products/product-config-policy.js +18 -0
  1811. package/core/domain/src/products/product-config-refused.d.ts +4 -0
  1812. package/core/domain/src/products/product-config-refused.js +8 -0
  1813. package/core/domain/src/products/product-config.d.ts +40 -0
  1814. package/core/domain/src/products/product-config.js +75 -0
  1815. package/core/domain/src/recordings/demo-cut.d.ts +91 -0
  1816. package/core/domain/src/recordings/demo-cut.js +179 -0
  1817. package/core/domain/src/recordings/demo-refused-error.d.ts +9 -0
  1818. package/core/domain/src/recordings/demo-refused-error.js +10 -0
  1819. package/core/domain/src/recordings/index.d.ts +16 -0
  1820. package/core/domain/src/recordings/index.js +18 -0
  1821. package/core/domain/src/recordings/journey-document.d.ts +69 -0
  1822. package/core/domain/src/recordings/journey-document.js +93 -0
  1823. package/core/domain/src/recordings/journey-markdown.d.ts +21 -0
  1824. package/core/domain/src/recordings/journey-markdown.js +37 -0
  1825. package/core/domain/src/recordings/journeys-declaration.d.ts +16 -0
  1826. package/core/domain/src/recordings/journeys-declaration.js +17 -0
  1827. package/core/domain/src/recordings/recording-data.d.ts +476 -0
  1828. package/core/domain/src/recordings/recording-data.js +3 -0
  1829. package/core/domain/src/recordings/recording-format-error.d.ts +5 -0
  1830. package/core/domain/src/recordings/recording-format-error.js +9 -0
  1831. package/core/domain/src/recordings/recording-health.d.ts +77 -0
  1832. package/core/domain/src/recordings/recording-health.js +108 -0
  1833. package/core/domain/src/recordings/recording-not-found-error.d.ts +5 -0
  1834. package/core/domain/src/recordings/recording-not-found-error.js +9 -0
  1835. package/core/domain/src/recordings/recording-retention.d.ts +35 -0
  1836. package/core/domain/src/recordings/recording-retention.js +53 -0
  1837. package/core/domain/src/recordings/recording-settings.d.ts +50 -0
  1838. package/core/domain/src/recordings/recording-settings.js +81 -0
  1839. package/core/domain/src/recordings/run-recording.d.ts +65 -0
  1840. package/core/domain/src/recordings/run-recording.js +321 -0
  1841. package/core/domain/src/recordings/step-chain-windows.d.ts +35 -0
  1842. package/core/domain/src/recordings/step-chain-windows.js +50 -0
  1843. package/core/domain/src/recordings/step-console-errors.d.ts +38 -0
  1844. package/core/domain/src/recordings/step-console-errors.js +37 -0
  1845. package/core/domain/src/recordings/step-machine.d.ts +6 -0
  1846. package/core/domain/src/recordings/step-machine.js +15 -0
  1847. package/core/domain/src/recordings/step-speed-limits.d.ts +59 -0
  1848. package/core/domain/src/recordings/step-speed-limits.js +69 -0
  1849. package/core/domain/src/releases/index.d.ts +1 -0
  1850. package/core/domain/src/releases/index.js +3 -0
  1851. package/core/domain/src/releases/release-notes.d.ts +49 -0
  1852. package/core/domain/src/releases/release-notes.js +115 -0
  1853. package/core/domain/src/resources/generation.d.ts +15 -0
  1854. package/core/domain/src/resources/generation.js +26 -0
  1855. package/core/domain/src/resources/index.d.ts +3 -0
  1856. package/core/domain/src/resources/index.js +5 -0
  1857. package/core/domain/src/resources/resource-functions.d.ts +6 -0
  1858. package/core/domain/src/resources/resource-functions.js +12 -0
  1859. package/core/domain/src/resources/resource.d.ts +17 -0
  1860. package/core/domain/src/resources/resource.js +42 -0
  1861. package/core/domain/src/root-calls/index.d.ts +2 -0
  1862. package/core/domain/src/root-calls/index.js +4 -0
  1863. package/core/domain/src/root-calls/known-networks.d.ts +13 -0
  1864. package/core/domain/src/root-calls/known-networks.js +23 -0
  1865. package/core/domain/src/root-calls/root-call-policy.d.ts +44 -0
  1866. package/core/domain/src/root-calls/root-call-policy.js +59 -0
  1867. package/core/domain/src/runs/checkpoint.d.ts +20 -0
  1868. package/core/domain/src/runs/checkpoint.js +22 -0
  1869. package/core/domain/src/runs/evidence.d.ts +66 -0
  1870. package/core/domain/src/runs/evidence.js +126 -0
  1871. package/core/domain/src/runs/failure-description.d.ts +2 -0
  1872. package/core/domain/src/runs/failure-description.js +23 -0
  1873. package/core/domain/src/runs/failure-marker.d.ts +6 -0
  1874. package/core/domain/src/runs/failure-marker.js +32 -0
  1875. package/core/domain/src/runs/failure-reason.d.ts +52 -0
  1876. package/core/domain/src/runs/failure-reason.js +36 -0
  1877. package/core/domain/src/runs/host-bypass-assertion.d.ts +5 -0
  1878. package/core/domain/src/runs/host-bypass-assertion.js +18 -0
  1879. package/core/domain/src/runs/host-bypass-evidence.d.ts +106 -0
  1880. package/core/domain/src/runs/host-bypass-evidence.js +3 -0
  1881. package/core/domain/src/runs/host-bypass-verdict.d.ts +13 -0
  1882. package/core/domain/src/runs/host-bypass-verdict.js +30 -0
  1883. package/core/domain/src/runs/host-request-limits.d.ts +32 -0
  1884. package/core/domain/src/runs/host-request-limits.js +30 -0
  1885. package/core/domain/src/runs/index.d.ts +28 -0
  1886. package/core/domain/src/runs/index.js +30 -0
  1887. package/core/domain/src/runs/lab-failure.d.ts +11 -0
  1888. package/core/domain/src/runs/lab-failure.js +16 -0
  1889. package/core/domain/src/runs/merge-host-bypass-evidence.d.ts +3 -0
  1890. package/core/domain/src/runs/merge-host-bypass-evidence.js +112 -0
  1891. package/core/domain/src/runs/negative-control.d.ts +108 -0
  1892. package/core/domain/src/runs/negative-control.js +123 -0
  1893. package/core/domain/src/runs/race-jitter.d.ts +29 -0
  1894. package/core/domain/src/runs/race-jitter.js +36 -0
  1895. package/core/domain/src/runs/race-seed.d.ts +16 -0
  1896. package/core/domain/src/runs/race-seed.js +35 -0
  1897. package/core/domain/src/runs/run-bundle-data.d.ts +142 -0
  1898. package/core/domain/src/runs/run-bundle-data.js +6 -0
  1899. package/core/domain/src/runs/run-bundle-format-error.d.ts +5 -0
  1900. package/core/domain/src/runs/run-bundle-format-error.js +10 -0
  1901. package/core/domain/src/runs/run-bundle-refused-error.d.ts +7 -0
  1902. package/core/domain/src/runs/run-bundle-refused-error.js +12 -0
  1903. package/core/domain/src/runs/run-bundle-reproduction.d.ts +46 -0
  1904. package/core/domain/src/runs/run-bundle-reproduction.js +57 -0
  1905. package/core/domain/src/runs/run-bundle.d.ts +28 -0
  1906. package/core/domain/src/runs/run-bundle.js +166 -0
  1907. package/core/domain/src/runs/run-transition-error.d.ts +4 -0
  1908. package/core/domain/src/runs/run-transition-error.js +8 -0
  1909. package/core/domain/src/runs/run.d.ts +45 -0
  1910. package/core/domain/src/runs/run.js +91 -0
  1911. package/core/domain/src/runs/scenario-input-error.d.ts +13 -0
  1912. package/core/domain/src/runs/scenario-input-error.js +12 -0
  1913. package/core/domain/src/runs/step-failure.d.ts +18 -0
  1914. package/core/domain/src/runs/step-failure.js +69 -0
  1915. package/core/domain/src/runs/step-submissions.d.ts +73 -0
  1916. package/core/domain/src/runs/step-submissions.js +85 -0
  1917. package/core/domain/src/runs/stored-content.d.ts +17 -0
  1918. package/core/domain/src/runs/stored-content.js +47 -0
  1919. package/core/domain/src/runs/submitted-transaction.d.ts +63 -0
  1920. package/core/domain/src/runs/submitted-transaction.js +108 -0
  1921. package/core/domain/src/runs/transaction-landing.d.ts +82 -0
  1922. package/core/domain/src/runs/transaction-landing.js +76 -0
  1923. package/core/domain/src/runs/workers.d.ts +48 -0
  1924. package/core/domain/src/runs/workers.js +83 -0
  1925. package/core/domain/src/sentences/ambiguous-sentence-error.d.ts +7 -0
  1926. package/core/domain/src/sentences/ambiguous-sentence-error.js +13 -0
  1927. package/core/domain/src/sentences/ambiguous-split-error.d.ts +6 -0
  1928. package/core/domain/src/sentences/ambiguous-split-error.js +14 -0
  1929. package/core/domain/src/sentences/assertion-mutants.d.ts +77 -0
  1930. package/core/domain/src/sentences/assertion-mutants.js +112 -0
  1931. package/core/domain/src/sentences/characters.d.ts +29 -0
  1932. package/core/domain/src/sentences/characters.js +71 -0
  1933. package/core/domain/src/sentences/generic-sentences.d.ts +67 -0
  1934. package/core/domain/src/sentences/generic-sentences.js +66 -0
  1935. package/core/domain/src/sentences/index.d.ts +16 -0
  1936. package/core/domain/src/sentences/index.js +18 -0
  1937. package/core/domain/src/sentences/missing-sentence-error.d.ts +6 -0
  1938. package/core/domain/src/sentences/missing-sentence-error.js +11 -0
  1939. package/core/domain/src/sentences/output-reference.d.ts +14 -0
  1940. package/core/domain/src/sentences/output-reference.js +38 -0
  1941. package/core/domain/src/sentences/scenario-outputs.d.ts +33 -0
  1942. package/core/domain/src/sentences/scenario-outputs.js +36 -0
  1943. package/core/domain/src/sentences/scenario-plan.d.ts +54 -0
  1944. package/core/domain/src/sentences/scenario-plan.js +92 -0
  1945. package/core/domain/src/sentences/sentence-book.d.ts +132 -0
  1946. package/core/domain/src/sentences/sentence-book.js +387 -0
  1947. package/core/domain/src/sentences/sentence-error.d.ts +10 -0
  1948. package/core/domain/src/sentences/sentence-error.js +18 -0
  1949. package/core/domain/src/sentences/sentence-pattern.d.ts +42 -0
  1950. package/core/domain/src/sentences/sentence-pattern.js +139 -0
  1951. package/core/domain/src/sentences/table-error.d.ts +6 -0
  1952. package/core/domain/src/sentences/table-error.js +11 -0
  1953. package/core/domain/src/sentences/table-shape.d.ts +42 -0
  1954. package/core/domain/src/sentences/table-shape.js +121 -0
  1955. package/core/domain/src/sentences/time-advance.d.ts +36 -0
  1956. package/core/domain/src/sentences/time-advance.js +60 -0
  1957. package/core/domain/src/sentences/unresolved-reference-error.d.ts +5 -0
  1958. package/core/domain/src/sentences/unresolved-reference-error.js +9 -0
  1959. package/core/domain/src/shared/adapter-options.d.ts +17 -0
  1960. package/core/domain/src/shared/adapter-options.js +8 -0
  1961. package/core/domain/src/shared/block-unavailable-error.d.ts +15 -0
  1962. package/core/domain/src/shared/block-unavailable-error.js +11 -0
  1963. package/core/domain/src/shared/development-authority.d.ts +12 -0
  1964. package/core/domain/src/shared/development-authority.js +6 -0
  1965. package/core/domain/src/shared/index.d.ts +12 -0
  1966. package/core/domain/src/shared/index.js +14 -0
  1967. package/core/domain/src/shared/json-rpc-error.d.ts +14 -0
  1968. package/core/domain/src/shared/json-rpc-error.js +15 -0
  1969. package/core/domain/src/shared/missing-capability-error.d.ts +4 -0
  1970. package/core/domain/src/shared/missing-capability-error.js +8 -0
  1971. package/core/domain/src/shared/missing-host-tools-error.d.ts +5 -0
  1972. package/core/domain/src/shared/missing-host-tools-error.js +10 -0
  1973. package/core/domain/src/shared/missing-route-error.d.ts +6 -0
  1974. package/core/domain/src/shared/missing-route-error.js +12 -0
  1975. package/core/domain/src/shared/pending-check-error.d.ts +9 -0
  1976. package/core/domain/src/shared/pending-check-error.js +11 -0
  1977. package/core/domain/src/shared/secret-uri.d.ts +27 -0
  1978. package/core/domain/src/shared/secret-uri.js +46 -0
  1979. package/core/domain/src/shared/sibling-module.d.ts +6 -0
  1980. package/core/domain/src/shared/sibling-module.js +9 -0
  1981. package/core/domain/src/shared/unsupported-capability-error.d.ts +6 -0
  1982. package/core/domain/src/shared/unsupported-capability-error.js +11 -0
  1983. package/core/domain/src/shared/unsupported-host-operation.d.ts +7 -0
  1984. package/core/domain/src/shared/unsupported-host-operation.js +14 -0
  1985. package/core/domain/src/statements/content-check.d.ts +16 -0
  1986. package/core/domain/src/statements/content-check.js +52 -0
  1987. package/core/domain/src/statements/index.d.ts +2 -0
  1988. package/core/domain/src/statements/index.js +4 -0
  1989. package/core/domain/src/statements/statement.d.ts +44 -0
  1990. package/core/domain/src/statements/statement.js +118 -0
  1991. package/core/domain/src/suites/bisect-plan.d.ts +87 -0
  1992. package/core/domain/src/suites/bisect-plan.js +76 -0
  1993. package/core/domain/src/suites/bisection.d.ts +73 -0
  1994. package/core/domain/src/suites/bisection.js +113 -0
  1995. package/core/domain/src/suites/change-scopes.d.ts +38 -0
  1996. package/core/domain/src/suites/change-scopes.js +70 -0
  1997. package/core/domain/src/suites/compatibility-notice.d.ts +23 -0
  1998. package/core/domain/src/suites/compatibility-notice.js +115 -0
  1999. package/core/domain/src/suites/compatibility.d.ts +129 -0
  2000. package/core/domain/src/suites/compatibility.js +291 -0
  2001. package/core/domain/src/suites/index.d.ts +15 -0
  2002. package/core/domain/src/suites/index.js +17 -0
  2003. package/core/domain/src/suites/mode-data.d.ts +32 -0
  2004. package/core/domain/src/suites/mode-data.js +3 -0
  2005. package/core/domain/src/suites/path-glob.d.ts +1 -0
  2006. package/core/domain/src/suites/path-glob.js +21 -0
  2007. package/core/domain/src/suites/suite-budget.d.ts +2 -0
  2008. package/core/domain/src/suites/suite-budget.js +15 -0
  2009. package/core/domain/src/suites/suite-config-error.d.ts +4 -0
  2010. package/core/domain/src/suites/suite-config-error.js +8 -0
  2011. package/core/domain/src/suites/suite-config.d.ts +48 -0
  2012. package/core/domain/src/suites/suite-config.js +184 -0
  2013. package/core/domain/src/suites/suite-data.d.ts +52 -0
  2014. package/core/domain/src/suites/suite-data.js +3 -0
  2015. package/core/domain/src/suites/suite-evidence-error.d.ts +20 -0
  2016. package/core/domain/src/suites/suite-evidence-error.js +14 -0
  2017. package/core/domain/src/suites/suite-plan.d.ts +88 -0
  2018. package/core/domain/src/suites/suite-plan.js +123 -0
  2019. package/core/domain/src/suites/suite-run-summary.d.ts +70 -0
  2020. package/core/domain/src/suites/suite-run-summary.js +22 -0
  2021. package/core/domain/src/suites/suite-verdict.d.ts +22 -0
  2022. package/core/domain/src/suites/suite-verdict.js +32 -0
  2023. package/core/domain/src/tools/index.d.ts +1 -0
  2024. package/core/domain/src/tools/index.js +3 -0
  2025. package/core/domain/src/tools/tool-command.d.ts +18 -0
  2026. package/core/domain/src/tools/tool-command.js +61 -0
  2027. package/core/domain/src/versions/component-id.d.ts +17 -0
  2028. package/core/domain/src/versions/component-id.js +40 -0
  2029. package/core/domain/src/versions/digest.d.ts +28 -0
  2030. package/core/domain/src/versions/digest.js +51 -0
  2031. package/core/domain/src/versions/environment-versions.d.ts +41 -0
  2032. package/core/domain/src/versions/environment-versions.js +38 -0
  2033. package/core/domain/src/versions/fork-snapshot.d.ts +16 -0
  2034. package/core/domain/src/versions/fork-snapshot.js +3 -0
  2035. package/core/domain/src/versions/host-route.d.ts +89 -0
  2036. package/core/domain/src/versions/host-route.js +74 -0
  2037. package/core/domain/src/versions/index.d.ts +21 -0
  2038. package/core/domain/src/versions/index.js +23 -0
  2039. package/core/domain/src/versions/lab-lock.d.ts +48 -0
  2040. package/core/domain/src/versions/lab-lock.js +98 -0
  2041. package/core/domain/src/versions/lock-promotion.d.ts +48 -0
  2042. package/core/domain/src/versions/lock-promotion.js +63 -0
  2043. package/core/domain/src/versions/lock-proposal-refusal.d.ts +21 -0
  2044. package/core/domain/src/versions/lock-proposal-refusal.js +41 -0
  2045. package/core/domain/src/versions/locked-component.d.ts +80 -0
  2046. package/core/domain/src/versions/locked-component.js +146 -0
  2047. package/core/domain/src/versions/recovery-policy.d.ts +33 -0
  2048. package/core/domain/src/versions/recovery-policy.js +26 -0
  2049. package/core/domain/src/versions/release-artifact.d.ts +46 -0
  2050. package/core/domain/src/versions/release-artifact.js +70 -0
  2051. package/core/domain/src/versions/release-version.d.ts +17 -0
  2052. package/core/domain/src/versions/release-version.js +52 -0
  2053. package/core/domain/src/versions/resolved-runtime.d.ts +103 -0
  2054. package/core/domain/src/versions/resolved-runtime.js +107 -0
  2055. package/core/domain/src/versions/snapshot-freshness.d.ts +26 -0
  2056. package/core/domain/src/versions/snapshot-freshness.js +25 -0
  2057. package/core/domain/src/versions/version-drift.d.ts +29 -0
  2058. package/core/domain/src/versions/version-drift.js +37 -0
  2059. package/core/domain/src/versions/version-error.d.ts +17 -0
  2060. package/core/domain/src/versions/version-error.js +10 -0
  2061. package/core/domain/src/versions/version-policy.d.ts +19 -0
  2062. package/core/domain/src/versions/version-policy.js +37 -0
  2063. package/core/domain/src/versions/version-resolution.d.ts +103 -0
  2064. package/core/domain/src/versions/version-resolution.js +111 -0
  2065. package/core/domain/src/versions/version-selector.d.ts +58 -0
  2066. package/core/domain/src/versions/version-selector.js +134 -0
  2067. package/core/domain/src/versions/version-workspace-key.d.ts +18 -0
  2068. package/core/domain/src/versions/version-workspace-key.js +41 -0
  2069. package/core/domain/src/versions/versioned-workspace.d.ts +43 -0
  2070. package/core/domain/src/versions/versioned-workspace.js +63 -0
  2071. package/core/lab/README.md +1012 -0
  2072. package/core/lab/src/activity/types.d.ts +1 -0
  2073. package/core/lab/src/activity/types.js +3 -0
  2074. package/core/lab/src/chain/index.d.ts +2 -0
  2075. package/core/lab/src/chain/index.js +4 -0
  2076. package/core/lab/src/chain/transaction-mode-schema.d.ts +11 -0
  2077. package/core/lab/src/chain/transaction-mode-schema.js +5 -0
  2078. package/core/lab/src/host/index.d.ts +1 -0
  2079. package/core/lab/src/host/index.js +3 -0
  2080. package/core/lab/src/identity/index.d.ts +1 -0
  2081. package/core/lab/src/identity/index.js +3 -0
  2082. package/core/lab/src/index.d.ts +2 -0
  2083. package/core/lab/src/index.js +4 -0
  2084. package/core/lab/src/run/index.d.ts +1 -0
  2085. package/core/lab/src/run/index.js +3 -0
  2086. package/core/lab/src/steps.d.ts +1 -0
  2087. package/core/lab/src/steps.js +3 -0
  2088. package/core/lab/src/topology.d.ts +128 -0
  2089. package/core/lab/src/topology.js +58 -0
  2090. package/core/ports/README.md +458 -0
  2091. package/core/ports/src/driven/browser/app-surface.d.ts +41 -0
  2092. package/core/ports/src/driven/browser/app-surface.js +3 -0
  2093. package/core/ports/src/driven/browser/browser.d.ts +79 -0
  2094. package/core/ports/src/driven/browser/browser.js +3 -0
  2095. package/core/ports/src/driven/browser/conditions.d.ts +24 -0
  2096. package/core/ports/src/driven/browser/conditions.js +3 -0
  2097. package/core/ports/src/driven/browser/index.d.ts +6 -0
  2098. package/core/ports/src/driven/browser/index.js +3 -0
  2099. package/core/ports/src/driven/browser/locator.d.ts +55 -0
  2100. package/core/ports/src/driven/browser/locator.js +3 -0
  2101. package/core/ports/src/driven/browser/page.d.ts +71 -0
  2102. package/core/ports/src/driven/browser/page.js +3 -0
  2103. package/core/ports/src/driven/browser/route.d.ts +45 -0
  2104. package/core/ports/src/driven/browser/route.js +3 -0
  2105. package/core/ports/src/driven/chain/bulletin-reader.d.ts +9 -0
  2106. package/core/ports/src/driven/chain/bulletin-reader.js +3 -0
  2107. package/core/ports/src/driven/chain/chain-access.d.ts +37 -0
  2108. package/core/ports/src/driven/chain/chain-access.js +3 -0
  2109. package/core/ports/src/driven/chain/chain-history.d.ts +170 -0
  2110. package/core/ports/src/driven/chain/chain-history.js +3 -0
  2111. package/core/ports/src/driven/chain/chain-readers.d.ts +8 -0
  2112. package/core/ports/src/driven/chain/chain-readers.js +3 -0
  2113. package/core/ports/src/driven/chain/index.d.ts +11 -0
  2114. package/core/ports/src/driven/chain/index.js +3 -0
  2115. package/core/ports/src/driven/chain/key-derivation.d.ts +22 -0
  2116. package/core/ports/src/driven/chain/key-derivation.js +3 -0
  2117. package/core/ports/src/driven/chain/receipt-validator.d.ts +17 -0
  2118. package/core/ports/src/driven/chain/receipt-validator.js +3 -0
  2119. package/core/ports/src/driven/chain/receipt.d.ts +33 -0
  2120. package/core/ports/src/driven/chain/receipt.js +3 -0
  2121. package/core/ports/src/driven/chain/runtime-fingerprint.d.ts +12 -0
  2122. package/core/ports/src/driven/chain/runtime-fingerprint.js +3 -0
  2123. package/core/ports/src/driven/chain/signer.d.ts +16 -0
  2124. package/core/ports/src/driven/chain/signer.js +3 -0
  2125. package/core/ports/src/driven/chain/statement-store-reader.d.ts +53 -0
  2126. package/core/ports/src/driven/chain/statement-store-reader.js +3 -0
  2127. package/core/ports/src/driven/chain/transaction-submitter.d.ts +104 -0
  2128. package/core/ports/src/driven/chain/transaction-submitter.js +3 -0
  2129. package/core/ports/src/driven/deploy/content-archiver.d.ts +21 -0
  2130. package/core/ports/src/driven/deploy/content-archiver.js +3 -0
  2131. package/core/ports/src/driven/deploy/deployer.d.ts +101 -0
  2132. package/core/ports/src/driven/deploy/deployer.js +3 -0
  2133. package/core/ports/src/driven/deploy/destination-directory.d.ts +15 -0
  2134. package/core/ports/src/driven/deploy/destination-directory.js +3 -0
  2135. package/core/ports/src/driven/deploy/destination-server.d.ts +25 -0
  2136. package/core/ports/src/driven/deploy/destination-server.js +3 -0
  2137. package/core/ports/src/driven/deploy/index.d.ts +5 -0
  2138. package/core/ports/src/driven/deploy/index.js +3 -0
  2139. package/core/ports/src/driven/deploy/name-resolver.d.ts +11 -0
  2140. package/core/ports/src/driven/deploy/name-resolver.js +3 -0
  2141. package/core/ports/src/driven/environment/environment-adapter-factory.d.ts +21 -0
  2142. package/core/ports/src/driven/environment/environment-adapter-factory.js +3 -0
  2143. package/core/ports/src/driven/environment/environment-time.d.ts +110 -0
  2144. package/core/ports/src/driven/environment/environment-time.js +3 -0
  2145. package/core/ports/src/driven/environment/environment-tooling.d.ts +51 -0
  2146. package/core/ports/src/driven/environment/environment-tooling.js +3 -0
  2147. package/core/ports/src/driven/environment/index.d.ts +6 -0
  2148. package/core/ports/src/driven/environment/index.js +3 -0
  2149. package/core/ports/src/driven/environment/running-environment.d.ts +267 -0
  2150. package/core/ports/src/driven/environment/running-environment.js +3 -0
  2151. package/core/ports/src/driven/environment/start-phases.d.ts +34 -0
  2152. package/core/ports/src/driven/environment/start-phases.js +3 -0
  2153. package/core/ports/src/driven/environment/topology-adapter-factory.d.ts +52 -0
  2154. package/core/ports/src/driven/environment/topology-adapter-factory.js +3 -0
  2155. package/core/ports/src/driven/factory/adapter-flag.d.ts +21 -0
  2156. package/core/ports/src/driven/factory/adapter-flag.js +3 -0
  2157. package/core/ports/src/driven/factory/index.d.ts +2 -0
  2158. package/core/ports/src/driven/factory/index.js +3 -0
  2159. package/core/ports/src/driven/factory/options-schema.d.ts +21 -0
  2160. package/core/ports/src/driven/factory/options-schema.js +3 -0
  2161. package/core/ports/src/driven/features/custom-step-source.d.ts +33 -0
  2162. package/core/ports/src/driven/features/custom-step-source.js +3 -0
  2163. package/core/ports/src/driven/features/feature-runner.d.ts +193 -0
  2164. package/core/ports/src/driven/features/feature-runner.js +3 -0
  2165. package/core/ports/src/driven/features/feature-source.d.ts +22 -0
  2166. package/core/ports/src/driven/features/feature-source.js +3 -0
  2167. package/core/ports/src/driven/features/index.d.ts +3 -0
  2168. package/core/ports/src/driven/features/index.js +3 -0
  2169. package/core/ports/src/driven/host/host-adapter-factory.d.ts +111 -0
  2170. package/core/ports/src/driven/host/host-adapter-factory.js +3 -0
  2171. package/core/ports/src/driven/host/host-provider.d.ts +71 -0
  2172. package/core/ports/src/driven/host/host-provider.js +3 -0
  2173. package/core/ports/src/driven/host/host-session.d.ts +289 -0
  2174. package/core/ports/src/driven/host/host-session.js +3 -0
  2175. package/core/ports/src/driven/host/host-tool-source.d.ts +19 -0
  2176. package/core/ports/src/driven/host/host-tool-source.js +3 -0
  2177. package/core/ports/src/driven/host/host-upstream.d.ts +24 -0
  2178. package/core/ports/src/driven/host/host-upstream.js +3 -0
  2179. package/core/ports/src/driven/host/host-verifier.d.ts +95 -0
  2180. package/core/ports/src/driven/host/host-verifier.js +3 -0
  2181. package/core/ports/src/driven/host/index.d.ts +7 -0
  2182. package/core/ports/src/driven/host/index.js +3 -0
  2183. package/core/ports/src/driven/identity/identity-provisioner.d.ts +23 -0
  2184. package/core/ports/src/driven/identity/identity-provisioner.js +3 -0
  2185. package/core/ports/src/driven/identity/index.d.ts +2 -0
  2186. package/core/ports/src/driven/identity/index.js +3 -0
  2187. package/core/ports/src/driven/identity/product-account-derivation.d.ts +23 -0
  2188. package/core/ports/src/driven/identity/product-account-derivation.js +3 -0
  2189. package/core/ports/src/driven/lab/client-bundles.d.ts +13 -0
  2190. package/core/ports/src/driven/lab/client-bundles.js +3 -0
  2191. package/core/ports/src/driven/lab/index.d.ts +7 -0
  2192. package/core/ports/src/driven/lab/index.js +3 -0
  2193. package/core/ports/src/driven/lab/lab-configuration.d.ts +86 -0
  2194. package/core/ports/src/driven/lab/lab-configuration.js +3 -0
  2195. package/core/ports/src/driven/lab/lab-definition-source.d.ts +16 -0
  2196. package/core/ports/src/driven/lab/lab-definition-source.js +3 -0
  2197. package/core/ports/src/driven/lab/lab-environment.d.ts +505 -0
  2198. package/core/ports/src/driven/lab/lab-environment.js +3 -0
  2199. package/core/ports/src/driven/lab/lab-sentences.d.ts +113 -0
  2200. package/core/ports/src/driven/lab/lab-sentences.js +3 -0
  2201. package/core/ports/src/driven/lab/loaded-lab.d.ts +297 -0
  2202. package/core/ports/src/driven/lab/loaded-lab.js +3 -0
  2203. package/core/ports/src/driven/lab/scenario.d.ts +137 -0
  2204. package/core/ports/src/driven/lab/scenario.js +3 -0
  2205. package/core/ports/src/driven/notify/index.d.ts +1 -0
  2206. package/core/ports/src/driven/notify/index.js +3 -0
  2207. package/core/ports/src/driven/notify/notifier.d.ts +32 -0
  2208. package/core/ports/src/driven/notify/notifier.js +3 -0
  2209. package/core/ports/src/driven/recording/console-watch.d.ts +28 -0
  2210. package/core/ports/src/driven/recording/console-watch.js +3 -0
  2211. package/core/ports/src/driven/recording/demo-ports.d.ts +53 -0
  2212. package/core/ports/src/driven/recording/demo-ports.js +3 -0
  2213. package/core/ports/src/driven/recording/frame-capture.d.ts +92 -0
  2214. package/core/ports/src/driven/recording/frame-capture.js +3 -0
  2215. package/core/ports/src/driven/recording/index.d.ts +6 -0
  2216. package/core/ports/src/driven/recording/index.js +3 -0
  2217. package/core/ports/src/driven/recording/journey-docs-store.d.ts +35 -0
  2218. package/core/ports/src/driven/recording/journey-docs-store.js +3 -0
  2219. package/core/ports/src/driven/recording/recording-store.d.ts +39 -0
  2220. package/core/ports/src/driven/recording/recording-store.js +3 -0
  2221. package/core/ports/src/driven/recording/step-check-ports.d.ts +29 -0
  2222. package/core/ports/src/driven/recording/step-check-ports.js +3 -0
  2223. package/core/ports/src/driven/storage/breakpoint-store.d.ts +13 -0
  2224. package/core/ports/src/driven/storage/breakpoint-store.js +3 -0
  2225. package/core/ports/src/driven/storage/environment-option-choices.d.ts +4 -0
  2226. package/core/ports/src/driven/storage/environment-option-choices.js +3 -0
  2227. package/core/ports/src/driven/storage/evidence-journal.d.ts +10 -0
  2228. package/core/ports/src/driven/storage/evidence-journal.js +3 -0
  2229. package/core/ports/src/driven/storage/fixture-archives.d.ts +61 -0
  2230. package/core/ports/src/driven/storage/fixture-archives.js +3 -0
  2231. package/core/ports/src/driven/storage/fixture-source.d.ts +53 -0
  2232. package/core/ports/src/driven/storage/fixture-source.js +3 -0
  2233. package/core/ports/src/driven/storage/fixture-store.d.ts +69 -0
  2234. package/core/ports/src/driven/storage/fixture-store.js +3 -0
  2235. package/core/ports/src/driven/storage/index.d.ts +12 -0
  2236. package/core/ports/src/driven/storage/index.js +3 -0
  2237. package/core/ports/src/driven/storage/lab-settings-store.d.ts +8 -0
  2238. package/core/ports/src/driven/storage/lab-settings-store.js +3 -0
  2239. package/core/ports/src/driven/storage/rpc-choices.d.ts +11 -0
  2240. package/core/ports/src/driven/storage/rpc-choices.js +3 -0
  2241. package/core/ports/src/driven/storage/run-bundle-archives.d.ts +46 -0
  2242. package/core/ports/src/driven/storage/run-bundle-archives.js +3 -0
  2243. package/core/ports/src/driven/storage/run-manifest-store.d.ts +18 -0
  2244. package/core/ports/src/driven/storage/run-manifest-store.js +3 -0
  2245. package/core/ports/src/driven/storage/running-lab.d.ts +42 -0
  2246. package/core/ports/src/driven/storage/running-lab.js +3 -0
  2247. package/core/ports/src/driven/storage/suite-evidence-bundles.d.ts +55 -0
  2248. package/core/ports/src/driven/storage/suite-evidence-bundles.js +3 -0
  2249. package/core/ports/src/driven/system/app-proxy.d.ts +123 -0
  2250. package/core/ports/src/driven/system/app-proxy.js +3 -0
  2251. package/core/ports/src/driven/system/chain-gate.d.ts +41 -0
  2252. package/core/ports/src/driven/system/chain-gate.js +3 -0
  2253. package/core/ports/src/driven/system/change-source.d.ts +69 -0
  2254. package/core/ports/src/driven/system/change-source.js +3 -0
  2255. package/core/ports/src/driven/system/clock.d.ts +13 -0
  2256. package/core/ports/src/driven/system/clock.js +3 -0
  2257. package/core/ports/src/driven/system/command-runner.d.ts +33 -0
  2258. package/core/ports/src/driven/system/command-runner.js +3 -0
  2259. package/core/ports/src/driven/system/conditioned-links.d.ts +20 -0
  2260. package/core/ports/src/driven/system/conditioned-links.js +3 -0
  2261. package/core/ports/src/driven/system/connection-monitor.d.ts +40 -0
  2262. package/core/ports/src/driven/system/connection-monitor.js +3 -0
  2263. package/core/ports/src/driven/system/document-headers.d.ts +9 -0
  2264. package/core/ports/src/driven/system/document-headers.js +3 -0
  2265. package/core/ports/src/driven/system/environment-variables.d.ts +9 -0
  2266. package/core/ports/src/driven/system/environment-variables.js +3 -0
  2267. package/core/ports/src/driven/system/file-system.d.ts +41 -0
  2268. package/core/ports/src/driven/system/file-system.js +3 -0
  2269. package/core/ports/src/driven/system/http-probe.d.ts +20 -0
  2270. package/core/ports/src/driven/system/http-probe.js +3 -0
  2271. package/core/ports/src/driven/system/id-generator.d.ts +5 -0
  2272. package/core/ports/src/driven/system/id-generator.js +3 -0
  2273. package/core/ports/src/driven/system/index.d.ts +27 -0
  2274. package/core/ports/src/driven/system/index.js +3 -0
  2275. package/core/ports/src/driven/system/json-rpc-client.d.ts +15 -0
  2276. package/core/ports/src/driven/system/json-rpc-client.js +3 -0
  2277. package/core/ports/src/driven/system/lock-manager.d.ts +55 -0
  2278. package/core/ports/src/driven/system/lock-manager.js +3 -0
  2279. package/core/ports/src/driven/system/logger.d.ts +8 -0
  2280. package/core/ports/src/driven/system/logger.js +3 -0
  2281. package/core/ports/src/driven/system/machine-metrics.d.ts +38 -0
  2282. package/core/ports/src/driven/system/machine-metrics.js +3 -0
  2283. package/core/ports/src/driven/system/os-ports.d.ts +12 -0
  2284. package/core/ports/src/driven/system/os-ports.js +3 -0
  2285. package/core/ports/src/driven/system/port-allocator.d.ts +46 -0
  2286. package/core/ports/src/driven/system/port-allocator.js +3 -0
  2287. package/core/ports/src/driven/system/process-runner.d.ts +133 -0
  2288. package/core/ports/src/driven/system/process-runner.js +3 -0
  2289. package/core/ports/src/driven/system/process-sandbox.d.ts +61 -0
  2290. package/core/ports/src/driven/system/process-sandbox.js +3 -0
  2291. package/core/ports/src/driven/system/redactor.d.ts +12 -0
  2292. package/core/ports/src/driven/system/redactor.js +3 -0
  2293. package/core/ports/src/driven/system/source-watcher.d.ts +29 -0
  2294. package/core/ports/src/driven/system/source-watcher.js +3 -0
  2295. package/core/ports/src/driven/system/stdio-worker.d.ts +21 -0
  2296. package/core/ports/src/driven/system/stdio-worker.js +3 -0
  2297. package/core/ports/src/driven/system/sync-command-runner.d.ts +20 -0
  2298. package/core/ports/src/driven/system/sync-command-runner.js +3 -0
  2299. package/core/ports/src/driven/system/system-ports.d.ts +90 -0
  2300. package/core/ports/src/driven/system/system-ports.js +3 -0
  2301. package/core/ports/src/driven/system/terminal-command-runner.d.ts +22 -0
  2302. package/core/ports/src/driven/system/terminal-command-runner.js +3 -0
  2303. package/core/ports/src/driven/system/tree-cloner.d.ts +19 -0
  2304. package/core/ports/src/driven/system/tree-cloner.js +3 -0
  2305. package/core/ports/src/driven/versions/artifact-store.d.ts +47 -0
  2306. package/core/ports/src/driven/versions/artifact-store.js +3 -0
  2307. package/core/ports/src/driven/versions/http-client.d.ts +22 -0
  2308. package/core/ports/src/driven/versions/http-client.js +3 -0
  2309. package/core/ports/src/driven/versions/index.d.ts +6 -0
  2310. package/core/ports/src/driven/versions/index.js +3 -0
  2311. package/core/ports/src/driven/versions/lab-versions-declaration.d.ts +55 -0
  2312. package/core/ports/src/driven/versions/lab-versions-declaration.js +3 -0
  2313. package/core/ports/src/driven/versions/lock-store.d.ts +29 -0
  2314. package/core/ports/src/driven/versions/lock-store.js +3 -0
  2315. package/core/ports/src/driven/versions/version-policy-source.d.ts +12 -0
  2316. package/core/ports/src/driven/versions/version-policy-source.js +3 -0
  2317. package/core/ports/src/driven/versions/version-source.d.ts +58 -0
  2318. package/core/ports/src/driven/versions/version-source.js +3 -0
  2319. package/core/ports/src/driving/activity.d.ts +244 -0
  2320. package/core/ports/src/driving/activity.js +3 -0
  2321. package/core/ports/src/driving/app-builds.d.ts +91 -0
  2322. package/core/ports/src/driving/app-builds.js +3 -0
  2323. package/core/ports/src/driving/bisect.d.ts +42 -0
  2324. package/core/ports/src/driving/bisect.js +3 -0
  2325. package/core/ports/src/driving/breakpoints.d.ts +148 -0
  2326. package/core/ports/src/driving/breakpoints.js +3 -0
  2327. package/core/ports/src/driving/builder.d.ts +92 -0
  2328. package/core/ports/src/driving/builder.js +3 -0
  2329. package/core/ports/src/driving/chain-console.d.ts +52 -0
  2330. package/core/ports/src/driving/chain-console.js +3 -0
  2331. package/core/ports/src/driving/demo.d.ts +47 -0
  2332. package/core/ports/src/driving/demo.js +3 -0
  2333. package/core/ports/src/driving/environment-rpc.d.ts +16 -0
  2334. package/core/ports/src/driving/environment-rpc.js +3 -0
  2335. package/core/ports/src/driving/environment-tooling.d.ts +40 -0
  2336. package/core/ports/src/driving/environment-tooling.js +3 -0
  2337. package/core/ports/src/driving/exploration.d.ts +58 -0
  2338. package/core/ports/src/driving/exploration.js +3 -0
  2339. package/core/ports/src/driving/feature-session.d.ts +269 -0
  2340. package/core/ports/src/driving/feature-session.js +3 -0
  2341. package/core/ports/src/driving/features.d.ts +260 -0
  2342. package/core/ports/src/driving/features.js +3 -0
  2343. package/core/ports/src/driving/fixture-maintenance.d.ts +95 -0
  2344. package/core/ports/src/driving/fixture-maintenance.js +3 -0
  2345. package/core/ports/src/driving/fixture-sharing.d.ts +159 -0
  2346. package/core/ports/src/driving/fixture-sharing.js +3 -0
  2347. package/core/ports/src/driving/fixtures.d.ts +149 -0
  2348. package/core/ports/src/driving/fixtures.js +3 -0
  2349. package/core/ports/src/driving/hosts.d.ts +49 -0
  2350. package/core/ports/src/driving/hosts.js +3 -0
  2351. package/core/ports/src/driving/index.d.ts +36 -0
  2352. package/core/ports/src/driving/index.js +3 -0
  2353. package/core/ports/src/driving/journeys.d.ts +45 -0
  2354. package/core/ports/src/driving/journeys.js +3 -0
  2355. package/core/ports/src/driving/lab-coverage.d.ts +47 -0
  2356. package/core/ports/src/driving/lab-coverage.js +3 -0
  2357. package/core/ports/src/driving/lab-lint.d.ts +47 -0
  2358. package/core/ports/src/driving/lab-lint.js +3 -0
  2359. package/core/ports/src/driving/lab-mutations.d.ts +16 -0
  2360. package/core/ports/src/driving/lab-mutations.js +3 -0
  2361. package/core/ports/src/driving/lab-registry.d.ts +236 -0
  2362. package/core/ports/src/driving/lab-registry.js +3 -0
  2363. package/core/ports/src/driving/lab-runtime.d.ts +656 -0
  2364. package/core/ports/src/driving/lab-runtime.js +3 -0
  2365. package/core/ports/src/driving/lab-settings.d.ts +29 -0
  2366. package/core/ports/src/driving/lab-settings.js +3 -0
  2367. package/core/ports/src/driving/lab-snapshot.d.ts +361 -0
  2368. package/core/ports/src/driving/lab-snapshot.js +3 -0
  2369. package/core/ports/src/driving/load.d.ts +22 -0
  2370. package/core/ports/src/driving/load.js +3 -0
  2371. package/core/ports/src/driving/navigation-view.d.ts +23 -0
  2372. package/core/ports/src/driving/navigation-view.js +3 -0
  2373. package/core/ports/src/driving/recordings.d.ts +103 -0
  2374. package/core/ports/src/driving/recordings.js +3 -0
  2375. package/core/ports/src/driving/reports.d.ts +411 -0
  2376. package/core/ports/src/driving/reports.js +3 -0
  2377. package/core/ports/src/driving/resolved-config.d.ts +52 -0
  2378. package/core/ports/src/driving/resolved-config.js +3 -0
  2379. package/core/ports/src/driving/run-bundles.d.ts +135 -0
  2380. package/core/ports/src/driving/run-bundles.js +3 -0
  2381. package/core/ports/src/driving/suites.d.ts +188 -0
  2382. package/core/ports/src/driving/suites.js +3 -0
  2383. package/core/ports/src/driving/tools.d.ts +279 -0
  2384. package/core/ports/src/driving/tools.js +3 -0
  2385. package/core/ports/src/driving/ui-extensions.d.ts +77 -0
  2386. package/core/ports/src/driving/ui-extensions.js +3 -0
  2387. package/core/ports/src/driving/versions.d.ts +280 -0
  2388. package/core/ports/src/driving/versions.js +3 -0
  2389. package/core/ports/src/driving/what-if.d.ts +64 -0
  2390. package/core/ports/src/driving/what-if.js +3 -0
  2391. package/core/ports/src/driving/workers.d.ts +52 -0
  2392. package/core/ports/src/driving/workers.js +3 -0
  2393. package/core/ports/src/index.d.ts +15 -0
  2394. package/core/ports/src/index.js +17 -0
  2395. package/entrypoints/cli/README.md +895 -0
  2396. package/entrypoints/cli/ai-kit/agents/product-lab-e2e-debugger.yaml +32 -0
  2397. package/entrypoints/cli/ai-kit/agents/product-lab-scenario-author.yaml +44 -0
  2398. package/entrypoints/cli/ai-kit/agents-md.md +52 -0
  2399. package/entrypoints/cli/ai-kit/mcp.json +11 -0
  2400. package/entrypoints/cli/ai-kit/skills/product-lab-app/SKILL.md +101 -0
  2401. package/entrypoints/cli/ai-kit/skills/product-lab-debug/SKILL.md +54 -0
  2402. package/entrypoints/cli/ai-kit/skills/product-lab-integration/SKILL.md +116 -0
  2403. package/entrypoints/cli/ai-kit/skills/product-lab-integration/references/notes-example.md +192 -0
  2404. package/entrypoints/cli/ai-kit/skills/product-lab-integration/references/notes-lab.md +5700 -0
  2405. package/entrypoints/cli/ai-kit/skills/product-lab-scenario/SKILL.md +122 -0
  2406. package/entrypoints/cli/ai-kit/skills/product-lab-setup/SKILL.md +114 -0
  2407. package/entrypoints/cli/ai-kit/skills/product-lab-setup/references/minimal-lab.md +480 -0
  2408. package/entrypoints/cli/ai-kit/skills/product-lab-test-ids/SKILL.md +79 -0
  2409. package/entrypoints/cli/bin/esbuild-own-session.sh +8 -0
  2410. package/entrypoints/cli/bin/esbuild-session.mjs +70 -0
  2411. package/entrypoints/cli/bin/product-lab.mjs +42 -0
  2412. package/entrypoints/cli/src/agents.d.ts +65 -0
  2413. package/entrypoints/cli/src/agents.js +96 -0
  2414. package/entrypoints/cli/src/ai/command.d.ts +3 -0
  2415. package/entrypoints/cli/src/ai/command.js +79 -0
  2416. package/entrypoints/cli/src/ai/doctor.d.ts +17 -0
  2417. package/entrypoints/cli/src/ai/doctor.js +117 -0
  2418. package/entrypoints/cli/src/ai/examples.d.ts +18 -0
  2419. package/entrypoints/cli/src/ai/examples.js +69 -0
  2420. package/entrypoints/cli/src/ai/init.d.ts +41 -0
  2421. package/entrypoints/cli/src/ai/init.js +229 -0
  2422. package/entrypoints/cli/src/ai/kit-reference.d.ts +46 -0
  2423. package/entrypoints/cli/src/ai/kit-reference.js +300 -0
  2424. package/entrypoints/cli/src/ai/kit.d.ts +37 -0
  2425. package/entrypoints/cli/src/ai/kit.js +73 -0
  2426. package/entrypoints/cli/src/ai/policy.d.ts +28 -0
  2427. package/entrypoints/cli/src/ai/policy.js +56 -0
  2428. package/entrypoints/cli/src/ai/render.d.ts +68 -0
  2429. package/entrypoints/cli/src/ai/render.js +200 -0
  2430. package/entrypoints/cli/src/ai/status.d.ts +21 -0
  2431. package/entrypoints/cli/src/ai/status.js +41 -0
  2432. package/entrypoints/cli/src/ai/sync.d.ts +39 -0
  2433. package/entrypoints/cli/src/ai/sync.js +256 -0
  2434. package/entrypoints/cli/src/bisect-command.d.ts +4 -0
  2435. package/entrypoints/cli/src/bisect-command.js +109 -0
  2436. package/entrypoints/cli/src/breakpoints-command.d.ts +4 -0
  2437. package/entrypoints/cli/src/breakpoints-command.js +67 -0
  2438. package/entrypoints/cli/src/bundle-command.d.ts +5 -0
  2439. package/entrypoints/cli/src/bundle-command.js +74 -0
  2440. package/entrypoints/cli/src/checkout.d.ts +6 -0
  2441. package/entrypoints/cli/src/checkout.js +12 -0
  2442. package/entrypoints/cli/src/cli-app.d.ts +57 -0
  2443. package/entrypoints/cli/src/cli-app.js +506 -0
  2444. package/entrypoints/cli/src/cli-host-release.d.ts +22 -0
  2445. package/entrypoints/cli/src/cli-host-release.js +23 -0
  2446. package/entrypoints/cli/src/commands/chain-day-ended.d.ts +12 -0
  2447. package/entrypoints/cli/src/commands/chain-day-ended.js +33 -0
  2448. package/entrypoints/cli/src/commands/check.d.ts +13 -0
  2449. package/entrypoints/cli/src/commands/check.js +36 -0
  2450. package/entrypoints/cli/src/commands/dev.d.ts +149 -0
  2451. package/entrypoints/cli/src/commands/dev.js +327 -0
  2452. package/entrypoints/cli/src/config-command.d.ts +7 -0
  2453. package/entrypoints/cli/src/config-command.js +69 -0
  2454. package/entrypoints/cli/src/coverage-command.d.ts +4 -0
  2455. package/entrypoints/cli/src/coverage-command.js +75 -0
  2456. package/entrypoints/cli/src/demo-command.d.ts +4 -0
  2457. package/entrypoints/cli/src/demo-command.js +102 -0
  2458. package/entrypoints/cli/src/env-command.d.ts +90 -0
  2459. package/entrypoints/cli/src/env-command.js +203 -0
  2460. package/entrypoints/cli/src/env-files.d.ts +6 -0
  2461. package/entrypoints/cli/src/env-files.js +46 -0
  2462. package/entrypoints/cli/src/environment.d.ts +5 -0
  2463. package/entrypoints/cli/src/environment.js +3 -0
  2464. package/entrypoints/cli/src/every-control.d.ts +74 -0
  2465. package/entrypoints/cli/src/every-control.js +129 -0
  2466. package/entrypoints/cli/src/explore-command.d.ts +4 -0
  2467. package/entrypoints/cli/src/explore-command.js +133 -0
  2468. package/entrypoints/cli/src/fixture-command.d.ts +8 -0
  2469. package/entrypoints/cli/src/fixture-command.js +365 -0
  2470. package/entrypoints/cli/src/fixture-refresh-command.d.ts +11 -0
  2471. package/entrypoints/cli/src/fixture-refresh-command.js +245 -0
  2472. package/entrypoints/cli/src/fixture-setup-marker.d.ts +22 -0
  2473. package/entrypoints/cli/src/fixture-setup-marker.js +52 -0
  2474. package/entrypoints/cli/src/fixture-sharing-command.d.ts +16 -0
  2475. package/entrypoints/cli/src/fixture-sharing-command.js +192 -0
  2476. package/entrypoints/cli/src/fixture-source-command.d.ts +3 -0
  2477. package/entrypoints/cli/src/fixture-source-command.js +161 -0
  2478. package/entrypoints/cli/src/host-command.d.ts +5 -0
  2479. package/entrypoints/cli/src/host-command.js +213 -0
  2480. package/entrypoints/cli/src/init-command.d.ts +49 -0
  2481. package/entrypoints/cli/src/init-command.js +349 -0
  2482. package/entrypoints/cli/src/init-lock.d.ts +48 -0
  2483. package/entrypoints/cli/src/init-lock.js +50 -0
  2484. package/entrypoints/cli/src/journeys-after-test.d.ts +2 -0
  2485. package/entrypoints/cli/src/journeys-after-test.js +13 -0
  2486. package/entrypoints/cli/src/journeys-command.d.ts +5 -0
  2487. package/entrypoints/cli/src/journeys-command.js +61 -0
  2488. package/entrypoints/cli/src/lab-flags.d.ts +54 -0
  2489. package/entrypoints/cli/src/lab-flags.js +53 -0
  2490. package/entrypoints/cli/src/lab-window-closed.d.ts +4 -0
  2491. package/entrypoints/cli/src/lab-window-closed.js +10 -0
  2492. package/entrypoints/cli/src/lint-command.d.ts +4 -0
  2493. package/entrypoints/cli/src/lint-command.js +82 -0
  2494. package/entrypoints/cli/src/load-command.d.ts +5 -0
  2495. package/entrypoints/cli/src/load-command.js +111 -0
  2496. package/entrypoints/cli/src/load-env.d.ts +1 -0
  2497. package/entrypoints/cli/src/load-env.js +4 -0
  2498. package/entrypoints/cli/src/machine-fit.d.ts +60 -0
  2499. package/entrypoints/cli/src/machine-fit.js +63 -0
  2500. package/entrypoints/cli/src/main.d.ts +14 -0
  2501. package/entrypoints/cli/src/main.js +31 -0
  2502. package/entrypoints/cli/src/mcp-command.d.ts +6 -0
  2503. package/entrypoints/cli/src/mcp-command.js +28 -0
  2504. package/entrypoints/cli/src/mutate-command.d.ts +34 -0
  2505. package/entrypoints/cli/src/mutate-command.js +84 -0
  2506. package/entrypoints/cli/src/own-running-record.d.ts +1 -0
  2507. package/entrypoints/cli/src/own-running-record.js +10 -0
  2508. package/entrypoints/cli/src/parse-args-errors.d.ts +2 -0
  2509. package/entrypoints/cli/src/parse-args-errors.js +7 -0
  2510. package/entrypoints/cli/src/plain-output.d.ts +98 -0
  2511. package/entrypoints/cli/src/plain-output.js +179 -0
  2512. package/entrypoints/cli/src/recordings-command.d.ts +15 -0
  2513. package/entrypoints/cli/src/recordings-command.js +232 -0
  2514. package/entrypoints/cli/src/release/notices.d.ts +87 -0
  2515. package/entrypoints/cli/src/release/notices.js +182 -0
  2516. package/entrypoints/cli/src/release/upgrade-command.d.ts +35 -0
  2517. package/entrypoints/cli/src/release/upgrade-command.js +240 -0
  2518. package/entrypoints/cli/src/report-command.d.ts +3 -0
  2519. package/entrypoints/cli/src/report-command.js +207 -0
  2520. package/entrypoints/cli/src/reports/compatibility-html.d.ts +2 -0
  2521. package/entrypoints/cli/src/reports/compatibility-html.js +76 -0
  2522. package/entrypoints/cli/src/reports/evidence-report.d.ts +46 -0
  2523. package/entrypoints/cli/src/reports/evidence-report.js +31 -0
  2524. package/entrypoints/cli/src/reports/host-bypass.d.ts +3 -0
  2525. package/entrypoints/cli/src/reports/host-bypass.js +17 -0
  2526. package/entrypoints/cli/src/reports/html.d.ts +6 -0
  2527. package/entrypoints/cli/src/reports/html.js +178 -0
  2528. package/entrypoints/cli/src/reports/junit.d.ts +2 -0
  2529. package/entrypoints/cli/src/reports/junit.js +93 -0
  2530. package/entrypoints/cli/src/reports/markdown.d.ts +2 -0
  2531. package/entrypoints/cli/src/reports/markdown.js +62 -0
  2532. package/entrypoints/cli/src/reports/metrics-text.d.ts +19 -0
  2533. package/entrypoints/cli/src/reports/metrics-text.js +72 -0
  2534. package/entrypoints/cli/src/reports/pr-comment.d.ts +20 -0
  2535. package/entrypoints/cli/src/reports/pr-comment.js +61 -0
  2536. package/entrypoints/cli/src/reports/write-reports.d.ts +8 -0
  2537. package/entrypoints/cli/src/reports/write-reports.js +30 -0
  2538. package/entrypoints/cli/src/reproduce-command.d.ts +4 -0
  2539. package/entrypoints/cli/src/reproduce-command.js +69 -0
  2540. package/entrypoints/cli/src/rerun-failures.d.ts +8 -0
  2541. package/entrypoints/cli/src/rerun-failures.js +59 -0
  2542. package/entrypoints/cli/src/rpc-flags.d.ts +3 -0
  2543. package/entrypoints/cli/src/rpc-flags.js +23 -0
  2544. package/entrypoints/cli/src/setup-commands.d.ts +36 -0
  2545. package/entrypoints/cli/src/setup-commands.js +344 -0
  2546. package/entrypoints/cli/src/shared-controls.d.ts +6 -0
  2547. package/entrypoints/cli/src/shared-controls.js +49 -0
  2548. package/entrypoints/cli/src/start-progress.d.ts +96 -0
  2549. package/entrypoints/cli/src/start-progress.js +256 -0
  2550. package/entrypoints/cli/src/startup-notices.d.ts +9 -0
  2551. package/entrypoints/cli/src/startup-notices.js +25 -0
  2552. package/entrypoints/cli/src/stop-signals.d.ts +27 -0
  2553. package/entrypoints/cli/src/stop-signals.js +60 -0
  2554. package/entrypoints/cli/src/suite-run-command.d.ts +17 -0
  2555. package/entrypoints/cli/src/suite-run-command.js +48 -0
  2556. package/entrypoints/cli/src/test-command.d.ts +15 -0
  2557. package/entrypoints/cli/src/test-command.js +597 -0
  2558. package/entrypoints/cli/src/test-in-window.d.ts +11 -0
  2559. package/entrypoints/cli/src/test-in-window.js +27 -0
  2560. package/entrypoints/cli/src/test-output.d.ts +9 -0
  2561. package/entrypoints/cli/src/test-output.js +17 -0
  2562. package/entrypoints/cli/src/tool-run.d.ts +3 -0
  2563. package/entrypoints/cli/src/tool-run.js +29 -0
  2564. package/entrypoints/cli/src/tui/agents-menu.d.ts +18 -0
  2565. package/entrypoints/cli/src/tui/agents-menu.js +108 -0
  2566. package/entrypoints/cli/src/tui/app.d.ts +46 -0
  2567. package/entrypoints/cli/src/tui/app.js +483 -0
  2568. package/entrypoints/cli/src/tui/frame.d.ts +23 -0
  2569. package/entrypoints/cli/src/tui/frame.js +24 -0
  2570. package/entrypoints/cli/src/tui/model.d.ts +188 -0
  2571. package/entrypoints/cli/src/tui/model.js +487 -0
  2572. package/entrypoints/cli/src/tui/mouse.d.ts +50 -0
  2573. package/entrypoints/cli/src/tui/mouse.js +91 -0
  2574. package/entrypoints/cli/src/tui/scroll.d.ts +28 -0
  2575. package/entrypoints/cli/src/tui/scroll.js +29 -0
  2576. package/entrypoints/cli/src/tui/start.d.ts +54 -0
  2577. package/entrypoints/cli/src/tui/start.js +168 -0
  2578. package/entrypoints/cli/src/tui/starting.d.ts +52 -0
  2579. package/entrypoints/cli/src/tui/starting.js +67 -0
  2580. package/entrypoints/cli/src/versions-command.d.ts +22 -0
  2581. package/entrypoints/cli/src/versions-command.js +230 -0
  2582. package/entrypoints/cli/src/what-if-command.d.ts +7 -0
  2583. package/entrypoints/cli/src/what-if-command.js +103 -0
  2584. package/entrypoints/cucumber/README.md +53 -0
  2585. package/entrypoints/cucumber/src/ci/change-scope.d.ts +4 -0
  2586. package/entrypoints/cucumber/src/ci/change-scope.js +8 -0
  2587. package/entrypoints/cucumber/src/ci/coverage.d.ts +4 -0
  2588. package/entrypoints/cucumber/src/ci/coverage.js +44 -0
  2589. package/entrypoints/cucumber/src/ci/fast-plan.d.ts +29 -0
  2590. package/entrypoints/cucumber/src/ci/fast-plan.js +79 -0
  2591. package/entrypoints/cucumber/src/ci/owned-command.d.ts +11 -0
  2592. package/entrypoints/cucumber/src/ci/owned-command.js +85 -0
  2593. package/entrypoints/cucumber/src/cucumber/hooks.d.ts +50 -0
  2594. package/entrypoints/cucumber/src/cucumber/hooks.js +132 -0
  2595. package/entrypoints/cucumber/src/cucumber/navigation.d.ts +26 -0
  2596. package/entrypoints/cucumber/src/cucumber/navigation.js +44 -0
  2597. package/entrypoints/cucumber/src/cucumber/rows.d.ts +5 -0
  2598. package/entrypoints/cucumber/src/cucumber/rows.js +26 -0
  2599. package/entrypoints/cucumber/src/cucumber/world.d.ts +11 -0
  2600. package/entrypoints/cucumber/src/cucumber/world.js +41 -0
  2601. package/entrypoints/cucumber/src/index.d.ts +9 -0
  2602. package/entrypoints/cucumber/src/index.js +11 -0
  2603. package/entrypoints/cucumber/src/main.d.ts +44 -0
  2604. package/entrypoints/cucumber/src/main.js +55 -0
  2605. package/entrypoints/cucumber/src/negative/control-result.d.ts +31 -0
  2606. package/entrypoints/cucumber/src/negative/control-result.js +56 -0
  2607. package/entrypoints/mcp/README.md +204 -0
  2608. package/entrypoints/mcp/src/args.d.ts +10 -0
  2609. package/entrypoints/mcp/src/args.js +63 -0
  2610. package/entrypoints/mcp/src/chain.d.ts +75 -0
  2611. package/entrypoints/mcp/src/chain.js +185 -0
  2612. package/entrypoints/mcp/src/deferred-runtime.d.ts +26 -0
  2613. package/entrypoints/mcp/src/deferred-runtime.js +72 -0
  2614. package/entrypoints/mcp/src/describe-sections.d.ts +14 -0
  2615. package/entrypoints/mcp/src/describe-sections.js +38 -0
  2616. package/entrypoints/mcp/src/index.d.ts +7 -0
  2617. package/entrypoints/mcp/src/index.js +9 -0
  2618. package/entrypoints/mcp/src/load-gate.d.ts +27 -0
  2619. package/entrypoints/mcp/src/load-gate.js +65 -0
  2620. package/entrypoints/mcp/src/logs.d.ts +41 -0
  2621. package/entrypoints/mcp/src/logs.js +138 -0
  2622. package/entrypoints/mcp/src/main.d.ts +24 -0
  2623. package/entrypoints/mcp/src/main.js +42 -0
  2624. package/entrypoints/mcp/src/output.d.ts +8 -0
  2625. package/entrypoints/mcp/src/output.js +69 -0
  2626. package/entrypoints/mcp/src/resources.d.ts +18 -0
  2627. package/entrypoints/mcp/src/resources.js +139 -0
  2628. package/entrypoints/mcp/src/server.d.ts +37 -0
  2629. package/entrypoints/mcp/src/server.js +68 -0
  2630. package/entrypoints/mcp/src/session-core.d.ts +42 -0
  2631. package/entrypoints/mcp/src/session-core.js +80 -0
  2632. package/entrypoints/mcp/src/session-debug.d.ts +219 -0
  2633. package/entrypoints/mcp/src/session-debug.js +393 -0
  2634. package/entrypoints/mcp/src/session-discover.d.ts +342 -0
  2635. package/entrypoints/mcp/src/session-discover.js +212 -0
  2636. package/entrypoints/mcp/src/session-environment.d.ts +807 -0
  2637. package/entrypoints/mcp/src/session-environment.js +250 -0
  2638. package/entrypoints/mcp/src/session-host.d.ts +8 -0
  2639. package/entrypoints/mcp/src/session-host.js +40 -0
  2640. package/entrypoints/mcp/src/session-run.d.ts +127 -0
  2641. package/entrypoints/mcp/src/session-run.js +417 -0
  2642. package/entrypoints/mcp/src/session-shared.d.ts +181 -0
  2643. package/entrypoints/mcp/src/session-shared.js +89 -0
  2644. package/entrypoints/mcp/src/session.d.ts +9 -0
  2645. package/entrypoints/mcp/src/session.js +38 -0
  2646. package/entrypoints/mcp/src/stdio.d.ts +62 -0
  2647. package/entrypoints/mcp/src/stdio.js +114 -0
  2648. package/entrypoints/mcp/src/tools.d.ts +20 -0
  2649. package/entrypoints/mcp/src/tools.js +382 -0
  2650. package/entrypoints/panel/README.md +1773 -0
  2651. package/entrypoints/panel/src/agent-routes.d.ts +32 -0
  2652. package/entrypoints/panel/src/agent-routes.js +32 -0
  2653. package/entrypoints/panel/src/builder-input.d.ts +7 -0
  2654. package/entrypoints/panel/src/builder-input.js +66 -0
  2655. package/entrypoints/panel/src/bundle-routes.d.ts +16 -0
  2656. package/entrypoints/panel/src/bundle-routes.js +59 -0
  2657. package/entrypoints/panel/src/chain-console-routes.d.ts +9 -0
  2658. package/entrypoints/panel/src/chain-console-routes.js +18 -0
  2659. package/entrypoints/panel/src/client/activity.d.ts +5 -0
  2660. package/entrypoints/panel/src/client/activity.js +173 -0
  2661. package/entrypoints/panel/src/client/address-bar.css +36 -0
  2662. package/entrypoints/panel/src/client/address-bar.d.ts +62 -0
  2663. package/entrypoints/panel/src/client/address-bar.js +311 -0
  2664. package/entrypoints/panel/src/client/after-failure-view.d.ts +8 -0
  2665. package/entrypoints/panel/src/client/after-failure-view.js +24 -0
  2666. package/entrypoints/panel/src/client/agents-tools.d.ts +5 -0
  2667. package/entrypoints/panel/src/client/agents-tools.js +31 -0
  2668. package/entrypoints/panel/src/client/app-builds.d.ts +16 -0
  2669. package/entrypoints/panel/src/client/app-builds.js +38 -0
  2670. package/entrypoints/panel/src/client/app-tiles.d.ts +30 -0
  2671. package/entrypoints/panel/src/client/app-tiles.js +484 -0
  2672. package/entrypoints/panel/src/client/bindings.d.ts +39 -0
  2673. package/entrypoints/panel/src/client/bindings.js +120 -0
  2674. package/entrypoints/panel/src/client/builder-blocks.d.ts +26 -0
  2675. package/entrypoints/panel/src/client/builder-blocks.js +346 -0
  2676. package/entrypoints/panel/src/client/builder-chrome.d.ts +27 -0
  2677. package/entrypoints/panel/src/client/builder-chrome.js +144 -0
  2678. package/entrypoints/panel/src/client/builder-view.d.ts +86 -0
  2679. package/entrypoints/panel/src/client/builder-view.js +334 -0
  2680. package/entrypoints/panel/src/client/builder.d.ts +34 -0
  2681. package/entrypoints/panel/src/client/builder.js +620 -0
  2682. package/entrypoints/panel/src/client/bundle-actions.d.ts +9 -0
  2683. package/entrypoints/panel/src/client/bundle-actions.js +124 -0
  2684. package/entrypoints/panel/src/client/chain-console.css +31 -0
  2685. package/entrypoints/panel/src/client/chain-console.d.ts +13 -0
  2686. package/entrypoints/panel/src/client/chain-console.js +77 -0
  2687. package/entrypoints/panel/src/client/chain-day.d.ts +29 -0
  2688. package/entrypoints/panel/src/client/chain-day.js +43 -0
  2689. package/entrypoints/panel/src/client/checkpoint.d.ts +5 -0
  2690. package/entrypoints/panel/src/client/checkpoint.js +8 -0
  2691. package/entrypoints/panel/src/client/client.d.ts +1 -0
  2692. package/entrypoints/panel/src/client/client.js +634 -0
  2693. package/entrypoints/panel/src/client/components.css +219 -0
  2694. package/entrypoints/panel/src/client/confirm-dialogs.d.ts +11 -0
  2695. package/entrypoints/panel/src/client/confirm-dialogs.js +54 -0
  2696. package/entrypoints/panel/src/client/detached-tiles.d.ts +39 -0
  2697. package/entrypoints/panel/src/client/detached-tiles.js +106 -0
  2698. package/entrypoints/panel/src/client/dock-status.d.ts +17 -0
  2699. package/entrypoints/panel/src/client/dock-status.js +30 -0
  2700. package/entrypoints/panel/src/client/dock.d.ts +21 -0
  2701. package/entrypoints/panel/src/client/dock.js +74 -0
  2702. package/entrypoints/panel/src/client/dom.d.ts +8 -0
  2703. package/entrypoints/panel/src/client/dom.js +28 -0
  2704. package/entrypoints/panel/src/client/environment-lifecycle.d.ts +19 -0
  2705. package/entrypoints/panel/src/client/environment-lifecycle.js +164 -0
  2706. package/entrypoints/panel/src/client/environment-options.d.ts +18 -0
  2707. package/entrypoints/panel/src/client/environment-options.js +33 -0
  2708. package/entrypoints/panel/src/client/environment.d.ts +189 -0
  2709. package/entrypoints/panel/src/client/environment.js +521 -0
  2710. package/entrypoints/panel/src/client/evidence-controls.d.ts +14 -0
  2711. package/entrypoints/panel/src/client/evidence-controls.js +37 -0
  2712. package/entrypoints/panel/src/client/evidence-model.d.ts +65 -0
  2713. package/entrypoints/panel/src/client/evidence-model.js +179 -0
  2714. package/entrypoints/panel/src/client/evidence-view.css +82 -0
  2715. package/entrypoints/panel/src/client/evidence-view.d.ts +9 -0
  2716. package/entrypoints/panel/src/client/evidence-view.js +56 -0
  2717. package/entrypoints/panel/src/client/extensions.d.ts +21 -0
  2718. package/entrypoints/panel/src/client/extensions.js +345 -0
  2719. package/entrypoints/panel/src/client/features.d.ts +88 -0
  2720. package/entrypoints/panel/src/client/features.js +247 -0
  2721. package/entrypoints/panel/src/client/fixtures.d.ts +16 -0
  2722. package/entrypoints/panel/src/client/fixtures.js +155 -0
  2723. package/entrypoints/panel/src/client/fonts/inter.OFL.txt +93 -0
  2724. package/entrypoints/panel/src/client/fonts/inter.woff2 +0 -0
  2725. package/entrypoints/panel/src/client/fonts/jetbrains-mono.OFL.txt +93 -0
  2726. package/entrypoints/panel/src/client/fonts/jetbrains-mono.woff2 +0 -0
  2727. package/entrypoints/panel/src/client/fonts/unbounded.OFL.txt +93 -0
  2728. package/entrypoints/panel/src/client/fonts/unbounded.woff2 +0 -0
  2729. package/entrypoints/panel/src/client/fonts.css +24 -0
  2730. package/entrypoints/panel/src/client/forms.d.ts +3 -0
  2731. package/entrypoints/panel/src/client/forms.js +58 -0
  2732. package/entrypoints/panel/src/client/frame.css +515 -0
  2733. package/entrypoints/panel/src/client/gallery.css +68 -0
  2734. package/entrypoints/panel/src/client/gallery.d.ts +1 -0
  2735. package/entrypoints/panel/src/client/gallery.html +17 -0
  2736. package/entrypoints/panel/src/client/gallery.js +81 -0
  2737. package/entrypoints/panel/src/client/gherkin-view.d.ts +149 -0
  2738. package/entrypoints/panel/src/client/gherkin-view.js +223 -0
  2739. package/entrypoints/panel/src/client/gherkin.css +88 -0
  2740. package/entrypoints/panel/src/client/host-bypass-model.d.ts +68 -0
  2741. package/entrypoints/panel/src/client/host-bypass-model.js +131 -0
  2742. package/entrypoints/panel/src/client/host-bypass.d.ts +13 -0
  2743. package/entrypoints/panel/src/client/host-bypass.js +50 -0
  2744. package/entrypoints/panel/src/client/host-request-words.d.ts +6 -0
  2745. package/entrypoints/panel/src/client/host-request-words.js +32 -0
  2746. package/entrypoints/panel/src/client/identity-words.d.ts +23 -0
  2747. package/entrypoints/panel/src/client/identity-words.js +46 -0
  2748. package/entrypoints/panel/src/client/index.html +326 -0
  2749. package/entrypoints/panel/src/client/integrations.d.ts +16 -0
  2750. package/entrypoints/panel/src/client/integrations.js +32 -0
  2751. package/entrypoints/panel/src/client/island.css +21 -0
  2752. package/entrypoints/panel/src/client/island.d.ts +99 -0
  2753. package/entrypoints/panel/src/client/island.js +199 -0
  2754. package/entrypoints/panel/src/client/keep-switch.d.ts +7 -0
  2755. package/entrypoints/panel/src/client/keep-switch.js +24 -0
  2756. package/entrypoints/panel/src/client/keep-words.d.ts +24 -0
  2757. package/entrypoints/panel/src/client/keep-words.js +22 -0
  2758. package/entrypoints/panel/src/client/lab-actions.d.ts +9 -0
  2759. package/entrypoints/panel/src/client/lab-actions.js +16 -0
  2760. package/entrypoints/panel/src/client/lab-document.d.ts +10 -0
  2761. package/entrypoints/panel/src/client/lab-document.js +37 -0
  2762. package/entrypoints/panel/src/client/lab-menu.css +11 -0
  2763. package/entrypoints/panel/src/client/lab-menu.d.ts +44 -0
  2764. package/entrypoints/panel/src/client/lab-menu.js +105 -0
  2765. package/entrypoints/panel/src/client/landing.d.ts +4 -0
  2766. package/entrypoints/panel/src/client/landing.js +24 -0
  2767. package/entrypoints/panel/src/client/lanes.d.ts +41 -0
  2768. package/entrypoints/panel/src/client/lanes.js +100 -0
  2769. package/entrypoints/panel/src/client/lucide.LICENSE +43 -0
  2770. package/entrypoints/panel/src/client/lucide.d.ts +95 -0
  2771. package/entrypoints/panel/src/client/lucide.js +95 -0
  2772. package/entrypoints/panel/src/client/navigation-activity.d.ts +34 -0
  2773. package/entrypoints/panel/src/client/navigation-activity.js +97 -0
  2774. package/entrypoints/panel/src/client/navigation-controls.d.ts +18 -0
  2775. package/entrypoints/panel/src/client/navigation-controls.js +29 -0
  2776. package/entrypoints/panel/src/client/operation-phases.d.ts +16 -0
  2777. package/entrypoints/panel/src/client/operation-phases.js +70 -0
  2778. package/entrypoints/panel/src/client/own-window.d.ts +9 -0
  2779. package/entrypoints/panel/src/client/own-window.js +113 -0
  2780. package/entrypoints/panel/src/client/panel-snapshot.d.ts +25 -0
  2781. package/entrypoints/panel/src/client/panel-snapshot.js +3 -0
  2782. package/entrypoints/panel/src/client/panel-tabs.d.ts +21 -0
  2783. package/entrypoints/panel/src/client/panel-tabs.js +41 -0
  2784. package/entrypoints/panel/src/client/pause-inspector.d.ts +14 -0
  2785. package/entrypoints/panel/src/client/pause-inspector.js +104 -0
  2786. package/entrypoints/panel/src/client/principals.d.ts +18 -0
  2787. package/entrypoints/panel/src/client/principals.js +21 -0
  2788. package/entrypoints/panel/src/client/recordings.d.ts +38 -0
  2789. package/entrypoints/panel/src/client/recordings.js +481 -0
  2790. package/entrypoints/panel/src/client/registry.d.ts +53 -0
  2791. package/entrypoints/panel/src/client/registry.js +415 -0
  2792. package/entrypoints/panel/src/client/release-notice.d.ts +2 -0
  2793. package/entrypoints/panel/src/client/release-notice.js +36 -0
  2794. package/entrypoints/panel/src/client/replace-kept.d.ts +21 -0
  2795. package/entrypoints/panel/src/client/replace-kept.js +21 -0
  2796. package/entrypoints/panel/src/client/replay-chain.d.ts +20 -0
  2797. package/entrypoints/panel/src/client/replay-chain.js +31 -0
  2798. package/entrypoints/panel/src/client/request-error.d.ts +11 -0
  2799. package/entrypoints/panel/src/client/request-error.js +17 -0
  2800. package/entrypoints/panel/src/client/request.d.ts +1 -0
  2801. package/entrypoints/panel/src/client/request.js +16 -0
  2802. package/entrypoints/panel/src/client/reset-words.d.ts +9 -0
  2803. package/entrypoints/panel/src/client/reset-words.js +13 -0
  2804. package/entrypoints/panel/src/client/resize.d.ts +18 -0
  2805. package/entrypoints/panel/src/client/resize.js +137 -0
  2806. package/entrypoints/panel/src/client/root-call-confirm.d.ts +11 -0
  2807. package/entrypoints/panel/src/client/root-call-confirm.js +35 -0
  2808. package/entrypoints/panel/src/client/run-mode.d.ts +105 -0
  2809. package/entrypoints/panel/src/client/run-mode.js +49 -0
  2810. package/entrypoints/panel/src/client/run-outcome.d.ts +28 -0
  2811. package/entrypoints/panel/src/client/run-outcome.js +110 -0
  2812. package/entrypoints/panel/src/client/run-preludes.d.ts +54 -0
  2813. package/entrypoints/panel/src/client/run-preludes.js +46 -0
  2814. package/entrypoints/panel/src/client/run-progress.d.ts +117 -0
  2815. package/entrypoints/panel/src/client/run-progress.js +322 -0
  2816. package/entrypoints/panel/src/client/run-steps.d.ts +105 -0
  2817. package/entrypoints/panel/src/client/run-steps.js +319 -0
  2818. package/entrypoints/panel/src/client/run-writes.d.ts +66 -0
  2819. package/entrypoints/panel/src/client/run-writes.js +76 -0
  2820. package/entrypoints/panel/src/client/scenario-environment.d.ts +15 -0
  2821. package/entrypoints/panel/src/client/scenario-environment.js +34 -0
  2822. package/entrypoints/panel/src/client/selection.d.ts +7 -0
  2823. package/entrypoints/panel/src/client/selection.js +32 -0
  2824. package/entrypoints/panel/src/client/settings.d.ts +35 -0
  2825. package/entrypoints/panel/src/client/settings.js +178 -0
  2826. package/entrypoints/panel/src/client/shell-kit.d.ts +89 -0
  2827. package/entrypoints/panel/src/client/shell-kit.js +38 -0
  2828. package/entrypoints/panel/src/client/shell.css +355 -0
  2829. package/entrypoints/panel/src/client/show-cursor.css +55 -0
  2830. package/entrypoints/panel/src/client/show-cursor.d.ts +10 -0
  2831. package/entrypoints/panel/src/client/show-cursor.js +69 -0
  2832. package/entrypoints/panel/src/client/status-actions.d.ts +21 -0
  2833. package/entrypoints/panel/src/client/status-actions.js +40 -0
  2834. package/entrypoints/panel/src/client/step-evidence.css +11 -0
  2835. package/entrypoints/panel/src/client/step-evidence.d.ts +6 -0
  2836. package/entrypoints/panel/src/client/step-evidence.js +62 -0
  2837. package/entrypoints/panel/src/client/switch-run.d.ts +34 -0
  2838. package/entrypoints/panel/src/client/switch-run.js +67 -0
  2839. package/entrypoints/panel/src/client/tile-device.d.ts +55 -0
  2840. package/entrypoints/panel/src/client/tile-device.js +70 -0
  2841. package/entrypoints/panel/src/client/tile-grid.d.ts +54 -0
  2842. package/entrypoints/panel/src/client/tile-grid.js +67 -0
  2843. package/entrypoints/panel/src/client/tile-strip.d.ts +13 -0
  2844. package/entrypoints/panel/src/client/tile-strip.js +66 -0
  2845. package/entrypoints/panel/src/client/timeline.d.ts +82 -0
  2846. package/entrypoints/panel/src/client/timeline.js +195 -0
  2847. package/entrypoints/panel/src/client/tokens.css +206 -0
  2848. package/entrypoints/panel/src/client/tool-report.d.ts +15 -0
  2849. package/entrypoints/panel/src/client/tool-report.js +61 -0
  2850. package/entrypoints/panel/src/client/tools-page.css +168 -0
  2851. package/entrypoints/panel/src/client/ui-calls.d.ts +41 -0
  2852. package/entrypoints/panel/src/client/ui-calls.js +42 -0
  2853. package/entrypoints/panel/src/client/ui.d.ts +251 -0
  2854. package/entrypoints/panel/src/client/ui.js +493 -0
  2855. package/entrypoints/panel/src/client/unawaited.d.ts +5 -0
  2856. package/entrypoints/panel/src/client/unawaited.js +14 -0
  2857. package/entrypoints/panel/src/client/view-builder.css +372 -0
  2858. package/entrypoints/panel/src/client/view-characters.d.ts +3 -0
  2859. package/entrypoints/panel/src/client/view-characters.js +20 -0
  2860. package/entrypoints/panel/src/client/view-config.css +23 -0
  2861. package/entrypoints/panel/src/client/view-config.d.ts +6 -0
  2862. package/entrypoints/panel/src/client/view-config.js +41 -0
  2863. package/entrypoints/panel/src/client/view-environment.css +193 -0
  2864. package/entrypoints/panel/src/client/view-environment.d.ts +42 -0
  2865. package/entrypoints/panel/src/client/view-environment.js +240 -0
  2866. package/entrypoints/panel/src/client/view-identities.css +100 -0
  2867. package/entrypoints/panel/src/client/view-identities.d.ts +21 -0
  2868. package/entrypoints/panel/src/client/view-identities.js +288 -0
  2869. package/entrypoints/panel/src/client/view-recordings.css +9 -0
  2870. package/entrypoints/panel/src/client/view-replay.css +127 -0
  2871. package/entrypoints/panel/src/client/view-report.css +31 -0
  2872. package/entrypoints/panel/src/client/view-run-steps.css +98 -0
  2873. package/entrypoints/panel/src/client/view-runs.css +123 -0
  2874. package/entrypoints/panel/src/client/view-runs.d.ts +9 -0
  2875. package/entrypoints/panel/src/client/view-runs.js +443 -0
  2876. package/entrypoints/panel/src/client/view-scenarios.css +164 -0
  2877. package/entrypoints/panel/src/client/view-scenarios.d.ts +126 -0
  2878. package/entrypoints/panel/src/client/view-scenarios.js +510 -0
  2879. package/entrypoints/panel/src/client/view-settings.css +27 -0
  2880. package/entrypoints/panel/src/client/view-timeline.css +66 -0
  2881. package/entrypoints/panel/src/client/view-timeline.d.ts +22 -0
  2882. package/entrypoints/panel/src/client/view-timeline.js +136 -0
  2883. package/entrypoints/panel/src/client/view-tools.css +114 -0
  2884. package/entrypoints/panel/src/client/view-tools.d.ts +16 -0
  2885. package/entrypoints/panel/src/client/view-tools.js +285 -0
  2886. package/entrypoints/panel/src/client/views.d.ts +47 -0
  2887. package/entrypoints/panel/src/client/views.js +105 -0
  2888. package/entrypoints/panel/src/client/watch-layout.d.ts +47 -0
  2889. package/entrypoints/panel/src/client/watch-layout.js +79 -0
  2890. package/entrypoints/panel/src/client/window-bindings.d.ts +21 -0
  2891. package/entrypoints/panel/src/client/window-bindings.js +61 -0
  2892. package/entrypoints/panel/src/client/window-switch.d.ts +15 -0
  2893. package/entrypoints/panel/src/client/window-switch.js +19 -0
  2894. package/entrypoints/panel/src/client/workspace-shell.d.ts +20 -0
  2895. package/entrypoints/panel/src/client/workspace-shell.js +637 -0
  2896. package/entrypoints/panel/src/controls.d.ts +51 -0
  2897. package/entrypoints/panel/src/controls.js +119 -0
  2898. package/entrypoints/panel/src/device-list.d.ts +5 -0
  2899. package/entrypoints/panel/src/device-list.js +9 -0
  2900. package/entrypoints/panel/src/extensions.d.ts +5 -0
  2901. package/entrypoints/panel/src/extensions.js +28 -0
  2902. package/entrypoints/panel/src/feature-bindings.d.ts +9 -0
  2903. package/entrypoints/panel/src/feature-bindings.js +40 -0
  2904. package/entrypoints/panel/src/feature-control.d.ts +14 -0
  2905. package/entrypoints/panel/src/feature-control.js +25 -0
  2906. package/entrypoints/panel/src/feature-events.d.ts +10 -0
  2907. package/entrypoints/panel/src/feature-events.js +32 -0
  2908. package/entrypoints/panel/src/frame-check.d.ts +28 -0
  2909. package/entrypoints/panel/src/frame-check.js +69 -0
  2910. package/entrypoints/panel/src/index.d.ts +4 -0
  2911. package/entrypoints/panel/src/index.js +5 -0
  2912. package/entrypoints/panel/src/main.d.ts +3 -0
  2913. package/entrypoints/panel/src/main.js +40 -0
  2914. package/entrypoints/panel/src/react/browser.d.ts +9 -0
  2915. package/entrypoints/panel/src/react/browser.js +32 -0
  2916. package/entrypoints/panel/src/react/prepare.d.ts +10 -0
  2917. package/entrypoints/panel/src/react/prepare.js +49 -0
  2918. package/entrypoints/panel/src/rebuild-rule.d.ts +9 -0
  2919. package/entrypoints/panel/src/rebuild-rule.js +18 -0
  2920. package/entrypoints/panel/src/runtime-routes.d.ts +29 -0
  2921. package/entrypoints/panel/src/runtime-routes.js +143 -0
  2922. package/entrypoints/panel/src/served-assets.d.ts +7 -0
  2923. package/entrypoints/panel/src/served-assets.js +39 -0
  2924. package/entrypoints/panel/src/server.d.ts +95 -0
  2925. package/entrypoints/panel/src/server.js +653 -0
  2926. package/entrypoints/panel/src/tool-routes.d.ts +19 -0
  2927. package/entrypoints/panel/src/tool-routes.js +98 -0
  2928. package/entrypoints/panel/src/visible/app-reload.d.ts +6 -0
  2929. package/entrypoints/panel/src/visible/app-reload.js +22 -0
  2930. package/entrypoints/panel/src/visible/app-ui.d.ts +44 -0
  2931. package/entrypoints/panel/src/visible/app-ui.js +189 -0
  2932. package/entrypoints/panel/src/visible/detached-conditions.d.ts +9 -0
  2933. package/entrypoints/panel/src/visible/detached-conditions.js +37 -0
  2934. package/entrypoints/panel/src/visible/detached-identities.d.ts +82 -0
  2935. package/entrypoints/panel/src/visible/detached-identities.js +243 -0
  2936. package/entrypoints/panel/src/visible/detached-surface.d.ts +38 -0
  2937. package/entrypoints/panel/src/visible/detached-surface.js +182 -0
  2938. package/entrypoints/panel/src/visible/detached-window.d.ts +71 -0
  2939. package/entrypoints/panel/src/visible/detached-window.js +161 -0
  2940. package/entrypoints/panel/src/visible/device-catalogue.d.ts +12 -0
  2941. package/entrypoints/panel/src/visible/device-catalogue.js +40 -0
  2942. package/entrypoints/panel/src/visible/embedded-host.d.ts +6 -0
  2943. package/entrypoints/panel/src/visible/embedded-host.js +8 -0
  2944. package/entrypoints/panel/src/visible/frame-locations.d.ts +15 -0
  2945. package/entrypoints/panel/src/visible/frame-locations.js +29 -0
  2946. package/entrypoints/panel/src/visible/index.d.ts +13 -0
  2947. package/entrypoints/panel/src/visible/index.js +15 -0
  2948. package/entrypoints/panel/src/visible/mirror.d.ts +41 -0
  2949. package/entrypoints/panel/src/visible/mirror.js +100 -0
  2950. package/entrypoints/panel/src/visible/png-parts.d.ts +33 -0
  2951. package/entrypoints/panel/src/visible/png-parts.js +38 -0
  2952. package/entrypoints/panel/src/visible/png-work.d.ts +14 -0
  2953. package/entrypoints/panel/src/visible/png-work.js +15 -0
  2954. package/entrypoints/panel/src/visible/png-worker.mjs +13 -0
  2955. package/entrypoints/panel/src/visible/run-view.d.ts +37 -0
  2956. package/entrypoints/panel/src/visible/run-view.js +65 -0
  2957. package/entrypoints/panel/src/visible/runner.d.ts +192 -0
  2958. package/entrypoints/panel/src/visible/runner.js +450 -0
  2959. package/entrypoints/panel/src/visible/surface-session.d.ts +14 -0
  2960. package/entrypoints/panel/src/visible/surface-session.js +10 -0
  2961. package/entrypoints/panel/src/visible/tile-conditions.d.ts +33 -0
  2962. package/entrypoints/panel/src/visible/tile-conditions.js +94 -0
  2963. package/entrypoints/panel/src/visible/tile-placement.d.ts +61 -0
  2964. package/entrypoints/panel/src/visible/tile-placement.js +155 -0
  2965. package/entrypoints/panel/src/visible/tile-ready.d.ts +25 -0
  2966. package/entrypoints/panel/src/visible/tile-ready.js +78 -0
  2967. package/entrypoints/panel/src/visible/ui-activity.d.ts +60 -0
  2968. package/entrypoints/panel/src/visible/ui-activity.js +91 -0
  2969. package/entrypoints/panel/src/visible/ui-timing.d.ts +95 -0
  2970. package/entrypoints/panel/src/visible/ui-timing.js +32 -0
  2971. package/entrypoints/panel/src/visible/verified-typing.d.ts +39 -0
  2972. package/entrypoints/panel/src/visible/verified-typing.js +76 -0
  2973. package/entrypoints/panel/src/visible/viewport-shot.d.ts +29 -0
  2974. package/entrypoints/panel/src/visible/viewport-shot.js +83 -0
  2975. package/entrypoints/panel/src/visible/visible-ui.d.ts +132 -0
  2976. package/entrypoints/panel/src/visible/visible-ui.js +429 -0
  2977. package/entrypoints/panel/src/visible/window-frames.d.ts +35 -0
  2978. package/entrypoints/panel/src/visible/window-frames.js +128 -0
  2979. package/entrypoints/panel/src/visible/window-hold.d.ts +21 -0
  2980. package/entrypoints/panel/src/visible/window-hold.js +29 -0
  2981. package/entrypoints/panel/src/visible/window-video.d.ts +17 -0
  2982. package/entrypoints/panel/src/visible/window-video.js +21 -0
  2983. package/entrypoints/panel/src/visible/window.d.ts +99 -0
  2984. package/entrypoints/panel/src/visible/window.js +184 -0
  2985. package/entrypoints/panel/src/words.d.ts +6 -0
  2986. package/entrypoints/panel/src/words.js +8 -0
  2987. package/package.json +561 -3
package/CHANGELOG.md ADDED
@@ -0,0 +1,1000 @@
1
+ # @parity/product-lab
2
+
3
+ ## 0.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 9e75e10: A new optional setting, `PRODUCT_LAB_FORK_BUNDLE`, says what a start of a saved local copy of a network does about a newer published fork bundle. `fresh`, the default, downloads it in the background as before. `keep` keeps the bundle you have: the lab reads only the small release record, downloads nothing and logs one line with your bundle's age and when the published one was updated. `product-lab lab --refresh` works the same under both. Any other value is refused with a warning naming the fix.
8
+ - e9c8cac: The lab's reading of Vite's update socket is now checked against Vite 7.3.7, the release that fixes five security advisories in Vite's dev server. The AI kit's two complete reference labs now install `vite@7.3.7`. Nothing changes in how the lab reads Vite's updates: the update messages and the page's client are the same in 7.3.6 and 7.3.7.
9
+
10
+ ## 0.1.0
11
+
12
+ ### Minor Changes
13
+
14
+ - 96a6d3c: Added: a scenario tagged `@isolated` gives the environment's state back. The lab saves the running state before the scenario and restores it after, whatever the result, so a saved local fork is left as the scenario found it and the next scenario or run starts there. If a run is killed before the restore, the next isolated scenario restores the saved copy first. Under Cucumber, the hooks registered with `registerLabEnvironmentHooks` save the state before the environment's own scenario setup and restore it after the environment's cleanup. An environment can implement the optional `beforeStateChange` and `afterStateChange` to stop and rebind its own background work. The lab's product integration example tags some of its journeys `@isolated`: they can run again on the same saved fork (backlog 17h).
15
+ - 7172fd9: One lab config keeps or starts clean: "Keep chain and people between starts" is a switch in the lab window's environment
16
+ menu and the terminal app's Chains screen (`k`), on by default in the interactive lab (`product-lab`, `product-lab dev`) and off for `product-lab test`, CI and MCP.
17
+ `product-lab --keep` or `--clean` chooses for one start, `product-lab test --keep` for a test run, and MCP's `env_start`
18
+ takes `keep`. Each environment says what it keeps of its chains (`EnvironmentProvider.keeps`) and a lab says what it
19
+ keeps of its people (`defineLab({ keepBetweenStarts: { people } })`, or `peopleNot` with the reason); the switch shows
20
+ both, greyed with why when a part keeps nothing. Fixture and what-if commands always keep. Notes needs no second config:
21
+ `lab.workspace.config.ts` and `bun run lab:workspace` are gone.
22
+ - 9c8b05c: An environment can offer more than one way to run, for example "Full" and "Light (fewer nodes, for smaller laptops)" (`environmentOptions`). A start without an option runs the person's last choice, else the first option this machine meets, and says why. A start that names one (`product-lab --option light`, MCP `env_start` `option`, or a row under the environment in the lab window's picker) runs it and remembers it in `.product-lab/state/environment-options.json`. An option the machine is too small for is greyed with what it needs, and can still be chosen. The registry, the snapshot and `lab_describe` list every option with what it needs, the one the next start picks and why, and the one running. `defineLab({ environmentAliases })` keeps an old environment id starting what it became, with a notice. `createLabRuntime({ stateDir })` gives a test run its own remembered choices. In the Notes example, `paseo-fork` and `previewnet-fork` are Full or Light, and `paseo-fork-light` is now `paseo-fork` with `light`.
23
+ - 3bd850c: Added: the truAPI WASM host can serve from another official `@parity/truapi-host` release than the one the lab installs. `installHostPackage({ version, cacheDir, commands })` installs that release with npm into the lab's cache (`hosts/truapi-wasm/<version>/`, with npm's own download cache beside it) and returns its package directory. Pass that directory as the host's `hostPackage`: its version, WASM core and test server are then the ones used, and the entropy patch still applies to its host page. The install records the registry's integrity for the release, and npm's lock must carry the same one. Every later use hashes the cached files again and refuses a copy that changed since the install. Nothing is published, and no install script runs. The host still refuses a release whose truAPI differs from the `@parity/truapi` the apps use, which is the one in the lab's install (backlog 27).
24
+ - dec1ef7: Added: npm packages as a version source. A lab declares `versions.npm: { "<component>": { package: "<name>" } }`. A suite row's `latest-release` (the package's `latest` dist-tag) or a plain version then resolves from the npm registry, with the tarball's registry integrity recorded as a `sha512` digest. Lock entries can now have an `npm` source. The WASM test host uses it for `host:truapi-wasm`. Before a row runs, the host installs the resolved `@parity/truapi-host` into the lab's cache and checks its tarball against that integrity. The row is served from that package when the release speaks the same truAPI release as the apps' `@parity/truapi`. Otherwise the row is reported unsupported, with the reason (backlog 27).
25
+ - 20673fb: Changed: relay-less chains build and finalize a block every 500 ms by default (was 1000 ms), so scenarios on them wait less for finality. A transaction signed for the usual 64 blocks now stays valid for 32 seconds on them. Set the topology's `blockTime` (one number, or per chain) to choose another block time.
26
+ - 5c54a39: Added: `product-lab test --workers <n> <feature…>` runs the given feature files on several workers at once. A lab declares `workers: { max, env({ index, count }) }` in `defineLab`: the environment variables (its own names for port blocks, state and caches) that keep each worker apart. The run passes only when every worker passes and no two workers' environments reached the same address; `product-lab-workers.json` records each worker and how long they ran at the same time.
27
+ - 7cf08e9: Added: prepared characters. A fixture whose setup makes an identity one of the lab's characters, and does nothing else with it (`Given Wren is a writer with a published note`), saves it as prepared. A scenario that starts from that fixture (`@fixture:<name>`) and says `Given Bob is a writer with a published note` is bound to that identity instead of running the character's steps: Bob has its account and data (its username, where it has one), and every check reads them. Each identity serves one actor per restore; when none is left, when the scenario names the identity itself, or in a later scenario of a `@fixture-shared` group, the character's steps run, and the step's trace (`character`) says why. The fixture key now records the characters its setups use, so changing one makes the fixture stale, and the reason names the character and both lists of steps. `fixture list` and the save and restore reports list the prepared identities.
28
+ - 8dc7d0a: Added: `{actor} is a new actor with no funds`, a framework sentence for someone with nothing to pay with. The lab creates the identity without funding it. It then reads the account's free balance on every chain the session connects, at the finalized head, and the step fails unless each one is 0, naming the chain and the amount. The check is on chain, so the sentence means "no balance" whatever way the app pays. The default session supports it: `LabEnvironment.createActor({ funds: "none" })` and the new `LabEnvironment.fundsOf(actorId)`. A session without `fundsOf` refuses the scenario before it runs. Give it your own name as a character, for example `characters: { "a person with no funds": { steps: ["{actor} is a new actor with no funds"] } }`.
29
+ - f2ef8fc: Added: `product-lab bisect <previous> <current>` finds where a regression came in. It takes two suite runs, as `report compare` does: the scenario passed in the first and fails in the second. The component that changed between them is the range: the lab's own commits, or the published releases of a runtime or host between the two versions (from GitHub releases or npm). Each probe runs that one scenario as its row ran it, twice, with every other version pinned. The two ends run again first: when they no longer pass and fail, the summary says the regression did not reproduce and nothing is halved. Runs that disagree stop the bisect as flaky. A recovery, an infrastructure failure, a change with no recorded cause, or a change only the combination of components carries is refused, with the reason. A probe of the lab's commits runs from a worktree under the lab's cache, installed frozen from that commit's lockfile, and every worktree is removed at the end. Nothing starts with less than 15 GB of free disk. `--dry-run` lists the values and the most probes it would take. The report (`product-lab-bisect.json`) and `summary.md` go to `--out` (backlog 37).
30
+ - 650cb20: Changed: the transaction pool and block readers now read version 5 general transactions. One authorized by the standard `VerifyMultiSignature` extension names its account, as a signed version 4 transaction does, so the reading is complete. One its own call authorized (FRAME's `AuthorizeCall`, no optional authorization filled) is no account's transaction and no longer makes a pool reading incomplete. A filled optional authorization the lab does not read is named in the gap. Before, every general transaction made a reading incomplete, so a check that needs a complete pool could refuse while any of them was pending.
31
+ - 7aeac18: Added: the lab's own readers for sponsored writes. `StatementStoreReader` (`@product-lab/ports/chain`) returns the statements a node holds for some topics, each decoded with its proof checked. Chain-papi's `RpcStatementStoreReader` implements it over `statement_subscribeStatement` and verifies Sr25519 signatures. `BulletinReader` returns the bytes stored under a content id, every block checked against its CID; deploy-bulletin's `BulletinContentReader.bytes` implements it. The Statement Store codec (`decodeStatement`, `encodeSignedStatement`, `statementSignatureMaterial`, `statementExpiry`) now lives in `@product-lab/domain`; env-relayless and deploy-bulletin keep their old names as re-exports.
32
+ - 9de21ec: Added `product-lab init`: run it in your app's repository to set the lab up for that app in one step. It reads your package.json and writes:
33
+
34
+ - `lab.config.ts`, which runs your app's own dev script, unchanged, on its usual port (Vite 5173, Next 3000, or `--port`);
35
+ - `lab/integration.ts`, with one action and one assertion to wire to your app's test ids (marked TODO);
36
+ - a first feature in which a new actor opens your app and sees it;
37
+ - the pinned `lab.lock.json`;
38
+ - `.env.example` and `.gitignore` entries, and the `lab` and `lab:test` scripts.
39
+
40
+ Your app is not changed. `init` never overwrites a file without `--force`: it lists what exists and writes nothing. `--ai` also installs the AI kit. Options: `--dir`, `--dev-server "<command>"`, `--port`.
41
+ - 362c95e: Added: `apps.<id>.deployed`, the deployed app instead of a dev server. Declare a DotNS `name` (`example.paseo`) or the web gateway's `url` of it (`https://example.paseo.li`), and optionally a `cid` pin. At the start the name is resolved on the environment's Asset Hub, the content read from its Bulletin with every block checked against its CID, and served on loopback behind the lab's proxy; the product id is the name. When Bulletin does not give the content it is read from the network's IPFS gateway, on by default only on a public network (`ipfsGateway` turns it on or off, or names an `https` gateway); which source answered is always recorded. A name that resolves to another CID than the pin, an environment without Asset Hub or Bulletin, a name of another network, and `deployed` beside `devServer` or `watch` are refused by name before anything starts. The gateway program takes `--ipfs-gateway`, and `RetrievedContent` and the gateway report carry `source`.
42
+ - c464504: product-lab is licensed under the Apache License 2.0. The package's `license` is `Apache-2.0` and it ships the licence text as `LICENSE`; its source files carry a Parity copyright line and an Apache-2.0 SPDX licence line as their header (they said GPL-3.0-or-later before). The example files the AI kit's Notes reference gives you carry the same header.
43
+
44
+ `bulletin-deploy` (GPL-3.0-or-later) is no longer installed with product-lab. It is an optional peer dependency now, needed only to deploy to Bulletin (`BulletinDeployer`, `DotnsRegistrar`, the Notes `deployed-local` launch). If you deploy, add it yourself: `npm install --save-dev bulletin-deploy@0.21.0`. Without it, a deploy fails with `BulletinDeployMissingError`, which names the package and that command. Everything else works without it. `@acala-network/chopsticks` is now declared as an optional peer too (1.5.2), so npm warns when you install a version the Chopsticks adapter would refuse.
45
+ - 974bc23: An agent beside the lab window drives that window's lab. `product-lab mcp` attaches to the lab's open window (its record now carries a token new at every start, file mode 600), so a run an agent starts shows live in the window, and `run_report`, `explain_failure` and `step_evidence` read it; `--own-lab` keeps a lab of its own. `run_scenario` and `run_action` take `where: "lab"` (the default while a window is open) or `"headless"` (a lab of its own beside the window, on the lab's second worker block with a clean chain). New tools `lab_open` (asks first, starts the window, waits until it answers) and `lab_close` (stops only a window `lab_open` started), 33 tools. `lab_describe` and `env_status` say whether a window is open and whether the server drives it. `product-lab dev --own-lab [--record <dir>]` starts a lab that keeps no record (or keeps it elsewhere).
46
+ - 6763eec: A recording keeps what each step changed on the chains: the events of every block produced while the step ran, read once per block, and the acting identity's balance and nonce before and after; anything that could not be read is named.
47
+ - f7e8c31: A live chain console: the lab window's environment view has a "Chain console" that, while open, shows the running environment's blocks and the events that mention your scenario's identities (or every event), newest first, marking blocks that are final and best blocks that were replaced. The MCP server's new `chain_console` tool reads the same (31 tools).
48
+ - ad623f9: New: reusable characters. You declare a kind of person once in `lab.config.ts`, by the sentences that make one: `characters: { "a writer with a published note": { steps: ["{actor} is a new actor", '{actor} publishes the note "Hello"'] } }`. Any scenario can then use it as `Given Grace is a writer with a published note`. The trace names the character as the origin of its calls. `product-lab lint` checks each character in every environment, and `product-lab coverage` and MCP `lab_describe` list them.
49
+ - 281fa96: On a live network a product can run people on the truAPI CLI host: the lab downloads and verifies the official release, never a patched build. Local environments still use the truAPI WASM test host until host-rust-core#1166 ships.
50
+ - 4313931: The truAPI CLI host in a product now follows what its locked official release provides. Once a release takes the lab's local endpoints (host-rust-core#1166), your people can run on it on a local environment as well as on a live network; until then a local environment on it is refused with the missing behaviour and the upstream change named. `product-lab doctor` reports the CLI host's locked release, whether it is cached and what it provides, and `product-lab init` makes it the default host when its release takes local endpoints, otherwise the truAPI WASM test host as before. With today's locked release (0.24.0) nothing changes for you.
51
+ - d9aefbb: New scenario sentences for per-actor conditions: `Ada's network is "slow-3g"` (or `fast-3g`, `slow-wifi`, or a lab's
52
+ own profile from `defineLab({ conditions })`), `Ada goes offline`, `Ada comes back online` and `Ada's device is 4 times
53
+ slower`. Hosts do not apply them yet, so a scenario that uses them is refused before it runs, with the reason.
54
+ - abe6bde: A recording keeps what each identity's app printed while each step ran: console errors, warnings and uncaught script errors, with the errors no `apps.<id>.consoleAllowed` entry matches flagged as unexpected, and every app whose console could not be watched named. `product-lab recordings <id>` shows the counts per step and the messages under `--step`.
55
+ - 1a0c514: `product-lab coverage` lists which of the lab's sentences its feature scenarios use and which none does, read from the same plan `product-lab lint` checks; it starts nothing.
56
+ - 0989bb9: A lab can choose its own RPC per chain for an environment that takes one: in lab.config (`defineLab({ rpc: { <environment>: { chains: { people: "wss://…" }, reason } } })`), in the lab window (each environment's card has a field per chain, remembered for its next starts and clearable), for one start with `product-lab dev --rpc people=wss://… --rpc-reason "…"`, or over MCP with `env_start`'s `rpc` and `rpcReason`. A URL with a token is accepted only through a secret (`fromEnv`), and never shown or written: views, logs, the run manifest and errors show scheme://host. A remote endpoint needs a reason, and over MCP `--allow-public`. The RPC each chain used is recorded with where it came from.
57
+ - 095b3c4: `product-lab demo [<recording>]` turns a feature scenario's recorded video into a short demo: each Gherkin step's action and result at real speed, waiting sped up and labelled (`×8 waiting for finality` when the step waited on the chain), a caption per step, a WebVTT file, an edit manifest and a summary slide in the lab's style. It uses the system's `ffmpeg` (never bundled); without it the video is refused with how to install it, while `--plan` and `--slide-only` still work.
58
+ - 8d9d80e: The `deployed-local` launch works without a session of your own: for an app with a Vite dev server, the lab builds it, deploys it to the environment's Bulletin and DotNS under a fresh name, and serves the deployed bytes to every host. Another dev server is refused by name before anything starts.
59
+ - 65eb4b3: Added: an identity can run in a window of its own emulating a device (`product-lab dev --detach "Ada=Pixel 7"`, or "Open in own window" beside its tile's Device menu), mirrored live in its tile (Chromium only); its steps run there with the same checks and nothing injected into the app. An app that refuses framing can be opened in its own window from its tile. `AppSurface` gains the optional `conditions` and `device`.
60
+ - 4ea48ed: Added: the lab window knows Playwright's named devices ("Pixel 7", "iPad Mini", …) as device profiles, phones first, for device-sized and detached identity windows.
61
+ - 50a5f61: Added: `DeviceProfile` (`@product-lab/domain/devices`), the device an identity's app is shown as (viewport, pixel ratio, mobile, touch, user agent), with `resolveDevice`: an unknown device name is refused with the nearest names.
62
+ - 5ea24d9: The lab window can show an identity's app at a device's size: an app declares `device: "Pixel 7"` (or a whole device profile) in `defineLab({ apps })`, and each tile has a device menu. The app sees that device's CSS viewport, scaled to fit the tile; pixel ratio, touch and the user agent are not emulated in a tile.
63
+ - 9d3ccdc: Engine forks run previewnet-engine v0.7.0, which adds a TURN/STUN relay (eturnal) beside the identity backend. Each lab port block now names the relay's ports, so two forks never share them. eturnal has no macOS build: `bun run setup` installs it with Homebrew when you can write the Homebrew prefix. Without it, a fork runs with the relay off and says so once (peers on your machine still connect directly), and `product-lab doctor` shows the install command as a note. A second relay on one machine is refused with a clear message, because eturnal allows one per machine. Run `bun run setup` once to prepare the new Engine. A saved fork keeps resuming on the Engine it was created with; a new or refreshed fork uses v0.7.0.
64
+ - e55db2d: Engine forks run previewnet-engine v0.8.0 (it was v0.7.0). A bite made with v0.8.0 resets the relay's HRMP and DMP message queues on every network, so a fork bitten while messages were in flight between the chains no longer stops producing blocks with `HRMP head mismatch` or `DMQ head mismatch`. This applies to the bites your own Engine makes (a fork of the deployed network, `--fresh-bite`); Engine's published bundles are bitten by Engine's own nightly job. v0.8.0 also adds `ppn version`. Run `bun run setup` once to prepare the new Engine. A saved fork keeps resuming on the Engine it was created with; a new or refreshed fork uses v0.8.0.
65
+ - 3047a07: The lab window's Environment section now says whether each service answers. A service is an endpoint your environment publishes that is not a chain, such as an identity backend's HTTP API. The lab probes each one from its own process every few seconds (one bounded `HEAD`, the same way it reads the chains' heads), so a row is green with the HTTP status when the service answers and red with the reason when it does not ("connection refused", "no answer within 2000 ms"). An endpoint that is not HTTP says "not checked" in words. Before, every service showed the same grey dot whether it ran or not.
66
+
67
+ The environment picker ("Your environments") no longer repeats the chains' heads as one long line; the Environment section shows each chain's heads in its table. The bottom bar's environment pill shows the environment's whole name: the run's line and the pill's detail give way first, and the name shortens only when the bar has no room left (its tooltip still names it whole).
68
+
69
+ For a lab that composes its own system ports: `SystemPorts.http` (the new `HttpProbe` port, optional) is what the probe goes through; without it, services show as not checked.
70
+ - bac2d4a: Every step that changes something now shows two checks in the lab window: what the lab read back on the chain (where,
71
+ and at which block) and what the person's screen showed. Notes' publish, for example, reads "Verified on Ada's screen and
72
+ on the chain", with Bulletin at its finalized block, the Statement Store, and the author's allowance on People. Each
73
+ step line carries a short "screen ✓ · chain ✓ Bulletin #481" summary. A step that changes nothing says so, instead of
74
+ "no chain check". The lab's own transactions in a step (an XCM stand-in, funding, a root call) are shown apart,
75
+ "Submitted by the lab (not a check)", and never count as its chain check. A new identity's step ("Ada is a new actor") shows its app ready and its place in People's ring.
76
+
77
+ An action reports its read-back through `reading` (as assertions do) and its writes through `write`. An action whose
78
+ change no screen can show declares why (`screenCheck: { none: "the app shows no balance" }`); an empty or vague reason
79
+ is refused. An environment can describe new identities with `actorReadings`.
80
+
81
+ The Transactions view lists every write a run caused: the lab's transactions, those the app sent, those the people's
82
+ hosts and the lab's services sent (from the finalized blocks), and Statement Store statements and stored content
83
+ ("a statement, not a transaction"). "Nothing was written" appears only when nothing was.
84
+ - c646b52: Added: a secret may be a `0x` 64-byte expanded sr25519 secret (the key and its nonce, as some chains' sudo keys are kept); it signs as it is and takes no derivation path. A `0x` secret of any other length than 32 or 64 bytes is refused by its length.
85
+ - caf646c: Added: `product-lab explore`, model-based exploration. An integration declares `invariants` (its own assertion sentences over `{actor}` only); the command runs seeded random scenarios of the lab's actions on a local environment, checks every invariant for every actor after each step, shrinks the first failure to the smallest scenario that fails the same way, writes it as Gherkin to the run directory (`--save <dir>` copies it) and confirms it three times, reporting a flaky one as flaky. An action declares `explore: false` to be left out.
86
+ - 06e5d4b: `product-lab fixture check` gives each fixture a cache key (`--json`: `cacheKey`), the sha256 of its setup, lab.lock.json, declared inputs and any fixture it is built on, so a CI cache can keep a fixture's bundle and rebuild it only when one of them changes.
87
+ - 53e5a22: A fixture can be built on another: declare `from: "<fixture>"` in `defineLab({ fixtures })` and its setup runs on that fixture's saved state, with its identities. Restoring it restores it alone, and a change to the fixture below makes it stale.
88
+ - 3c989b3: Flake detection: `product-lab test --rerun-failures <n>` reruns each failed scenario up to n times from the state it
89
+ started on and reports it flaky (a rerun passed) or failing; `product-lab reproduce <bundle> --reruns <n>` does the same
90
+ for one bundle. Every run is kept in one bundle per scenario, and a flaky result still fails the command.
91
+ - def0fa6: Changed: a resumed Engine fork is ready once the chains your apps require (`requires.chains`, theirs and their integrations') finalize; the fork's other chains only need to answer. The start's readiness line says which chains were waited on and which only answered. Environments receive the list as `EnvironmentStartContext.requiredChains`.
92
+ - 900c796: Changed: a published first-boot seed (engine.json `seed`) is now used on another port block of the same layout: its node launchers are written again for your block. A seed laid out differently is still skipped, with the reason.
93
+ - 04cada6: Changed: the default session creates the identities a scenario names together at the same time (up to 4) and funds them in one `Utility.batch_all` per chain that waits for finality once; a chain without it funds each alone, a batch the chain reverts is sent again identity by identity so the one that fails is named, and identities stay listed in the order their creation started. Added: `FundingBatch` and `fundingProblems` in `@product-lab/core/chain` for a lab's own sessions, and `HostCapabilities.concurrentSessions` (a host that cannot open sessions at the same time declares `false`; truapi-wasm and dot.li do).
94
+ - 0b8fa83: Host chips now show each host in its own colour: CLI blue (`#2f6fec`), WASM violet (`#7a5af8`) and dot.li teal (`#0e7490`). This covers a person's tile pill, their Identities row and New identity's host menu, in both themes and in the lab's own window. A host with no colour is slate. Variants of one adapter share its colour. A lab can give one host its own with `hosts: { <id>: { kind, options, color: "#rrggbb" } }`.
95
+
96
+ Breaking for a lab's own host adapter: `HostAdapterFactory` now requires `color`, a `#rrggbb` value. A factory without one is refused with "needs a color". Add `color` to a factory you pass in `defineLab({ hostFactories })`, and give its `HostProvider` the same `color` so its people's chips use it.
97
+ - e3ea719: Condition sentences now run on the truAPI CLI host (its own connections through per-identity links, its page through routes) and on the WASM test host in its `main-thread` topology. The host contract checks that offline keeps the app's link to its host and cuts everything else; a host without `conditions` is reported unsupported.
98
+ - ee04d02: A failed run keeps its hosts' logs. Before the run's identities close, its recording keeps each host's own log (the host's output, at whatever level it ran), redacted, as `hosts/<person>-<host>.log` beside the recording. Before, the logs went with the session, so a failure inside the host (a lost chain block) left no trace even with `PRODUCT_LAB_HOST_RUST_LOG` set.
99
+
100
+ - `product-lab test`'s last line names the kept files ("Look at: … the host's log: …/hosts/Ada-truapi-cli.log"), and so does the lab window's replay of the run.
101
+ - Each log keeps its last 2 MB (`PRODUCT_LAB_RECORDINGS_HOST_LOG_KB`); a passed run keeps none unless `PRODUCT_LAB_RECORDINGS_HOST_LOGS=always` (`off` keeps none).
102
+ - A host adapter says where its logs are (`HostSession.logs()`); the lab only copies them. The desktop host (`truapi-cli`) names its host process's log; the in-browser host logs into the page, which the recording's console already keeps.
103
+ - 0348723: Host options come from the host adapters. A host adapter declares the switches it offers on its hosts (`hostOptions` on its factory: a name, a plain label, why to turn it on, on/off or a choice, a default, and whether a person may set it for one identity). The lab shows them and applies them; it names none itself:
104
+
105
+ - New identity's host menu shows each host's options under it at the lab's values, and creates the identity with what you set; the identity's row names the options on ("Desktop host · network locked").
106
+ - A scenario names them by label: `Ada is a new actor on the "desktop" host with "network locked"` (several joined by "and"; the host by its id or its plain name).
107
+ - MCP's `identities_create` takes `host` and `hostOptions`; `identities_list` lists every host's options.
108
+ - A lab sets a host's values in `hosts.<id>.options` and can keep old names of a host with some options on as `hosts.<id>.aliases`, so scenarios and saved identities that named them keep working.
109
+ - An option the host's adapter does not declare, one the lab config sets for the host only, or a value it cannot take is refused by name before anything starts.
110
+
111
+ The truAPI CLI host declares "network locked" (`networkLocked`) and "one wallet for all apps of a person" (`oneWalletForAllApps`); the in-browser host declares "network locked". The Notes example now has two hosts, Desktop and In-browser; `truapi-cli-deny` and `truapi-cli-shared` are aliases of the Desktop host with an option on.
112
+
113
+ Fixed: Escape in New identity's host menu, or an identity's menu, closes that menu only. Before, it also closed the lab.
114
+ - e862cf9: `product-lab host verify` checks that an app cannot act as another product: it cannot learn the actor's account in another product, sign with it, or read what another product stored.
115
+ - 6a57dde: `product-lab host verify` checks that an app cannot bypass its host to reach the chain node the host uses: the app's own WebSocket and HTTP requests to the node must be refused and reported, while its chain reads through the host still work. A verification target supplies the chains in its fixture (`chains`); without them the check is reported unsupported. The cross-product account check now runs where the user refuses (a `deny-all` session): a host may give another product's account once the user approves it, so an approve-all answer is recorded as consent. Under `denyByDefault`, the truAPI CLI host's browser context no longer lets the app open the chain or service routes itself; the app reaches its chains through the host.
116
+ - 2814448: New: `product-lab journeys` writes a user walkthrough for each feature scenario tagged `@journey`. Each one is a Markdown page with a screenshot for every step, taken from the identity that acted, plus an index. It is built from the scenario's newest passed recording, and its captions state only what that recording proves: "finalized" only when the chain said final, otherwise "included, not yet final". Any gap in a step's evidence is named. A failed run never replaces a page. Declare `journeys: { out?, tags? }` in `lab.config.ts` and `product-lab test` rewrites the walkthroughs after each run. They go to `.product-lab/journeys` by default.
117
+ - 615afe2: A chain kept between starts (the interactive lab) now runs in real time unless lab.config.ts sets a pace, so it no longer goes stale after a few hours; clean starts (product-lab test, CI) stay fast. Set pace: "fast" to keep a kept chain fast.
118
+ - 9840e59: Read-only environments for live public networks (`liveNetworkEnvironment`): heads and finality followed over the public endpoints, live runtimes compared with a reference, every write refused; public host routes connect only under their recorded `publicRoutes` reason.
119
+ - 8341b23: Added: new identities on a writable public network. `liveNetworkEnvironment({ access: "read-write", newIdentities: { funder, usernamePrefix, fund, maxPerRun } })` lets a scenario's `{actor} is a new actor` onboard a fresh identity through the network's own identity backend (the truAPI CLI with its network preset) and fund it from the `funder` secret's account, after checking the host, the network's genesis, the per-session cap and the funder's balance; each identity made is recorded. `truapiCliProvisioner({ network: { preset } })` onboards on a public network without the local routing.
120
+ - 7e9ac3f: Labs can declare pre-onboarded actors by secret name (`defineLab({ actors: { Ada: preOnboarded("ada-wallet") } })`), and an environment on a public network declares itself with `offer.public` (a reason; optionally the network, read-only or read-write access, and a finality timeout).
121
+ - c9cd3aa: `product-lab load` runs many new identities at once on the environment and measures them from the load's recording: finalized transactions per second, submission to inclusion and to finality (p50, p95, max), failures grouped by error, peak concurrency, chain lag and machine load. `--ramp 2,4,8,16` runs several loads in turn. A machine guard stops a load starting steps when the machine is overloaded and says so.
122
+ - f12d029: A recording keeps machine and chain health on its timeline: the machine's load and free memory and each chain's heads every 2 seconds. `product-lab recordings <id>` names, per step, an overloaded machine, low memory, a chain that produced no block for 12 seconds and finality more than 10 blocks behind, with the numbers under `--step`.
123
+ - 837a125: The package now ships compiled JavaScript (ES modules) with `.d.ts` type declarations instead of TypeScript sources,
124
+ and no source maps. Every export resolves to a declaration for TypeScript and a module for Node, so plain `node`
125
+ imports the package without tsx and TypeScript projects type-check against it with any module resolution, including
126
+ NodeNext. The `product-lab` command and your lab's own TypeScript files work as before. The lab window now loads its
127
+ modules from the installed package (its browser imports were left unresolved before). The `test-support` subpath
128
+ is gone: it held test doubles for this repository's own tests and was never meant for your code.
129
+ - 53672f8: The lab window's replay of a feature scenario has "Download bundle" (the run as one `.plbundle` file) and "Reproduce"
130
+ (rebuild the run here and see whether it fails the same way; it asks before replacing the running environment's state
131
+ and refuses, with every reason, what `product-lab reproduce` refuses).
132
+ - 2d815b0: A replay now shows on the stage: a tile per identity with its recorded frame before or after the selected step, a banner over the tiles naming the step (with a before/after switch and Back to live), and a step scrubber under them with the saved-screenshot controls. The lab panel keeps its normal width and lists the recorded steps with who acted. The live app stays mounted and untouched underneath.
133
+ - 3b325f0: The chain adapter now runs on polkadot-api 3.2.1, which ships the fix for a client that never initializes after a runtime upgrade: a lab no longer needs a patched polkadot-api client to follow a chain whose runtime it upgraded. Your app and the product SDK keep their own polkadot-api 2.x; nothing of polkadot-api crosses between an app and the lab.
134
+
135
+ What changes for a lab:
136
+
137
+ - `toPolkadotSigner` is replaced by `toTxCreator` (from `@parity/product-lab/chain-papi`), which turns a `KeySigner`, a polkadot-api 3.x signer or a polkadot-api 2.x signer into polkadot-api 3.x's `TxCreator`. Give `PapiTransactionSubmitter` a `KeySigner` (`{ scheme, publicKey, sign }`) rather than a `getPolkadotSigner(...)` result.
138
+ - Calls you build from a `PapiChainAccess` API are polkadot-api 3.x transactions: `createSubmitAndWatch`, `createAndSubmit` and `create` take a signer from `toTxCreator`; `getEstimatedFees` takes a signer too (polkadot-api's `getFakeTxCreator(address)` for an estimate). `trackTransaction` reads 3.x events (`inBestBlock`, `notInBestBlock`, `created`).
139
+ - A typed API needs descriptors generated by the polkadot-api 3.x CLI; descriptors your app generated with 2.x have the same values but 2.x types.
140
+ - New: `withSignedExtensions(creator, publicKey, seen)`, to read the nonce, era and genesis a transaction is signed with.
141
+ - 8b19ee4: A local copy of Paseo for any app in one line of lab.config.ts: `environments: { ...paseoCopy() }` from `@product-lab/composition` gives "Local copy of Paseo", Full or Light, saved on this machine and resumed on every start (`previewnetCopy()` for Previewnet). Options: `id`, `label`, `portBase` (else `PRODUCT_LAB_FORK_PORT_BASE`, else 42000-42999). The window's greyed "Local copy of a live network" row names this line.
142
+ - e9abc79: The permission audit: `{actor}'s app asked its host at most:` (columns `request` and `times`, in the host's wording, for example `sign transaction`) fails when the actor's apps asked their hosts for a request more often than allowed, or for one the table does not name, and refuses to run where the host keeps no record. A recording keeps what each step's app asked its host, and `product-lab recordings <id>` shows it per step.
143
+ - 866831b: Pre-onboarded actors open with the wallet in their secret: a scenario that names one binds that existing account (never created, funded or deleted), `identities_create` takes `preOnboarded`, and the lab window lists them and shows a banner on a public network. On a public network the default session creates and funds no identity.
144
+ - ddd3d53: The truAPI CLI host runs on a public network with its own endpoints when every route is public, and an environment that mixes endpoints on this machine with public ones is refused before any host or session starts, naming both.
145
+ - 9d652cc: An environment declared read-only public (`offer.public` without `access: "read-write"`) starts with its chains only: no identity is opened, feature runs on it are refused before they start, and it is never reset.
146
+ - d448660: On a public network the lab sizes chain waits and UI-against-chain checks for its finality and says so, refuses work that needs the development authority naming the network, and `withholdCapabilities` rehearses such a target on a local environment.
147
+ - 2bcc5f8: Race hunting: `product-lab test --race <runs>` runs the selection once per seed, waiting before each step an identity takes after another's (and in run-together groups), so actors interleave differently; one actor's steps never change order. Failing seeds are printed; `--race-seed` replays one, recordings keep the seeds and waits, and `product-lab reproduce` applies them again.
148
+ - 6f297d5: Run recordings can include a video of each identity's page. Turn it on with `product-lab test --video` (or `PRODUCT_LAB_RECORDINGS_VIDEO=on`). Each scenario's recording then lists the videos of the pages its steps acted in, with the time each page opened, so you can find any step in them. Videos are kept in the recordings directory's `videos/`, are removed with the last recording that uses them, and are not redacted. The new `product-lab report comment <run>` writes a suite run's pull request comment: the verdict, then each scenario's result, its time and where it starts in each video.
149
+ - 194e336: Channels, a minimum version, and release checks after publishing.
150
+
151
+ - **Channels.** `latest` holds releases and `next` holds prereleases only. Every green `main` is published under the moving `canary` tag, and manual cuts go under the moving `dev` tag; dated tags are no longer created. An installed version follows its channel's tag in the daily check and in `npx product-lab upgrade` (`--to canary` and `--to dev` work).
152
+ - **Minimum version.** A release can set `productLab.minimumVersion` in its `package.json`. The daily check reads it from `latest`. Below that floor, every command except `upgrade` and `ai` refuses to run and names `npx product-lab upgrade`. Setting `PRODUCT_LAB_ALLOW_BELOW_MINIMUM=1` runs the old version anyway. The floor never applies in CI.
153
+ - **After a release.** `release.yml` runs `npx @parity/product-lab@<version> --help` against what npm serves. It keeps one `release-failure` issue, which closes itself on the next success. It announces each version once in Matrix, but only after a person adds `MATRIX_TOKEN` and `MATRIX_ROOM`.
154
+ - **Docs.** The release README documents the RC-first procedure for breaking releases.
155
+ - 3a53efc: The lab onboards new people on the local dev chain (`fast`) from released packages, so an app that writes through Bulletin or the Statement Store now runs in a product. Each new person's People member key comes from `@parity/truapi-host`'s `ringVrfMember`, derived as truAPI 0.23 hosts do: under the label the released truAPI host derives under (the default of `environments.fast.personProduct`), with the suffix of the network the environment copies (`<label>.paseo` on Paseo next-v2, `<label>.testnet` on Previewnet). Their ring is read on People; the truAPI CLI host is no longer involved. The new option `environments.fast.onboarding` selects this: `"released"` is the default everywhere, and `npx --no-install product-lab config` shows it with its reason and the line that changes it. `"truapi-cli"` keeps the truAPI CLI host's `alloc-check`. In a product it is refused by name (host-rust-core#1166), never silently replaced: `product-lab check` lists `fast` as unable to start because of it, and a start refuses at the first new person. A step's People check now names the reader that ran.
156
+ - cd6ca43: New people get 24-word phrases (32 bytes of entropy) instead of 12-word ones. The released truAPI WASM test host page accepts only 32-byte entropy, and a product is now served that page byte for byte: the lab no longer rewrites its entropy check outside product-lab's own checkout. On the WASM test host, a person made from a shorter phrase (an old saved person, a fixture, or a 12-word live phrase) is refused by name. The refusal names the upstream change it waits for. Saved people, fixtures and live phrases keep their own entropy.
157
+ - 12793b8: A scenario that makes root calls can run from the lab window. Run asks first, in the window: what a root call does (the
158
+ chain's Root origin, through its own Sudo pallet), which calls the lab allows, that the environment is a local copy with
159
+ a development sudo key, and that a mainnet, a public network or a chain the lab did not start is still refused.
160
+ Allowed, this session's root calls are confirmed (until a reset, switch or stop) and the scenario runs; refused, nothing
161
+ runs. The lab's snapshot says whether this session's root calls are confirmed (`rootCalls: { allowed, confirmed }`).
162
+ - 756d7c8: Added: root calls. `defineLab({ rootCalls: { <environment>: { key, allow, signing? } } })` lets an action dispatch an allowed call with the chain's Root origin through its own Sudo pallet (`ActionContext.rootCall(chain, call, { reason })`). It is refused before anything is signed on a mainnet (always), on a chain the lab neither started nor knows as a public testnet, on a public testnet the environment declares read-only (the default), for a call that carries other calls or is off the allow-list, with a key that is not the chain's `Sudo.Key`, and until the run is confirmed: `product-lab test --root-calls`, MCP `root_calls_allow` or `LabRuntime.allowRootCalls`; a reset revokes the confirmation. The inner call's result is checked, and every root call is journalled under `.product-lab/root-calls/`.
163
+ - a2a021a: `product-lab bundle <recording>` writes a recorded feature scenario as one run bundle (`.plbundle`): its recording, the feature file as it ran, the lab lock, the run manifest and the fixture it started from; `product-lab bundle open <file>` shows a bundle read-only and says whether it could be reproduced here, naming every reason it could not. An identity whose key comes from a lab secret is never bundled.
164
+ - 3aff0f9: The run bundle format: one `.plbundle` file (a zstd-compressed tar, its index `bundle.json` first) holding a run's recordings, the scenario as it ran, the versions and the state it started on, with every file's sha256; and the rule that decides whether it can be reproduced here, naming every reason it cannot.
165
+ - 9021ea0: `product-lab reproduce <bundle.plbundle>` rebuilds a bundled failing run (the fixture it started from, or a fresh
166
+ environment), runs the same scenario and says whether it fails the same way: at the same step with the same error,
167
+ block numbers, hashes and ids aside. A bundle from another platform with native state, other app or lab source, a
168
+ changed feature file, a public network or unsaved state is refused with every reason before anything starts;
169
+ `--against-current` reruns it as a recheck against your code. A bundle holding both runs is written next to it.
170
+ - 6cccfef: `product-lab test --devices "Pixel 7,Desktop"` runs the selected scenarios once per device profile (or on the lab's `devices`), each identity's app emulating that device's viewport, pixel ratio, touch and user agent, with each device's own visual baselines beside the feature (`__baselines__/<feature>/<scenario>/<device>/`). An unknown device name is refused before anything runs, naming the nearest devices.
171
+ - 01d59e6: On a read-write public network each literal string a feature step writes carries the run's token, so data from different runs never collides; checks in the same scenario read the scoped value back.
172
+ - bf8c488: Scenarios can say where they run, and the lab window shows it. Tag a scenario `@environment:<id>` (one of the lab's
173
+ environments; several tags mean any of them), `@live-network` (only on a live network) or `@root-calls` (only where
174
+ `defineLab({ rootCalls })` declares root calls); an action that makes root calls says so with
175
+ `defineAction({ rootCalls: true })`. The lab works out every declared environment each scenario fits, running or not.
176
+
177
+ In the lab window a scenario tied to environments carries a chip naming them. A live-only scenario is greyed out, never
178
+ hidden, and its tooltip says what runs it. Run on a scenario for another local environment first warns what the switch
179
+ costs (the identities it stops, what the environment it leaves keeps, the time a start takes), then switches as the
180
+ run's first step ("Switch to paseo-fork"), then runs it. `product-lab test`, MCP and the HTTP API never switch: a run
181
+ whose scenarios fit none of its environment is refused, naming where they run, and the others are left out. `product-lab
182
+ lint` reports an `@environment:<id>` the lab does not declare.
183
+
184
+ The lab window no longer shows "Cannot set properties of null (setting 'hidden')" in its status line while an
185
+ environment starts or switches.
186
+ - 60ea596: Added: a sentence can hold optional text in parentheses, as in Cucumber expressions. Write `\(` and `\)` for literal parentheses. An optional `(s)` or `(es)` after the word that follows an `{int}` or `{count}` is that number's plural: `{actor}'s list shows {int} note(s)` matches "Ada's list shows 1 note" and "Ada's list shows 3 notes". The builder and generated steps write the plural the number needs. `product-lab lint` warns, under the rule `wording`, when a step's plural disagrees with its number ("shows 1 notes"), and names the wording to write. The step still runs.
187
+ - dbbb37c: Added: several hosts in one scenario. `{actor} is a new actor on the "<host>" host` (or a `host` column in `these actors exist:`) puts an actor on another of the lab's declared hosts, such as Ada on the truAPI CLI host and Grace on the truAPI WASM test host in one environment. The default session prepares each host the first time it is used and says, for every declared host, whether an actor can be put on it here and why not (`LabEnvironment.hosts()`); a scenario naming a host it cannot use is refused before it runs with that reason. Host adapter factories may implement `routingProblem(options, routes)`. dot.li is not offered per actor yet (its sessions are not signed in).
188
+ - 3a8979a: Optional checks after each feature step: a screenshot compared with a baseline kept beside the feature (`@visual`), and an accessibility scan with axe-core (`@accessibility`), both off unless a scenario's tag or the lab's `checks` turns them on. `PRODUCT_LAB_BASELINES=strict` fails a step that has no baseline (for CI); `update` rewrites baselines. axe-core is an unmodified MPL-2.0 dependency, loaded only when a scan runs.
189
+ - dbdc1f1: The lab window's recording replay shows each step's evidence: its chain changes, its app's console errors and warnings, machine and chain health findings, and what its apps asked their hosts for; a recording made without one of these says so.
190
+ - 24d1915: Speed limits per step: a recorded step is compared with its median over earlier passed runs of the same scenario, and named slower when it takes more than twice as long and at least 2 seconds more.
191
+ - 6b96f28: Fixed: a suite row could pass while scenarios it planned never ran. A suite planned every `.feature` file in the lab, but a row's run selected only what the lab's Cucumber configuration names. Now each row plans exactly what its run selects: the configuration's paths, read with the row's host, or the lab's declared `features`, which the run then gets as its paths. The configuration's tags apply to the plan too. After the run, every planned scenario the run did not report is listed on the row (`unreported`) with the reason when known: stopped by the suite's budget or an interrupt, or not run after the first failure under fail-fast. A planned scenario that went missing without a reason fails the row. A scenario skipped as not for the running environment now records why in the run's report, not only on the console. Notes skips its `@deny-by-default` scenarios on hosts other than the WASM test host through a scenario condition instead of a Cucumber tag filter, so its suite rows report them as skipped, with the reason.
192
+ - 5cc98e8: `product-lab` (every `bun run lab`) in an interactive terminal now shows the running lab full screen and keeps it
193
+ up to date: the chains and their latest blocks, the people with their host and where each came from, and the latest
194
+ run step by step with each step's screen and chain checks and what it wrote. Keys open screens: `c` chains (switch
195
+ or reset, after asking), `p` people (make a person on a host you pick, or remove one after asking), `r` the run,
196
+ `o` the lab window, `?` help, `q` stop the lab. Pipes, `CI`, `TERM=dumb` and the new `--plain` flag keep the plain
197
+ lines. The package now depends on `ink` 8.0.0 and `react` 19.3.0 (loaded only when the app shows).
198
+ - ed37285: New `product-lab test --mutate` tests your tests. It changes one expected value in each assertion step of a scenario (a quoted string, or a number) and runs the scenario, which must now fail at that step. A scenario that still passes has an assertion that never checked the value, and the command exits 1. Checks for absence ("does not include", "at most") are left unchanged, with the reason, since changing their value does not make them fail. Use `--plan` to list the changes without running anything and `--max <n>` to cap the runs. The report is written as `mutations.md` and `mutations.json`.
199
+ - dcf6e41: `these steps run together:` now takes a doc string. Each line is a part, and the `|` lines under a part are that part's own table, so a step with a data table can run alongside others. A part can also be a composed step, such as a character ("Grace is a writer with a published note"): its steps run in order as one lane beside the other parts, and the people it introduces are created before the group starts. When two parts hold the same declared resource they still run one after the other, and the call's record now says why ("ran in turn after …: both hold …"). `product-lab lint` reports each part's problem at its own line of the file, including a table row written before any step. It also warns when every part belongs to one person, since those run one after the other. The builder saves a group whose block has its own table in this form. It keeps a group with a composed part exactly as written.
200
+ - c92a34a: The lab window has a Tools page (Lab menu > Tools, key T). It runs the tools that find problems nobody wrote a scenario for: race hunting, explore, what if, test the tests, load, hostile apps, the nightly suite and bisect. For each tool it shows what the tool is for in one sentence and what it needs, checked now, and gives a start form with the CLI's options and defaults. It shows progress while the tool runs, then a report in words with links to each run's replay, plus "Copy the command" for the same run from a terminal. A tool whose needs are not met (for example what if on an environment that cannot save its state) says why and does not start. The page also lists the lab's characters, where each one is used and which saved states hold one ready. Actions and Extensions are now tabs of the same page. Notes' count check reads "The list shows 1 note" instead of "1 notes".
201
+ - 4709419: The lab window's Tools page can watch race hunting and test the tests: "Show the people" offers Watch, where each run's people act in the window's tiles one run after another, or Background, through the lab server as before. Other tabs run tools in the background only.
202
+
203
+ Times now use wall-clock time where they did not: a Tools page run's date and its folder name (they read 1 January 1970 before), its link to each run's replay, and the start and finish times of a suite run record (`product-lab test --suite`) and a bisect report.
204
+ - f76653f: Added: a nightly matrix row can run a newer host release than the locked one (backlog 27). Name the host component as a row's candidate (`versions: { "host:truapi-cli": "latest-release" }`) and declare its release source in `versions.sources`. The policy need not select it. Before the row runs, the host adapter decides how to run that release. If the published release shows every capability the lab's patches add, the row runs it as published ("official"). Otherwise, if the lab's patches apply to the release's commit, they are built on it locally ("patched"). The build is cached by the commit and patch set and never published. Otherwise the row is unsupported, naming the patch and files that no longer apply; an unsupported row never counts as passing. The suite record gives each such row's `hostRoute` (the route, tag, reason and patch set) and `timings.hostRouteMs`, and the row's combination says how its host ran. A host adapter offers this through the optional `HostAdapterFactory.routeRelease`; the truAPI CLI adapter implements it. Notes' nightly matrix is now each host × its locked or latest release × People's locked or latest runtime: eight rows. `product-lab test --suite nightly --row <id>` runs only the rows named.
205
+ - 7bd70bb: product-lab now says when it changed and when a newer version is out.
206
+
207
+ - **What's new after an upgrade.** The package ships its `CHANGELOG.md`. On the first use of a newer version in a repository, the CLI prints what changed since the version that repository last used, breaking changes first, on stderr. The lab window shows the same in a card that can be dismissed. The MCP server adds it to its instructions and to `lab_describe` (`release.whatsNew`).
208
+ - **Newer version check.** The long-running commands ask the npm registry for the dist-tags at most once a day, with a 3-second limit, without making any command wait. A newer version is printed on a terminal at most once a day, and also appears in the lab window and in `lab_describe` (`release.available`).
209
+ - **When the check is off.** In CI there is no check and no notice. `PRODUCT_LAB_NO_UPDATE_CHECK=1` or `NO_UPDATE_NOTIFIER=1` turns off the registry check. A 404 or being offline prints nothing.
210
+ - **`npx product-lab upgrade [--to <version|tag>] [--dry-run] [--force]`.** It installs another version with the project's package manager, keeping the dependency in the same field of the `package.json` that declares it. It refuses to run on a dirty git tree unless `--force` is given. It then runs the new version's `ai init` and `fetch`, and prints what is new.
211
+ - **Release check.** A packed release now needs `CHANGELOG.md` with an entry for its version. Snapshots are exempt.
212
+ - bc3b0a3: Added: `product-lab what-if <feature>`, "what if" branches. The feature's Background runs once and its state is saved; each scenario (each Examples row of an outline) then runs from that state, which is restored after it, with the lab's invariants and any `--probe` assertions checked at its end. The report compares the branches (result, calls, checks, what differs, an outline row's values) and gives each branch's time beside the trunk's one-time cost. It needs an environment that saves and restores its state (a relay-less named workspace or a saved local fork) and is refused elsewhere, saying so. Each branch begins with the Background's outputs, and each end check with its branch's (`BeginScenarioRequest.outputs` lets any runner begin a scenario with outputs recorded before it); the identities the run created are removed when it ends.
213
+ - 84ea96b: With `PRODUCT_LAB_RECORDINGS_VIDEO=on`, `product-lab dev` records the lab window and each detached identity window as video into the recordings' `videos/` folder, and the recordings of the window's runs name those videos, so each step can be found in them. The lab window's video names no identity; a detached window's names its identity. `--video <dir>` still records the lab window where it says, and a recording then says why that video is not named.
214
+ - e9fe6fb: The package now depends on zod 4.6.7 instead of zod 3.25.76, so `npm audit` no longer reports GHSA-mrhx-c7xc-m3w5 (memory exhaustion when an oversized array fails validation) for products that install it. The optional Chopsticks peer (`@acala-network/chopsticks` 1.5.2) still brings its own zod 3, so a product that installs it still sees the advisory, from Chopsticks.
215
+
216
+ What changes for you:
217
+
218
+ - **Types.** The zod schemas the package exports (`topologyOptionsSchema`, `topologySchemas`, each adapter's options schema, and a factory's `options`) are zod 4 schemas now. They infer the same input and output types as before, but code that uses zod 3's API on them, such as `.merge`, `._def`, `ZodEffects` or the five-parameter `ZodObject`, needs zod 4's form. `OptionsIssue.path` (and the path of a `ParsingSchema` issue) is now `readonly PropertyKey[]`, as zod 4 reports it. The doc comments on schema keys no longer appear in editor hovers.
219
+ - **Messages.** Errors the lab builds from a schema problem keep their form (`Invalid <adapter> options:` with `- <path>: <problem>` lines), and the messages the lab writes itself are unchanged. zod's own messages are now in zod 4's words. For example, `port: Number must be greater than or equal to 1024` is now `port: Too small: expected number to be >=1024`, and `relay: Required` is now `relay: Invalid input: expected object, received undefined`. Two messages say less than before:
220
+ - An unknown chain under a chain-keyed option is now reported on the option, as `runtimes: Unrecognized key: "mars"`. Before, it was reported on the key and listed the known chains.
221
+ - A value that matches none of an option's forms now reads `Invalid input`. For example, `runtimes.people: Invalid input` for a runtime that gives both `wasm` and `spec`, where zod 3 named the extra key.
222
+ - **Validation.** Options that take a URL (Chopsticks upstreams, for example) now drop spaces at the start and end of the value. Before, they kept them. zod 4 is also stricter about some formats:
223
+ - a UUID must carry a valid RFC version and variant;
224
+ - a date-time must include seconds;
225
+ - an integer must be a safe integer.
226
+ The lab writes all three itself (`randomUUID()`, `toISOString()`).
227
+ - **MCP.** In `tools/list`, a tool's integer arguments now declare `maximum: 9007199254740991`, and its map arguments declare string keys (`propertyNames`). The tools take the same arguments as before.
228
+
229
+ ### Patch Changes
230
+
231
+ - cb987f2: A local network no longer fails to start or resume because one read of the process table missed a node that was still running: the lab reads the table again before it reports a node as exited.
232
+ - 31455bf: The default session now keeps the ports it opens on its own (the app's proxy and dev server, the closed routes, the origin gates) inside your lab's block: the hundred ports around `defineLab({ port })`, clear of every port the lab declares (its own port, the environment's chains, the hosts' ports, an app's fixed dev-server port). Before, without `PRODUCT_LAB_SESSION_PORTS`, it took free ports from 1024, outside the block, where labs running side by side could collide.
233
+
234
+ `PRODUCT_LAB_SESSION_PORTS=<from>-<to>` still overrides it. A lab that declares no `port` uses 40000-40999 and says so in the run's output. The first line of a run's progress names the range and why.
235
+ - 665eabd: The fast local environment (`people-fast` and the other relay-less topologies) no longer fails every publish between 00:00 and about 02:00 UTC. A fresh chain's clock starts about two hours behind the wall clock, and the truAPI host asks for a person's statement allowance by the wall clock's day, so on the chain's previous day signing failed with `UnableToSign`. A start in that window now runs the chain with fast blocks until its clock passes midnight (about 45 seconds), then with its own block time, and says so in the environment's notices.
236
+ - cf5e306: A feature run whose selection matches no scenario (a mistyped scenario name, tags or lines no scenario has) now fails in the lab window and over MCP too, not only in `product-lab test`, with a message naming what was selected and in which files: `No scenario matched the name "…" in features/…; refusing an empty success`. Before, the lab window reported such a run as passed.
237
+ - 9716766: A run's host-bypass evidence now names the chain behind each connection it saw (People, Bulletin, …), also when the WASM test host reached it through one of the lab's chain gates, whose port alone named nothing.
238
+ - db9c6a6: In a replay, the stage counts the recording's people, and the bottom bar and the step ribbon each stay on one line: the run's or step's title ends with an ellipsis, and "Replay" and "Back to live" stay whole. The timeline marks the Gherkin steps that ran no lab run ("Ada is a new actor"). A run that cannot be reproduced here says so in one line ("Reproduce: not available. Why?") that opens on the reasons, with Download bundle inside. The evidence names whose screen each check read when that is not the step's actor, and gives counts and durations in plain words ("0 notes", "60 s"). When a step fails, the recording also keeps a frame of every other person in the run, since the check may have read their screen. The Notes example's store check says what it found in plain words: "not announced after 60 s: Ada's index holds 0 notes".
239
+
240
+ A recording names its people as their runs began, so a test runner that closes them before the recording is written no longer leaves ids in place of names. A step under a second says its time in ms.
241
+
242
+ What the lab could not see around a host is listed one gap a row, under what it saw.
243
+
244
+ A frame that an app replaces while it is being imaged (a check that reloads the app) is looked up again and imaged once more, so the step keeps its after-frame.
245
+
246
+ The section of what the lab did on a person's screen says so ("What the lab did on Ada's screen"), apart from the check's own card. A step with no after-frame shows its before-frame and says so, with After off. The timeline says the selected step's span in the run, of the run's length, on one line ("0:06–0:13 of 0:13"). The Notes store check names the notes the author's index holds ("holds 1 note, "Written", not "Planted"").
247
+
248
+ The host-bypass audit reads as words in Evidence, Past runs and the recording drawer: one verdict line with why one click away, explained extrinsics as a count per kind, one row per extrinsic the lab could not attribute or read in full, people by name with their host, and the record under Raw. A step's audit is one line unless the step has something of its own.
249
+
250
+ A feature run's audit is said once in Evidence, its lab runs' audits combined with each step by its Gherkin number.
251
+
252
+ Extrinsics with the same reason are one row naming their blocks by step, which opens on each.
253
+ - 2fb53bd: A recording's replay now shows its evidence on the stage beside the frames, not in the side drawer. It opens with where the run failed and which side disagreed. For the selected step it shows each side's Expected and Found, what the person's screen did, and what the app said. It also shows the host lane: what the app asked its host, the traffic around the host, and what landed on the chain. Each part says whether it was seen, not observed on this host, or not recorded. The drawer lists every Gherkin step, the "is a new actor" ones included.
254
+
255
+ Steps are numbered the same way everywhere in the replay, by their Gherkin step: the drawer, the ribbon, the dots under the frames and a frame's note ("while step 4 ran"). On a window 1200 px wide or narrower, the evidence sits above the frames and none of it is hidden behind them. When the host lane is incomplete because the lab could not read a finalized extrinsic in full, it says so.
256
+ - 1834e3b: A feature scenario's recording now keeps every Gherkin step with its times, the "is a new actor" steps included, and starts where the scenario's first step did. Before, it began at the first step that ran a lab run and held no time for the steps before it.
257
+ - 7f2bf09: Run recordings and the `{actor}'s app asked its host at most:` check now see what each person's app asked their host for, also in a lab that writes its own `sessions()`: the lab reads the record through the session's host sessions when the lab gives none.
258
+ - 8505767: The MCP server exits only once its last answers have been sent, so a long answer at the end of a session is no longer cut.
259
+ - c5e89c9: A recording's replay now says, before you click, whether its run can be reproduced, in plain words: for example "Reproduce elsewhere: not available for this run. It started on your saved Previewnet fork, whose starting state was not saved with it. Replay works here." Reproduce is off when it cannot; Download bundle stays. The same answer is `runBundles().reproducibility()`.
260
+ - 47cbc9b: A check can now record what each side read (a person's screen, or a chain or store the lab reads itself), with what it expected and what it found, through `reading()` on its context. The readings are kept with the step whether the check passes or fails, so a failed step says which side disagreed.
261
+ - 75241eb: Recording frames from the lab window are taken once the person's tile holds still, so a frame no longer shows the wrong part of the window when another person's tile appears. A tile that never stops moving gives no frame, and the recording says why.
262
+ - 2def202: A run recorded from the lab window keeps what each step did on screen: every click, fill and screen read with its target, timing and outcome, by step. Headless runs keep none, and their recordings say so.
263
+ - 0376393: The lab window's grid shows each person's whole app instead of cutting it. A tile of at least 480×280 shows its app at 100%, as before. A smaller tile lays the app out at that minimum, in the tile's shape, and scales it down to fit. The grid picks the column count that shows apps largest. No tile gets narrower than 220 px, so a tile's header always shows its person's name and pills. A scaled tile's header says the scale ("56%"). Below 30%, tiles keep that size and the stage scrolls. Device tiles fit by their device's viewport under the same rule. On a narrow window, the grid is now columns rather than a side-scrolling row. Steps that target the app's document by keyboard now also work in a scaled tile.
264
+ - 76870ff: The HTML report's host-bypass blocks are closed by default. Each block's summary says the result in the lab window's
265
+ words ("Host bypass: none found"), then why, what it found and each person's app and traffic, with the full raw lines
266
+ inside. A contract deployed by the platform integration now reports its two transactions to its step, so a clean
267
+ deploy is counted as the lab's own setup instead of reading "Host bypass: warning".
268
+ - df4e875: Notes example: when the truAPI host loses the Bulletin block its upload went into ("Invalid block hash"), an end-to-end
269
+ publish by hand now says so as the host's cause, with the block read from the Bulletin node (finalized, holding the
270
+ note). The step still fails.
271
+ - 67ea3bc: Added: restoring an Engine network snapshot reclaims the restored network's stale lock when the lab can prove the restored state predates it: the lock's holder process is gone, it took the lock after the snapshot was saved, and the lock guarded exactly that network. Snapshots now record when their state froze (`savedAt`). Each reclaim is logged as a notice. Any other stale lock still needs the operator's `PRODUCT_LAB_RECLAIM_STALE_LOCK=1`. So an `@isolated` scenario can recover from a run killed during an identity onboarding without a manual reclaim (backlog 17h). In the lab's product integration example, the saved local fork passes its locks to its snapshots.
272
+ - 9954808: Notes example: on the fast local chain, the lab's stand-in for XCM (which gives a new person room on Bulletin) now acts
273
+ only on the chain it started with. A lab left running after its chain stopped no longer answers the next chain started
274
+ on the same ports, so a passed run no longer shows the lab's own Bulletin allowance as a failed, stale transaction.
275
+ - 7db9e30: When a step's transaction was signed at a block that a reorg then retracted, "did it land" answers not included at once, and the failed step's explanation says so by name: a reorg retracted the block it was signed at, which is why a node marks such a transaction invalid. A step's evidence names the signing block with `signedAt: { hash, number }` next to its `mortality`, or `mortality.birthHash`.
276
+ - 075414e: On a local copy of Paseo or Previewnet, the Bulletin node now authors the way Asset Hub and People do (slot-based), so its newest block is replaced less often (no more forked blocks; about 2.5 replacements every ten minutes instead of 6 to 10). A product that signs at the newest block is told "Extrinsic marked as invalid" less often, but still each time a replacement removes the block it signed at (2.6 % of stores in an hour on a local Paseo copy). engine.json `bulletinAuthoring: "lookahead"` brings back the old way. Each parachain node now also logs its transaction pool: the counts of invalid transactions by default, and each one named with its reason when engine.json says `txpoolLog: "trace"`. Forks saved before this change get both on their next start.
277
+ - da065ca: The lab's own process does less work while a run goes on: secret redaction skips text that cannot hold a recovery phrase, and a host's product and allowance accounts are derived once per identity instead of at every step. What the lab shows and returns is unchanged.
278
+ - e285250: A long run no longer stands still between its steps. At each step's start and end, the check for apps that reach a chain without their host read the environment's node routes again for every browser request the run had made so far, so the pause grew with the run, to about 20 seconds late in a long session. It now reads them once per session and checks each address once, with the same findings.
279
+ - 5e2a407: A failed fixture save no longer leaves a saved fixture behind: a running state holding two people with one name is refused before anything is saved, and an earlier saved fixture stays as it was. `fixture run --resave` and `fixture save` now refuse before running the setup when the running state already holds the people that setup makes, naming them and the command that starts clean (`fixture save <name> --fresh`).
280
+ - 9f86b24: `product-lab host verify` no longer reports chainReconnect as blocked on a busy machine where the host is slow to start the chain follow: the probe waits for the follow to initialise on its own bound, and judges the reconnect by when the follow ended against when the link was cut.
281
+ - f608ccc: A local fork whose relay chain keeps finalizing 16 blocks late after a session change (seen right after `fixture save --fresh` reset the light fork, where it made new actors' onboarding time out) is now restarted once before the lab uses it, and the start's notice says "finality pinned at the approval threshold after a session change; restarted once" with the numbers. If it happens again after that restart, the start fails with that message instead of restarting again.
282
+ - f8b246b: A recording now says what held a step back. Each health sample also has the CPUs' idle share, the lab's own event-loop delay and how busy that loop was, and on macOS the memory pressure. `product-lab recordings <id>` and the lab window's step evidence say "the machine was the limit" when the CPUs were under 10 % idle or memory pressure was at warn or critical, and "the lab's own loop was the limit" when the loop was busy 90 % of the time or more than 1 second late, each with the numbers. A high load with idle CPUs, or low free memory under normal pressure, is no longer called an overloaded machine. Older recordings read as before.
283
+ - 34e9d44: A fixture bundle saved on one port block can now be imported on another when its environment keeps files of its own beside the network (as an identity pool or workspace record with ports). Importing moves those files' ports and paths with the rest of the network, instead of refusing with "names the old ports and is not a file adoption rewrites".
284
+ - 0f97c72: A fixture bundle now imports into a lab whatever its state folder is called. The bundle records where its state was saved, and an import puts each identity directory at the same place under the running lab's state folder, instead of refusing because the folder names differ. If the directories point at more than one running state folder, the import is refused and names them. Bundles exported earlier import as before.
285
+ - 7533eab: The MCP `recording_show` tool no longer loses a long recording's step health to its answer size. It now leads with `healthSummary`: the steps where the machine was the limit, those where the lab's own loop was, and those with any health finding. With `step`, `health` holds that step's numbers and findings only, as `frames` does. `step_evidence` now says that a step's health is in the run's recording, through `recording_show` with the step.
286
+ - 44f053f: The MCP tool `step_evidence` now gives the step's machine and chain health, with its findings, under `health`. While the run is still recorded, the health comes from the samples taken so far (`live: true`). After the run, it comes from the recording the run was written to (`recording` names it). For a feature run, `health` has one entry for each lab step the Gherkin step ran. When there is no health to give, `none` says why: a hook, a step that has not started, or a feature run in its own process. The runtime offers the same read as `runStepHealth`.
287
+ - aa4001b: The truAPI CLI host now starts when the app checkout is one git cannot read, such as a copy whose git link points nowhere. Before, it stopped with "git status --porcelain exited 128". The app's commit only labels the run's evidence, so `launch.json` now says `appCommitUnknown`, naming the checkout and git's reason, in place of `appCommit` and `appDirty`.
288
+ - b5dd553: A lab can now ask a host whether it can do something, rather than assume it from the host's kind. A scenario condition can call `probeHost(hostId, request)`. It asks the host to try the capability, and the host answers `holds`, `lacks` or `not-probed`, saying what it found and how long it took. The first capability is `bulletin-read`: does the host return content another account stored on Bulletin?
289
+
290
+ The truAPI WASM test host answers this by asking its own package's preimage lookup, run in Node rather than in the host page, for content the lab names. Its "can't read Bulletin" label now follows that answer:
291
+ - the label goes away once the host reads Bulletin;
292
+ - if the host still can't, the label gives the probe's reason;
293
+ - if it hasn't been probed, the label keeps today's text and adds "not probed: …" with why.
294
+
295
+ `@parity/truapi-host` 0.23.0 still can't read Bulletin.
296
+ - 0095e8e: The lab now also hides a recovery phrase written with commas, semicolons, pipes or hyphens between its words, or as a JSON list of words, wherever it appears in what the lab shows or returns. Before, only a phrase with spaces between its words, or one under a secret-named key, was hidden.
297
+ - f300e5a: Faster: a relay-less environment keeps the development chain specs it builds and reuses them on the next start while the node binary, runtime and genesis edits are the same, and builds the specs of several chains at once. A start saves about 2 seconds per chain.
298
+ - dfc4b51: Fixed: a chain check such as "the remark is on the finalized chain" could miss an event that had landed and time out. polkadot-api releases a finalized block as soon as a newer one is finalized, and the check skipped any block it could not read that way, never coming back to it. Faster local chains made this happen every time (seen at 250 ms blocks). Storage reads at an older block now go to the node when polkadot-api has released the block. A scan that still cannot read a block (the node pruned it) never counts that block as "no event": it reads it again while waiting, and a timeout or an absence names the unread blocks.
299
+ - 9ac61be: A lab's secrets no longer reach the terminal or the MCP server's stderr when a lab or environment provider prints them: console lines (from `product-lab` commands, `product-lab test` runs and the MCP server) and the lab's logger now show a secret, such as an RPC URL with its token, as `[redacted]`. A URL secret no longer causes `wss:` to be redacted in every other URL.
300
+ - 6b99c2e: An RPC URL with a user, password, query or fragment on a live network's route (for example a secret RPC URL whose token is in its query) is refused with what is wrong, "people route carries credentials, a query or a fragment (a token?)", instead of a misleading "must be a loopback" message. A token in a path segment works and is kept as a secret.
301
+ - ef1bf16: Fixed: test runs no longer print "RpcError: Method not found" stacks. A chain read at a block that polkadot-api had already released made it try the node's `archive_v1` methods, which local nodes do not offer, and log each refusal. On a node that does not list `archive_v1_storage`, the lab now reads that block's state from the node directly, as it already did after the refusal. Results are unchanged (backlog 90).
302
+ - aee36b5: The locally built truAPI CLI host carries a backport of host-rust-core #1017 (merged upstream, not yet released): it looks a preimage up on the Bulletin node, so a host process reads content another process stored. The locked patch set is now `449d5b8fa884`; `bun run setup` builds it once.
303
+ - 6a31655: The AI kit's Notes reference (`product-lab-integration`) now shows a product that writes the sponsored way: notes stored on Bulletin and announced in People's Statement Store under the person's allowances, checked by the lab's own store reader, with actors made people before they write and no funding.
304
+ - 817085b: A long TMPDIR no longer breaks a local Paseo fork or the truAPI CLI host. Relay validators bind their PVF workers' sockets in TMPDIR, and the CLI host binds its frame socket there; a socket path of 104 bytes or more on macOS (108 on Linux) cannot be bound, so the fork's relay finality stopped a few blocks after its start and the host exited before it was ready. When the inherited TMPDIR is too long, the fork's nodes and each host process now get a short one of their own under /tmp, removed when they stop, and the start says why.
305
+ - 8d5e5b6: Added `checkAfterStateChange` to the Engine environment: wrap an environment's own network check after an `@isolated` save or restore with it. A restored Engine fork's relay chain can stop finalizing for about as long as one readiness check waits, while its validators restart their approval voting. While every chain still answers and only finality has not moved, the network is checked again, up to three times. A chain that does not answer, or any other failure, still fails at once (backlog 93).
306
+ - 53242a4: `product-lab init` runs a Vite app's dev script with `--host 127.0.0.1 --port <port> --strictPort`, so the lab reaches it where `localhost` resolves to IPv6 alone (Vite 8 on macOS). A dev server that answers only on `[::1]` is now named so when it does not answer on 127.0.0.1, with the flag that fixes it.
307
+
308
+ The `.env.example` that `product-lab init` writes also names `PRODUCT_LAB_SESSION_PORTS`, the range for the app's proxy and closed routes, so every port the lab opens can stay in one block.
309
+ - c78a4dd: When a step fails, the lab now also checks the Statement Stores for any statement the step wrote, the same way it checks Bulletin for content a transaction stored. When the step begins, the lab reads every Statement Store it can reach. It reads them again when it checks the failed step. A new statement signed by the identity's account, or by an account its host uses for the app, is the step's write. If the step sent no transaction, it still wrote something, and `afterFailure` says so (for example "people's Statement Store holds a statement signed by 0x…, written since the step began"). The answer is also in the reconciliation's `stores`, on the step's chain card, and in `transaction_landed`, which asks the store again. If a store cannot be read the second time, a step that seemed to send nothing is reported as unknown instead.
310
+
311
+ Some hosts do not name their accounts. For those, a step can report its write itself with `context.report`:
312
+ - `{ type: "statement", chain, topics, signer? }` for a statement;
313
+ - `{ type: "preimage", cid }` for content stored on Bulletin.
314
+
315
+ Each report counts as one of the step's submissions. If the step fails, the lab looks for exactly that write. A report with malformed topics fails the step and says why.
316
+ - 8a35372: When a step fails after one of its transactions stored content on Bulletin, the lab now asks Bulletin whether it holds that content, the way it asks the chain about the transaction. The lab reads the content id from the store's own `TransactionStorage.Stored` event; apps declare nothing. The answer is in the failed step's `afterFailure` words (for example "Bulletin holds the content it stored: bafk…"), in its reconciliation's new `stores` field, in a row on the step's chain card in the lab window, and in the MCP tool `transaction_landed`. Each answer is `present`, `missing` (with the reason) or `unread` (when the lab has no reader for the environment's stores, or Bulletin did not answer within 10 seconds).
317
+ - 2166fbb: `platformIntegration({ fundedSigner: true })`: with an existing funded signer, a contract can be deployed on a writable live network (no development authority needed); the platform's chain connector takes the public network's reason (`publicReason`) for its endpoints there.
318
+ - 29afab0: A live network environment can be writable (`liveNetworkEnvironment({ access: "read-write" })`): scenarios write with the lab's pre-onboarded identities only, and nothing resets. On such a network only free-text inputs get the run's token; a choice input keeps its declared option (it was refused before).
319
+ - 1381d8b: `@product-lab/composition` exports `preOnboardedIdentity` and `preOnboardedViews`, so a lab with its own `sessions()` can open existing accounts (pre-onboarded actors) the way the default session does.
320
+ - 699672a: Keep an aborted action's own error in an optional abortDetail result field beside the timeout or cancellation reason. Timed-out generated steps show their final diagnostics in the terminal and reports after cleanup, without changing outcomes, retries or reconciliation.
321
+ - 56e4176: Show separate abort diagnostics in MCP run reports and step evidence, and beside failed steps in the panel and terminal UI. Failure explanations continue to use the original error.
322
+ - 979d2ca: A failed environment cleanup no longer loses the run's report. Cucumber ends the process on an `AfterAll` error before it writes `cucumber.json`, so a cleanup failure after the last scenario used to leave no scenario results ("cucumber.json is not JSON: Unexpected end of JSON input"). The cleanup failure is now recorded beside the report, the run still fails, and it appears after the scenarios as its own failed result, "Environment cleanup", with its whole cause tree, in the panel and in the HTML and JUnit reports.
323
+ - 4479ec5: Documentation in the package only. The package README has a "Configure" section with an example for `app.deployed.resolveOn` (resolve the deployed app's DotNS name on another Asset Hub RPC, read-only) and `environments.fast.personProduct` (the person product label new people's member keys are derived under; default: the label the released truAPI host derives under, which `product-lab config` shows), and the setup skill lists both. The README's "With an AI assistant" says the AI kit, with its skills and two reference labs, ships under `entrypoints/cli/ai-kit/` and that `product-lab ai init` copies it into a project, and that allowing root calls and opening the lab window need a confirmation token too. The setup and debug skills, the two reference labs' notes and the composition, CLI and truAPI CLI host READMEs no longer say the truAPI CLI host is refused on a product's local environment: the locked 0.26.0 release takes the lab's local endpoints, as the README already said (the reference labs still run on the truAPI WASM test host). The integration skill names `HeadlessAppSurface`'s import (`@parity/product-lab/browser-playwright`) and `defaultSessionPage`'s (`@parity/product-lab/composition`), and the AGENTS.md section's MCP tool list adds `root_calls_allow`, `lab_open` and `lab_close`.
324
+ - b5a0793: The AI kit and the MCP guide tell an agent to read `lab_describe`'s `resolvedConfig` before changing `lab.config.ts`, and to propose each change as the entry's `change` line.
325
+ - 6309550: The terminal app's `a` opens Claude Code or Codex beside the lab, in the lab's folder where its MCP config attaches the agent to the running lab: in a tmux split inside tmux, else in a new tab or window of the same terminal (Terminal, iTerm, Ghostty, WezTerm, kitty), else right there, with the app paused and the lab still running until the agent exits. An agent that is not installed is greyed with the line that installs it. The lab window's Tools page lists the same agents, with Copy the command, and Open where the terminal allows it.
326
+ - c4db30a: New people on the local dev chain can be derived under your own person product: set `environments: { fast: { personProduct: "<label>" } }` in `lab.config.ts` (the DotNS label alone; the lab adds each network's suffix). Unset, nothing changes: new people get the same member keys as before. The lab refuses a value that is not a label (a full name such as `example.paseo`, or upper case) before it starts, and refuses `personProduct` together with `onboarding: "truapi-cli"`, whose CLI host derives under its own label. `product-lab config` lists the value as `environments.fast.personProduct`. The package's documentation examples now use placeholder names such as `example.paseo`.
327
+ - f1de62e: The AI kit teaches the new config and layout: `lab.config.ts` with only what is about the product, `lab/steps` (`defineSteps`), `lab/features`, `product-lab config`, negative controls by tags with failure reasons, and modes.
328
+ - b7ca6b4: The AI kit now covers what the lab does today. `product-lab ai init` installs a sixth skill, `product-lab-app`: `devServer` and its `updates` for Vite, Next webpack, Next Turbopack, webpack-dev-server/Rspack and `{ hold }`, plus `watch`, `ready`, `account`, `hostBypass`, framing and what each start notice means. It also installs a generated reference of the minimal lab (`product-lab-setup/references/minimal-lab.md`).
329
+
330
+ Setup, integration, test-ids, scenario and debug were rewritten against the code: the default session, `fetch`/`doctor`/`host build`, `chainEventAssertion`, the bundled run, in-process breakpoints and the generic sentences. The MCP registration now passes `PRODUCT_LAB_CACHE_DIR`, `PRODUCT_LAB_SESSION_PORTS` and `PRODUCT_LAB_HOST`.
331
+
332
+ After a package upgrade, an older kit is reported in three places: every CLI command prints one stderr line, the MCP server adds it to its instructions, and `lab_describe` returns an `aiKit` field, each naming `npx product-lab ai init`. `product-lab doctor` also names the setup commands for a consumer repository.
333
+ - 940f0c3: An app whose `package.json` sits beside `lab.config.ts` (no `app/` folder) now has its dev server read from that `package.json` and started in that folder. Before, the lab looked only in `app/`, reported no dev server, then failed to start the default one in a folder that did not exist. A lab whose `app/` folder has no `package.json` of its own (one install at the lab's root) keeps its dev server in `app/`, read from the root's `package.json` and run with the root's binary.
334
+ - 2fba6b2: Step evidence and recordings keep everything an app prints, at every level, not only errors and warnings: `step_evidence` shows what the identities' apps printed while the step ran (identity, app, time, redacted) and names apps whose console cannot be watched; a recording's `console.log` keeps the whole run.
335
+ - 6553783: The host-bypass audit reads People's resource claims. A truAPI host registers a statement allowance and claims Bulletin storage for a person with general extrinsics authorized by `AsResources`, an anonymous ring proof that no account signs. These used to read "unexplained · decoded partial", so every Notes run's audit was "incomplete". The chain adapter now decodes them completely: the claim, its ring position and the account it is for. When that account is one the session's host derives for its app (`session.resourceAccounts()`, `//allowance//statement-store//<product>` and `//allowance//bulletin//<product>`), the audit credits the claim to that app as the host's own submission. A claim for any other account stays unexplained, with one line saying why. A call the runtime authorized itself (FRAME's `AuthorizeCall`, such as a ring-maintenance call) that lands in a finalized block during a run is now read as the chain's origin, not as an unexplained, partly decoded extrinsic.
336
+ - 10ec59e: When the lab window that `product-lab dev` follows from another terminal closes, the terminal app says the window closed and the lab it followed has ended, instead of "the lab did not start".
337
+ - 30c2113: Releases and canary snapshots are published without a build provenance attestation while the source repository is private; attestations return when it is public.
338
+ - c6e421c: At a narrow panel, chains, settings and the view switch wrap instead of squeezing or running past the edge; chips
339
+ without a tooltip wrap rather than being cut; chains read as their names ("People"); a replay's steps no longer show
340
+ the action's internal id.
341
+ - d817e8a: `product-lab test` beside this lab's open window (`bun run lab`) runs in the window's lab. The run goes in the window's process on the environment it runs, so it shows there live, while its output streams in the terminal and its report is written as usual. A flag that needs a lab of its own (`--workers`, `--race`, `--suite`, `--keep`, `--cucumber`, …) is refused there with what to do. `--own-lab` runs a lab of its own as before.
342
+ - 6084aa0: A second `bun run lab` in a terminal, while the lab's window runs in another process, opens the terminal app on that window's lab instead of refusing. It shows the window's chains, people and runs; scenarios started from it run in the window. Leaving it (q) keeps the window running. With plain lines (`--plain`, CI) it still refuses, naming the window.
343
+ - ebd9b31: The MCP server no longer starts a second lab beside the one you have open. Each lab window records the lab it serves,
344
+ with its address, in `.product-lab/running` while it runs. MCP `env_start` refuses while another process serves the
345
+ same lab's window: "The lab window at http://127.0.0.1:13250 is already running this lab (Notes, process 1234):
346
+ starting here would start a second lab on the same kept chain and ports. Use that window, or stop it (Ctrl-C in its
347
+ terminal) and start again." A run tool with no run yet now says the server runs a lab of its own and that the lab
348
+ window's runs are kept as recordings, listed by the `recordings` tool and opened with `recording_show`.
349
+ - fcb808a: Visual baselines are kept per host kind (`__baselines__/<feature>/<scenario>/<host kind>/`), so a scenario whose screen a host shapes (for example, an app the WASM test host cannot reload) passes when run again on each host.
350
+ - 24e57bb: When a lab declares several hosts, the Run setup lets you choose the host for each new person a scenario creates. The choices are the lab's declared hosts, with its default preselected. A saved person keeps their host, shown read-only. A host the scenario itself names is shown locked as "set by the scenario". The run creates each new person on the chosen host. API callers can do the same with `{ new: { host } }` as an actor's binding. An undeclared host is refused, and the error names the declared ones.
351
+ - ce8e89c: An app opened through the lab's proxy gets its host bridge on the first load even when its dev server is slow to answer an unknown path (a cold Next dev server compiling its not-found page): that check now starts as soon as the bridge is bound and has its own deadline, so a page no longer loads without its host and shows the app's "open it in a host" screen.
352
+ - 5769e44: A local fork no longer starts from a half-downloaded state bundle. The lab downloads (or bites) the bundle beside the one in use, checks that every snapshot is there at its recorded size and decompresses to its end, and only then moves it into place; a download stopped part way, by a crash, Ctrl-C or a full disk, is discarded and fetched again on the next start. A bundle already in your cache is checked once on its next start (a few seconds) instead of being downloaded again. Two starts from one Engine workspace no longer download into the same folder: the second waits for the first.
353
+ - 4085c15: The bottom bar counts scenarios the way the library's "Can run here" filter does: "41 of 45 can run here" instead of
354
+ "45 scenarios" beside a different number. "Can run here" now leaves out scenarios tied to another environment or a live
355
+ network, which the running environment cannot run without a switch.
356
+ - 2501f03: Fixed: recordings of `product-lab test` runs, and the replay, run bundles and journey docs built from them, no longer lose the final screens. A scenario's last steps can end in milliseconds, and its apps used to close while their screenshots were still being taken. Screenshots in flight now finish before a scenario removes its identities and before the environment stops. The wait is bounded by the capture limit, 5 s by default. A screenshot that doesn't finish in time is recorded as failed, with the reason.
357
+ - c0d0589: The fast local chain now makes a block every 2 s on People and every 4 s on Bulletin (both were 500 ms), so both clocks run 6 times the wall clock (were 24 and 48) and a session lasts hours before the chain's day ends. The lab window's environment card and the terminal app's config screen say how long is left ("The chain's day ends in 40 min"); at the crossing the lab stops runs with the same words and Reset gives a new chain. `blockTime: { people: 12000, bulletin: 24000 }` in `relaylessTopology({ … })` keeps real time: slower, never runs out.
358
+ - bf5a1a9: Fixed: under a deny-by-default host (`denyByDefault: true` on the truAPI CLI or WASM host), an app can no longer reach the chain node behind its host. The lab now puts an origin gate in front of each local node: the host's own connections pass, and an app's page, frame or worker connection to the node is refused and listed in the session's blocked requests. Before, an app could open the node's WebSocket directly (the page under the WASM host, a dedicated worker under the CLI host). A node's own `--rpc-cors` cannot stop this, because Substrate's RPC server accepts a WebSocket from any origin. Other hosts, and sessions without `denyByDefault`, are routed as before.
359
+ - afd0a7d: A local chain's pace is now plainly one of two modes: `pace: "fast"` (the default: very fast runs; the chain's clock
360
+ runs about 6x, so a kept chain goes stale after a few hours and must be replaced) or `pace: "real-time"` in
361
+ `relaylessTopology({ … })` (stable: the chain's clock follows the wall clock, so a kept chain never goes stale; runs are
362
+ slower). `blockTime` stays the expert's override. The lab window's card, the Keep switch, the terminal app's Chains and
363
+ config screens and the docs say it in the same words. A start on a kept chain that went stale now asks in a terminal
364
+ "Replace it with a new chain? The people kept with it are discarded. [y/N]"; without a terminal it names
365
+ `bun run lab --clean` (from a package script) or `product-lab --clean`, and the lab window offers "Replace the kept chain".
366
+ - 86b1579: `product-lab check` now says a local environment cannot start when its default host is the truAPI CLI host. A product runs that host's official release on a live network only, so the check names the reason and the fix: `defaultHost: "truapi-wasm"` in lab.config.ts, or use a live network.
367
+ - f0af14c: `product-lab check` now warns when a feature file's `@negative-control` tag and the `negativeControls` entries in `lab.config.ts` disagree, with the same words as the lab window's warning. A declared file without the tag runs as a normal scenario. A tagged file without an entry gets the line to add.
368
+ - 3d53be8: A run that fails as the suite ends gets its chain check: stopping the environment now waits for the lab's checks after failed steps (all together, at most 60 s in all) instead of answering "The lab could not check the chain: No environment is running". A check still running at that limit is stopped and says so ("The lab could not check the chain (stopped) …").
369
+ - bd0d319: Keep Chopsticks forks on their configured ports when the parent environment sets PORT. Also isolate child processes from inherited PORTS and PORT_LAST settings.
370
+ - 2bdd04d: A Chopsticks environment now refuses to start when the installed Chopsticks lacks the fixes for V5 general extrinsics (AcalaNetwork/chopsticks #1078 and #1081). Without them nothing a truAPI 0.23 host publishes is ever included. `product-lab check` and suite plans report it before anything starts. Use a relay-less environment, or a Chopsticks release that includes both fixes.
371
+ - ab091d3: Nothing changes in what the package does: its CLI's own test script now runs through `tests/run-tests.mjs`, which can
372
+ run one share of the test files (`CLI_TEST_SHARD`), so CI splits the CLI's tests over three runners. The architecture
373
+ rules leave CI's shards for the whole-repo job, which now keeps Nx's cache like the other jobs.
374
+ - 6624fb7: Add an opt-in truAPI CLI attest provisioner for caller-chosen wallets on local environments, with independent public-key binding, private state and optional process confinement. Existing auto provisioning and its defaults remain unchanged.
375
+ - 5711368: Make doctor report missing Playwright Chromium with its install command, and make init's next steps use the app's package manager.
376
+ - b52e979: The truAPI CLI host's official release is now 0.24.0 (it was 0.20.0), and release archives signed under the repository's new name, trinity-user-agents, are verified.
377
+ - 999f1a2: The lab window writes every time of day 24-hour ("18:11:05"), whatever the machine's clock: run history, the evidence
378
+ header, navigation activity, saved fixtures' expiry, identities' creation times and transaction tooltips no longer
379
+ show "06:11 AM" beside 24-hour times elsewhere.
380
+ - bfcd8d5: Stopping a lab with a person on the in-browser host (truapi-wasm) no longer takes a minute more. Closing the lab window used to move each such person's session back to the host's own browser, then wait up to 60 s for the app there, only for the lab to stop it right after. A lab that is stopping now leaves every session where it is, and `product-lab dev` starts stopping the lab before it closes the window. On people-fast, close and reopen fell from 69.5 s to 12.5 s.
381
+ - 657b747: A product config's second and later step sets (`app.steps: [mine, checks]`) run: they are offered beside the app, so their sentences are available wherever their own requirements hold. Before, every one of them was refused ("Integration … is used by no app of this lab").
382
+ - 5340a4f: The lab can carry an identity's connections to a local endpoint through a conditioned link (`NodeConditionedLinks`): delayed and slowed while throttled, cut while offline, every byte in order.
383
+ - 0e8c6cd: A conditioned page socket keeps its messages in order and is still decided by the browser context's own socket routes (a network guard, an endpoint bridge).
384
+ - 3de8f88: Per-identity conditions work end to end on the truAPI CLI host: a conditioned link names a local node as the request's host (a Substrate node refuses any other), the app's bridge route is no longer rotated, and the running environment passes its conditions on. An identity a scenario did not create for conditions is refused by name before the run; the truAPI CLI host takes `conditionLinks: "always"` to make every identity conditionable.
385
+ - c7014da: A step set's `scenarioConditions` hook also reads whether the lab window placed the people in its tiles (`placed`) and the session's hosts (`hosts`: kind, default, options), under any session, including the lab's default one. The conditions are read again when the window places or releases the people.
386
+ - de51d34: Groundwork for per-actor conditions (slow network, offline, slower device per actor): the condition values and
387
+ built-in profiles (`slow-3g`, `fast-3g`, `slow-wifi`). Nothing applies them yet; scenarios behave as before.
388
+ - ca9c084: Config contract: several step sets (`app.steps` as a list), `app.requires` for services and capabilities, `app.navigation`, top-level `secrets`, `live.<network>.people`, and `advanced` for what the shape does not cover yet.
389
+ - 42dc1bc: Config contract: an app may name its contracts (`app.contracts`), a live network the person who deploys them (`deployContractsAs`), and live environments are `live-<network>` (`liveEnvironmentId`).
390
+ - cf048fc: Contract for the new lab config (types only): `defineLab` accepts the product config shape (`app`, `chains`, `environments`, `live`, `hosts`, `modes`, `ports`), `defineSteps` names `defineIntegration`, and failures carry a reason (`fail(reason, message)`, `LabFailure`, the built-in reasons and the negative-control tags). Nothing behind them yet.
391
+ - f0d4e96: The lab window's Config view shows the lab's config while no environment runs (before the first start or after Stop), and its empty state when the loader gives none.
392
+ - 86eca98: The lab window: the Chain console heading no longer shows a second arrow-like icon beside its expand arrow; Replay has its own icon (history) instead of Rerun's circular arrow, and both say on hover what they do (Replay shows the recording and sends nothing; Rerun runs again, live).
393
+ - 7ae0427: Deploying to Bulletin from a product now says what to add when bulletin-deploy 0.21.0 cannot load. Installed next to this package, its host-papp lands on polkadot-api 3, which lacks the `polkadot-api/signer` path it imports. The deployer and `loadBulletinDeploy` now refuse before anything runs and name the two `overrides` your `package.json` needs. Before, Node failed with `ERR_PACKAGE_PATH_NOT_EXPORTED`. The deploy and Chopsticks READMEs say what a product gets without the lab's own patches and overrides.
394
+ - 1f90acd: A negative control that failed as intended now says so: the lab's answer (in the terminal and in MCP's `explain_failure`)
395
+ reads "The lab caught it: …", naming the step and reason, instead of a failure's advice such as "Infrastructure, not the
396
+ product". In the lab window, its failed step shows "The lab caught it" in the control's colour, and the run card's "Why?"
397
+ says the same. When the host check itself fails, it is now explained as the host check (the app sent something outside its
398
+ host), not as an unreachable environment.
399
+ - f4d5f92: `product-lab test --negative-control --dry-run` plans each control and judges none ("N of M planned (dry run: none judged)"). Before, a dry run reported every control as not valid, because nothing failed.
400
+ - 8f3e230: Negative controls are declared with tags alone. Tag a scenario (or a feature) `@negative-control`, in any folder: it must fail at its last step from that step's own check, never for a timeout or another infrastructure reason. Add `@fails-at-step-N` when it must fail at an earlier step, and `@fails-with:<reason>` for the one reason that counts: one of the lab's checks (`screen-mismatch`, `not-on-chain`, `host-bypass`, …), a chain error by its own name (`Resources.LongTermStorageAllocationFailed`), or a reason your steps declare and throw with `fail(reason, message)`. Every failure now carries its reason, and a control that fails at the right step for another one says "failed for another reason: <reason> (<message>)". The verdict shows the failure's reason and message under it in `product-lab test`, the lab window and MCP (`run_report`'s `failure`, `explain_failure`'s hint). `product-lab test --negative-control` with no path and MCP `run_negative_controls` with no feature run every tagged control: a tagged feature whole, a tagged scenario alone, `@runs-with:keep,rebuild-fixtures` adding those flags. A refusal before the scenario ran counts only when named: `@fails-with:unsupported-here` or `@fails-with:scenario-refused` (a wrong table, actor, reference or input). `defineLab({ negativeControls })` is read only during the migration, with a warning naming the tags that replace it.
401
+ - e24adf8: The lab window never hides a negative control: on a chain or host it does not apply to, it stays in the Scenarios
402
+ library, greyed, with the reason on its Run button, instead of waiting behind "Show N not for this chain".
403
+ - 525b2d5: The Notes example's `e2e:controls` now starts each negative control with the flags its `@runs-with:` tags ask for (`--keep`, `--rebuild-fixtures`), as `product-lab test --negative-control` does. Before, the shared-restore fixture control ran without `--keep` and failed in its Before hook, which does not count as a valid negative result.
404
+ - 1566b43: `runtime.createActor({ host })` creates an identity on one of the hosts your lab declares, and `snapshot().hosts` lists them with the default and why one is unavailable. An undeclared host is refused, naming the declared ones, and an unavailable one with its reason; nothing is created.
405
+ - eb1c9b1: In the lab window's Watch mode, an identity's cursor and its name are now drawn above the highlight ring around the element it acts on, instead of under it. The lab's menus, dialogs and toasts still cover the cursor.
406
+ - bf5bccb: The lab window's Environment section now sits above the Run, Scenarios and Recordings tabs on every tab: its heading (Environment, with the arrow) opens and closes it, and it stays open or closed as you left it, across tabs and reloads. It replaces the summary card shown there before. Going to Environment from the Lab menu opens the section without leaving your tab.
407
+ - b527761: No change to how the lab runs. Its process adapter can now list the live processes of one tree it recorded, by their recorded identity, so the lab's own fork checks kill only the dashboard they started and never another run's (backlog 235).
408
+ - 5040bbf: A product config's `defaultEnvironment` may name an environment it brings under `advanced.environments`, as its type already allowed: the lab no longer refuses it when it loads.
409
+ - 41abc21: The default session keeps people between starts: with "Keep chain and people between starts" on and the truAPI CLI host, the people a lab made on a kept chain open again at its next start with their own wallets, and every person can be stopped, started again (same account) and deleted.
410
+ - bbfb1f8: The lab window's "Finalized chain state" for a person under the lab's default session shows their funds on every connected chain, read at its finalized head, or why they could not be read.
411
+ - 819c647: The default session reads each new person where its people are persons: their screen (the app ready with their account) and People (their member key in a ring, and the lab's own read of `Members.Members`), shown as the checks of the step that made them.
412
+ - 386bd8e: A demo's slide and captions take the lab window's new colours (the Polkadot pink accent and the new greys), as they
413
+ did the old ones.
414
+ - c232635: `apps.<id>.deployed` now serves the build your users get. Hosts open a DotNS name's app as `app.<name>` first and use the name's own contenthash only when `app.<name>` has none; the lab read only the name's own, so for a name whose releases go to `app.<name>` it served an older build. The deployed app now resolves `app.<name>` first and falls back to the name, as hosts do. `app.<name>` counts as absent when it has no record, an empty contenthash, or the Asset Hub has no DotNS content resolver; a contenthash that is not an IPFS CID is refused, as hosts refuse it, never replaced by the name's own. A name where neither has a contenthash is refused naming both.
415
+
416
+ The start's progress and the gateway's line say which name was served (`app.<name>, the app of <name>`), and the gateway report's `name` is that name. A `cid` pin is accepted when it is `app.<name>`'s CID or the name's own, and that build is served; the line says which one the pin matched. Before, a pin of `app.<name>`'s build was refused unless you declared `app.<name>` itself as the name, which also made it the product id. The product id now stays `name`, as hosts keep it, so the accounts and the page's origin are the ones your users get.
417
+ - 16b3944: A deployed app can resolve its DotNS name on another Asset Hub than the environment's, read-only:
418
+ `apps.<id>.deployed.resolveOn: "wss://…"`. Use it when a local copy of a network predates the name's current record
419
+ (a name re-pointed after the copy's state was taken). The copy then serves the build the public record points at, and
420
+ `cid` pins it. Only the name's resolution moves: the content, the chains, the host, the accounts and every write stay
421
+ on the environment. The resolution uses a read-only connection that sends only DotNS storage reads and refuses any
422
+ other method before it is sent. The gateway's report records the read as public contact (`publicRead`: the endpoint,
423
+ the names read, the one served, the block number and hash, the pin and every method sent), and the served line names
424
+ the endpoint and the block. Nothing changes without `resolveOn`. The gateway program takes the read as
425
+ `--resolve-asset-hub <url>`, and a public one also needs `--allow-public-resolve` (`--allow-public` does not grant it).
426
+ A pin the record does not match is now refused naming the Asset Hub it was read on. The package exports nothing new.
427
+ - 2410dcb: When you open the lab in its own window, the bottom bar goes with it: Lab, the environment, the run's line, Watch, Background and Replay, and Run, Pause and Stop sit at the bottom of the lab's window in two rows. The people's window becomes the stage only, and its chip says "Lab detached" with the run's progress. Docking back brings the bar home.
428
+ - 2a3ab4a: A detached person's window (`--detach`, or Detach in the lab window) now behaves as you would expect:
429
+
430
+ - A desktop person's window is a normal browser window. It opens at the device's size, and the app follows the window when you resize it, instead of staying at a fixed width.
431
+ - A phone or tablet is shown inside its device frame, centred and scaled to fit the window. The app inside keeps the device's own viewport, pixel ratio, touch and user agent. The lab window's live mirror shows the app alone, and a step's screenshot is the app's whole screen without the frame, taken without the window flickering or losing the device's pixel ratio. The window's video is what the person saw, frame included.
432
+ - An app that refuses to be shown in a frame opens at the device's exact size without the frame. The lab window then says "shown without the device frame: the app refuses framing".
433
+ - b6d7032: The lab's own window is styled again in every browser setup: it copies the lab window's styles instead of fetching the stylesheets again, so a window whose stylesheet requests fail no longer shows the panel as raw, unstyled HTML.
434
+ - 03a49a4: Replacing a kept chain (Reset, the terminal's y, the lab window's "Replace the kept chain") now names the chain it
435
+ discarded (`provenance.workspace.replaced`), so a lab can discard the people it kept with it. The Notes example removes
436
+ them once the new chain is up and says whom; identities the lab did not make stay.
437
+ - 6fdf10d: The AI kit's skills and the Notes reference describe the new lab shape: one `lab.config.ts` with only what is about your product (`app.steps`, `app.chains`), negative controls by tags with every reason the lab knows (including `screen-unstable` and `scenario-refused`), `product-lab lint` flagging unknown `@fails-with:` reasons, and modes (`test --mode`) instead of suites. The integration skill also covers `companions` (apps your app opens in the same wallet) and `devices`.
438
+ - 5b8eca3: The AI kit's integration skill documents `advancedWhy` (why each `advanced` field is needed, shown by `product-lab config`), and its Notes tour shows Notes' real product config.
439
+ - f0869ff: The docs and the AI kit's debug skill now say where a product can run each host. The truAPI WASM test host runs on every environment. The truAPI CLI host's official release (0.24.0) runs on a live network only. The docs also note that the default session runs the `deployed-local` launch, and that the package ships only the patches its code reads at run time.
440
+ - de019d6: `product-lab doctor` now checks which Engine build your cache holds (`cache:engine`). Before, a cache that held another build passed the doctor and then refused when a local copy of a network started. This happened with caches copied from an older setup that held the retired patched Engine. The check reads `engine-build.json` under `<cache>/engine` (`~/.cache/product-lab`, or `PRODUCT_LAB_CACHE_DIR`) and compares it with the stock Engine release this version pins. If the cache holds another build, the doctor names both builds and the fix: run `npx --no-install product-lab fetch --environment paseo-copy` to prepare the pinned release in that cache, or point `PRODUCT_LAB_CACHE_DIR` at a cache that already has it. Like the `tooling:engine` line, it fails when the copy is asked for (it is your default environment, or you pass `--environment paseo-copy`); otherwise it is a note, because that copy, or another lab that shares the cache, would still refuse to start. A build you chose with `fetch --engine-ref` counts as another build: copies still start from it, but the doctor names it, and fails (exit 1) when that copy is asked for, as your default environment or with `--environment`. A cache with no Engine gets no line, as before. The doctor only reads; it never rebuilds or deletes anything.
441
+ - 3e5ec2a: `product-lab doctor` now also says what fits this machine: the local copy of a network as Full or Light, how many people at once on each environment, and whether the shared cache is set up.
442
+ - bde2d4a: dot.li sessions now keep the dot.li page's console, redacted, from before the first navigation. This covers the page and its frames, and dot.li's own diagnostics (protocol mode, chain backend, init-failed) are picked out. You can read it with `session.console()` and `host.consoleLog()`. The dot.li verify targets write it to `console.json` and print the diagnostics after the run.
443
+ - f19dfd3: dot.li now pins dotli-community `577ddd50e`, the current main, which uses truAPI 0.23 as live paseo.li does. Before, it pinned `d91104b`, which used truAPI 0.13. `product-lab host build --host dotli` builds with npm when the checkout carries a `package-lock.json`, and records the truAPI packages it installed in `acquired.json`. The dot.li targets are no longer greyed for a truAPI mismatch. dot.li's console diagnostics now cover every `[dot.li …]` prefix and truAPI's own `[truapi…]` lines.
444
+ - 34a0b95: A deny-by-default dot.li session now goes through the lab's origin gates in front of the local chain nodes, as the truAPI hosts do. Only dot.li's own page and protocol frame may open a node. A product frame that tries is refused and reported in `session.network.blocked()`, so `hostile-chain-bypass` no longer finds the product reaching the node. The dot.li verify targets are greyed while the kit's probe speaks a different truAPI release from the locked dot.li build: today truAPI 0.23 against 0.13, which is a known gap. The dot.li lock now records the truAPI its build bundles.
445
+ - 85414a0: A host verification target can say why it cannot run here: `unavailable({ lab })` in `defineHostVerifications([...])` returns the reason (a missing build, a tool not installed, or chains of the running lab it cannot use). The lab window's Hostile apps keeps such a host in its menu, greyed, with the reason on hover, and picks one that can run; `product-lab host verify` refuses it with the reason before starting anything. In product-lab's own repository, dot.li is now in that menu: it uses the lab's chain (or starts the lab's environment for the run) like the truAPI hosts, checks the chain-node bypass (its sessions are not signed in, so the other three attacks are reported as not supported), and is greyed with why when it cannot run: its locked build is missing, or the running chain is made from scratch (dot.li serves only the network's own chains, so it needs a copy of Paseo). Before, such a run waited two minutes and reported, wrongly, that the host let a hostile app through.
446
+ - 8f61332: `hosts: { dotli: {} }`, the line `product-lab config` suggests for turning the dot.li host on, now loads: before, the lab refused to start with "Host dotli: hostPort: Required". Without `hostPort` the dot.li host takes a free port the lab reserves when it starts, as the truAPI WASM host does, and `product-lab config` shows the port as given or reserved.
447
+ - c76ec62: `product-lab test --dry-run` now refuses what `product-lab lint` refuses in the features it selects, before anything starts: a step that does not plan (a missing sentence, an "… at the same time" step whose parts are not registered sentences, a malformed table) is reported as an error, with its file and line, instead of the scenario being reported as discovered. A negative control's deliberately broken plan stays a warning, and errors in features the run does not select do not refuse it.
448
+ - 634c6f3: `node --import @product-lab/cli/own-running-record` gives a test or e2e script that serves a lab window a running-lab record of its own, so two window tests of one lab (a quick journey beside a fork journey, an e2e beside a check) run side by side instead of refusing each other. The examples' test and e2e scripts use it. A person's `bun run lab` stays one per folder.
449
+ - b6f00b2: `product-lab fetch` now prepares the Engine checkout that the local copies of a network (`paseo-copy`, `previewnet-copy`) start from, so a product that installs `@parity/product-lab` can run them without product-lab's own repository. Name the copy you use: `npx --no-install product-lab fetch --environment paseo-copy` clones previewnet-engine at the commit the lab tests, applies the lab's patch, builds it and fetches its network's binaries into the shared cache (`~/.cache/product-lab/engine`, or under `PRODUCT_LAB_CACHE_DIR`). It needs Git and network access, and takes a few minutes and about 900 MB the first time. Once prepared, it is only checked. A plain `fetch` prepares only what your default environment needs, so CI on the local dev chain never builds Engine.
450
+
451
+ `product-lab doctor` now says whether that checkout is prepared (`tooling:engine`). Pass `--environment paseo-copy` to make a missing checkout a failure instead of a note. A copy that starts without it now names `npx --no-install product-lab fetch --environment paseo-copy` instead of `bun run setup`, a command a product does not have.
452
+
453
+ To try another Engine, for example one that already carries the fixes the lab patches in, `fetch` takes `--engine-repository <url|path>` (a Git URL or a local repository), `--engine-ref <ref>` and `--no-engine-patch` (stock Engine, recorded as such; the copy then starts from it). A plain `fetch --environment paseo-copy` goes back to the tested default.
454
+ - c50880e: A local fork whose first boot was stopped part way (Ctrl-C or a killed run) now starts on the next try. Before, that start failed at once with "Existing persistent network must be resumed, not initialized again" and only a retry started it. The lab removes what the stopped boot left, says so, and boots, or adopts a published first boot when one fits (backlog 210).
455
+ - 2f74791: Paseo copies onboard people again. The lab now prepares PreviewNet Engine at its current main (2f6d0eba) instead of v0.8.0 (d298d260). Engine's identity backend there is DUB v0.6.0, which signs against People runtimes that carry `CheckMetadataHash`. With v0.8.0, a copy of today's Paseo Next onboarded nobody: "dotNS username did not appear on Asset Hub after attestation". Run `bun run setup` once to prepare the new Engine.
456
+ - 2b0d834: A Paseo copy no longer hangs at its first start when eturnal is installed. Engine then runs its TURN relay (`turn`) for as long as the network, and the start waited for it to exit as if it were a one-shot setup job, so it never became ready. `turn` now counts as one of Engine's services.
457
+ - 6918b48: The lab window shows the environment above the Run, Scenarios and Recordings tabs, on each of them: its name, the option it runs as, what stopping keeps, its health, Start and Stop, a line per chain with its finalized head, and "Environment details" for the rest. A chain kept between starts says "kept between starts" (it said "thrown away when stopped" and "a new chain each start"). At a narrow panel the Environment section's facts no longer break inside words ("5 / not / es") or run over the Reset row.
458
+ - 55548bb: The chain picker lists every kind of chain a lab can run on: a fast local chain, a local copy of a live network, a copy of a live chain through Chopsticks, and the live network. A kind your lab does not configure is greyed under "Not configured in this lab", saying what it is, why you would choose it, and the config that adds it. `nameEnvironment(entry, { label, description, kind })` takes the kind for an environment of your own; a topology's adapter and a live network say it themselves.
459
+ - 5543a52: An environment's line in the lab window's environment list and picker wraps instead of being cut with "…", so its
460
+ whole text (its chains and where its state is kept) can be read.
461
+ - 37486b1: When a lab has no `lab.lock.json` entry or a locked file is missing from the cache, the message now tells a product what to run: `npx --no-install product-lab fetch`, or `npx --no-install product-lab init` for a pinned lock. It no longer names a path in product-lab's repository or its setup script. When dependencies are missing, the CLI tells a product to reinstall `@parity/product-lab`.
462
+ - 3a561c9: The lab window's evidence now uses plain words, and each part says why it is there.
463
+ - The host-bypass audit is now the "Host check". It says "Nothing went around the host" and counts what it found by kind, for example "24 the chain wrote itself (each block's time and bookkeeping): expected". Each kind gives its reason on hover, and the check's (i) explains what it does.
464
+ - A host's approvals read as what the person allowed, counted: "Let it reach a service or chain beyond the app (twice)".
465
+ - The step's own values read as words with their units: "typed and clicked: 148 ms".
466
+ - A replay picture taken while the next step ran names that step's work.
467
+ - The full records are labelled "The full record (JSON)" (they were "Raw").
468
+ - a98f0c3: `explain_failure` names an app's dev server that never served the app in time (rule `dev-server-not-ready`) with the status it answered; a 404 is explained as a server running from another folder or base path, with the `apps.<app>.devServer` setting that changes it. Before, the lab answered "No rule matched this error".
469
+ - 05834fc: A step that fails because the lab cannot do something here (an unsupported operation, such as making a person on a local environment in a product) is now explained as unsupported (`explain_failure` rule `unsupported`). Before, it was explained as a host refusal, with advice to read the host's logs and run `host_verify`.
470
+ - 856626f: `product-lab explore --save <dir>` now saves the smallest failing scenario the way the lab window's "Save as a feature" does: never over a file already there (`explored-seed-<seed>-2.feature`, `-3`), only inside the lab's directory, and only where the lab's features globs list it; otherwise it says why and writes nothing. Its flag and its `Saved: <path>` line are unchanged.
471
+ - 50e841e: In the lab window's Evidence, the list of a feature run's steps under Receipts is no longer rebuilt each time the run's evidence redraws, for example when the lab's check after a failed step answers seconds after the run ended. Unchanged rows stay as they are.
472
+ - 810a369: The scenario list shows a scenario's description whole. Before, it was cut after three lines and the rest was only in its tooltip.
473
+ - e25f744: In the lab window, a long value in a step (a content id, an address) wraps inside its own chip. Before, at a narrow panel, the step's sentence ran a few pixels past its box.
474
+ - 2d42842: The run timeline's axis now ends after its last bar, so a last step that took 0 ms is drawn on the timeline. Before, it was drawn past the timeline's right edge.
475
+ - 9ebd5bb: A run timeline's bar shows its step's number instead of a title cut to a few letters. The bar's tooltip, the detail below the timeline and "As a table" give the step's whole title.
476
+ - 7d7ce70: The run timeline shows a long identity name whole, wrapped in its column. Before, it was clipped to its first words without an ellipsis.
477
+ - 13ede48: A browser context or page with a WebSocket route keeps the browser's own WebSocket accessors, so a truAPI host's bridge (which reads them) still pairs when the lab routes the page's sockets.
478
+ - c6a0b41: The lab window now follows your feature files. Save a `.feature` file in any editor, or add a new one, and the Scenarios list and the open scenario's steps update within about a second. You no longer need to reload the window. Editing `negativeControls` in `lab.config.ts` takes effect while the lab runs, and the next control run is judged with the new entry. A run already going keeps the files it started with. A run started after an edit always read the new file; only the window's list was out of date.
479
+ - e365bb6: Demo videos render with ffmpeg 8 and later again; they failed with "Unrecognized option 'filter_complex_script'".
480
+ - 231ff29: A lab-window fill now reads the field back after typing. If keyboard focus moved away while the field was being typed into (for example, a click elsewhere in the window), the lab focuses the field again and types only the missing part, once. The call's record says that it did. If the field still doesn't hold exactly the text, the step fails before anything is clicked, naming what the field holds and what took focus. Before, the rest of the text was lost silently and the step went on to submit a shortened value.
481
+
482
+ A failed action that knows what became of its submission can now say so: throw `KnownSubmissionError` with `{ outcome, detail }`. The run records this as the step's reconciliation (`source: "action"`) and reports the detail. It no longer says "whether its submission landed is unknown: reconcile the run" when the action already knows. The Notes reference lab uses this once its read-back has read Bulletin.
483
+ - 6e37301: On a busy machine, a saved network whose chains are finalizing no longer fails to start with "Finality did not advance". The readiness wait now restarts every time a chain finalizes a block, so it gives up only when finality has stood still for the whole wait.
484
+ - a633e37: Expose opt-in decoded call arguments alongside finalized extrinsic evidence so integrations can check what an app submitted without retaining payloads in ordinary block watches.
485
+ - 2310078: A fork's first start no longer says it "could not read the live network": with no fork on the machine yet there is nothing to compare, and it says so. The bite phase says what it does and how long it can take ("copying the live network onto this machine (once; often 15 minutes or more; later starts resume in about a minute)").
486
+ - b56175a: While a feature run is active in the lab, including the gaps between its steps and scenarios, a fixture save, restore, import, download, upgrade or rebuild from another client (the lab window, MCP or the CLI) is refused by name. Before, it could change the state the run's scenarios were using (backlog 204).
487
+ - fe226ff: Ctrl-C during `product-lab fixture save` or `fixture run` stops the environment, a start in progress included; before, it printed "Stopping" and the start went on until a second Ctrl-C forced the exit.
488
+ - b60cf1f: `PRODUCT_LAB_RUNNING_DIR` keeps the record of the lab running in a folder somewhere else. It is for labs that share one folder on purpose and never one chain or port, such as test fixtures. A person's lab leaves it unset, and a second lab window of the same folder still refuses to start.
489
+ - b65c544: `product-lab fixture refresh` rebuilds a fixture built on another fixture (`from`) on that fixture's restored state, with its people bound, the way `fixture save` does. Before, it reset the environment and ran the setup with nobody bound (backlog 214).
490
+ - 9ad7240: `product-lab fixture run <name>` keeps chain and people as `fixture save` does, so it restores a fixture saved on a kept start. Before, it started clean and refused with "the session keeps its identities in no directory, but the fixture saved …/kept/…", and on the fast local chain a clean start restored nothing. `LabRuntime.startFromFixture` takes `keep`. A fixture saved before a reset of the Paseo copy is refused before anything runs, with words that name the reset and say to save it again.
491
+ - cbe8083: A fixture saved on another branch, which this checkout no longer declares, no longer breaks `product-lab fixture run` or the fixture list. It is listed as stale with "not declared here", and `product-lab fixture delete <name>` removes it (backlog 215).
492
+ - 051fb72: A saved fork that resumes now waits until every chain's time reaches this machine's clock before it is ready. A chain still at the save's time made the truAPI CLI host's identity onboarding fail with `dotns.signedAt is older than the intake freshness bound (600s)`. If a chain has not caught up after 2 minutes, the start fails with `ChainClockBehindError`. The error names the chain and how far behind it is, and tells you to restart the network or start a fresh fork.
493
+ - 626453c: A local copy of Paseo or Previewnet no longer refuses to start because another program briefly holds a port of its block that the copy does not use: before a first start only the ports the copy binds are checked, and its node ports are placed around busy ones. When a port it needs is taken, the refusal names what holds it, and says when the port lies in the range the operating system gives to outgoing connections. Starting a copy whose port block lies in that range (macOS 49152-65535) now prints a warning with a block below it.
494
+ - 540aef5: A fork (paseo-fork, previewnet-fork) is ready only once its parachains build new blocks again after their nodes start, so onboarding no longer begins while the validators are still preparing the parachains and fail with "dotNS username did not appear on Asset Hub after attestation". A saved fork whose parachains wait like this while the relay chain keeps finalizing is no longer called stalled and restarted.
495
+ - 7396ce4: Stopping a saved Engine fork now leaves a safer save point: the lab stops the collators first and waits until no parachain head has changed for 3 relay blocks and the last change is finalized (at most 2 minutes), then stops the validators. Before, a resumed fork could stop finalizing because validators lost the approval checks of candidates left unfinalized at the stop, and the lab had to restart it.
496
+ - e243a40: A saved local network whose Engine tooling is gone (the cache it was created in was deleted or moved, or `PRODUCT_LAB_CACHE_DIR` now names another cache) is refused before anything starts, naming what is missing and the way out (that cache again, or `product-lab dev --refresh` for a new saved network, which discards its identities), instead of failing on the first process that cannot be spawned.
497
+ - 4e21c36: The Notes example's publish step (`lab/steps/notes.ts`, `publishing`) now reads as four named calls, each with a one-line comment: `typeAndPublish`, `waitUntilAnnounced`, `readBackPublication` and `recordPublication`. Its read-back reads as `checkBulletinHolds`, `checkStatementStoreLists` and `stays`. What the step does and checks is unchanged.
498
+ - 48110ff: Add an optional decision bridge and original review and permission logs to the shared browser host shell. The bridge requires deny-all defaults and denies confirmation, device and remote permission callbacks. Existing durable authorizations still need independent admission.
499
+ - b4ff893: The process registry's once-a-second refresh no longer blocks the event loop: it reads the process table with an asynchronous `ps`, keeps at most one read in flight, and drops a read that a start, a stop or an on-demand refresh overtook. Five gate flakes are fixed at their causes, with no retries; a bound changed only where it measured something the test does not check, and the test says why: engine-owned-start counts timer ticks instead of timing them; the CLI `--browser` test waits for its line or the exit; the stock-app proof takes a settle time; of two card tests in an example, one starts the page's late navigation itself and the other gives a strict-mode refusal time to resolve. A sixth, found by this lane's own check, was in the Engine start tests: a starved test could read the stand-in's pid file before it was written, take pid 0 for the fetch and probe its own process group; the stand-in now writes pid files atomically and the probe refuses anything but a real pid. Record: docs/verification/2026-10-02-gate-flakes.md.
500
+ - 12c4fd1: A lab directory that is not committed yet now has a source revision (git's empty tree, every file uncommitted) instead of none.
501
+ - d4fb359: In the lab window, each greyed row's line to add to lab.config.ts (or the `export` to run) sits in a block of its own with its copy button beside it, and wraps between words only, so a name like `"paseo-next-v2"` is never split, even in a narrow panel.
502
+ - ae34f23: The lab window shows what your lab.config.ts leaves off, greyed, with the line that turns each on: an environment turned off or not listed (Local copy of Previewnet, Chopsticks), a live network not listed, one with no people (read only), a person whose variable is not set here (with the `export` to run), a host turned off or dot.li, and modes when there are none. They appear in the Environments list, the chain picker, New identity's host menu and the Config view, which also marks each entry naming a variable as set or not set. Nothing is hidden.
503
+ - ebb22c7: A command that exits while a helper it started is still finishing (tsx's esbuild service, for example) is no longer refused as having left processes behind on Linux: the lab gives the command's process group up to 2 seconds to empty by itself, and on Linux counts only live members, never zombies. A process that keeps running is still killed and reported.
504
+ - cd3edeb: Closing the terminal that runs `product-lab` (or `bun run lab`) now stops the lab as Ctrl-C does: its window, its
505
+ people's sessions and its chains are stopped and nothing it started is left running. Before, the lab ended at once
506
+ and its chains, hosts and dev servers kept running until the next start.
507
+ - 4f735be: An environment can hold its own background work for the length of a feature scenario and of a fixture save (`LabEnvironment.holdBackground`): each begins once background work under way has finished, and none starts until it ends.
508
+ - 63e7281: Refresh the local truAPI CLI host to 0.25.0 and remove the Bulletin preimage backport now carried by that release. Keep the official host release unchanged.
509
+
510
+ `bulletin-preimage-lookup` is no longer an accepted patch name; remove it from `hosts["truapi-cli"].patches` in existing lab configurations.
511
+
512
+ Keep the installed host capability catalogue aligned with this retirement.
513
+ - 0ade3fc: The host check reads Bulletin as well as People. A truAPI host stores a person's data on Bulletin with `TransactionStorage.store`, signed by the account it derives for the app's Bulletin storage (`//allowance//bulletin//<product>`, RFC-0010), with no signing request from the app. The check now reads every chain the lab connected (`LabEnvironment.landingChains`), and the truAPI CLI host reports that account as one it signs with (`session.resourceAccounts()`, `signs: true`). A store it signs is credited to that app as the host's own, so a clean Notes run still reads "Nothing went around the host". A store signed by any other account, such as a key the app holds itself, is still unexplained, and strict mode still fails on it.
514
+ - fa13d9b: A host-bypass report no longer shows an app as `incomplete` with no reason. An app that is incomplete only because of the run's evidence gaps, extrinsics that are not fully decoded, or an environment with no declared scope now carries one line saying which, for example `Incomplete because 1 finalized extrinsic is not fully decoded: people #7 index 2: …`. The line is dropped when a later reconciliation leaves nothing incomplete.
515
+ - 6e5feaf: The Notes example's clean host-check scenario runs only where the host check can be complete (the truAPI CLI host). On
516
+ the WASM hosts, which return no signatures, it is skipped and shown greyed with the reason, so the suite passes there.
517
+ - 72e0637: The Notes example has a negative control for the lab's host check: on a local dev chain, the app's page sends a remark
518
+ straight to the People node instead of through its host, and the host check must find it (`truapi-cli`, `truapi-wasm`
519
+ and the new `truapi-wasm-open` choice, the WASM host with its network open). A clean control publishes through the host.
520
+ - 33e84c2: The host check no longer marks a clean run as incomplete because of the host's own traffic. On truAPI WASM, an unclassified call on the host page's own chain connection is the host's business, not the app's. On the desktop host, an app socket that the page's own browser session saw is now credited to that page when it has no other frame, instead of being reported as "Chromium did not expose the owning page/frame".
521
+ - 43bc9ce: A lab can give each declared host a one-line `description` (`hosts: { "truapi-cli-deny": { kind, description, options } }`). New identity's host menu shows it under the host, and a host without one shows its adapter's name.
522
+ - 318717b: The truAPI CLI host's local-network check now accepts the routing echo from the upcoming host release with the fork and local-network work (host-rust-core #1454), which spells its format version `schema_version`. Before, the lab read only `schemaVersion`, so a host from that release would have been refused at launch ("Host did not confirm the complete local routing contract") and its capability probe would have said it cannot route to a local network. Hosts that print `schemaVersion` still pass; an echo with both spellings, or with anything but the complete routing, is still refused.
523
+ - 1ba38bc: In the Notes example, a publish that the truAPI host reports as failed with "Could not instantiate a client at the required block … Invalid block hash (-32801)" now says what happened. The note's upload went into the finalized Bulletin block it names, then the host lost that block on its block subscription and told the app the upload failed. The step names the block, says the cause is the host's (its subxt client), not the app's or the chain's, and declares the upload included, which the run records as what became of the step's submission.
524
+ - 946dfec: The panel's New identity host menu stays open while the lab's state changes; only a change to the lab's hosts closes it.
525
+ - 3e89810: Three generic sentences for a host that locks the network: `{actor}'s app requests {string}` (the app requests the address from its own document; `<app>` is its origin), `{actor}'s host blocked and recorded {string}` (fails `not-blocked`) and `{actor}'s host reached only declared endpoints` (fails `undeclared-endpoint`, or `observation-incomplete` when the lab cannot see what it reached). A host that does not report its network fails them as `unsupported-here`. They work in the lab window's tiles too.
526
+ - f99b0d9: The desktop host (`truapi-cli`) can log what it does in detail, for a run where you need it: set `PRODUCT_LAB_HOST_RUST_LOG` (a `RUST_LOG` filter, for example `info,subxt=debug` to see its chain connections), or give a host `options: { rustLog }`. The host writes it to the session's host log. Off by default: hosts still get no `RUST_LOG` from your shell.
527
+ - 4073526: Hand a host's polkadot-api 2.x signer its signed extensions in the order the chain's runtime declares them. polkadot-api 3 adds them in its own order, and a host that builds a V4 transaction writes them in the order it receives them: on Asset Hub (no `VerifyMultiSignature`) the signed transaction could not be read and failed with `innerDecoder is not a function`. This fixes `toTxCreator` for 2.x signers and the minimal starter's signer bridge, which now also needs `@polkadot-api/substrate-bindings` (its install command lists it).
528
+ - fb7ff88: Ready for truAPI hosts newer than 0.23.0. Onboarding a new identity (`truapiCliProvisioner`) now works on a host built from host-rust-core after #1124, which removed `--lite-username-prefix`: the lab reads which flags `signing-host` offers and passes `--session <prefix>` alone there, both flags on 0.23.0 as before. `PRODUCT_LAB_HOST_BIN` together with a resolved `host:truapi-cli` in a lab's versions is now an error naming both, instead of the override being silently ignored.
529
+ - 3612d28: In the lab window, a feature that makes a new person on the truAPI WASM host no longer fails its first step with "locator.waitFor: Timeout 10000ms exceeded" when the view does not show that person's tile.
530
+ - 9b704a6: Hostile apps in the lab window no longer asks for `PRODUCT_LAB_BASELINE`. It runs on the lab's own chain: the running local environment, or, when none runs, the lab's default one, started for the run and stopped after. It offers the hosts to test as a menu instead of asking for a targets module, and says in one sentence that it tests the host, not your app. `product-lab host verify` takes `--environment <name>` to do the same from a terminal, which is the command the Tools page shows. Without `PRODUCT_LAB_PORT_BASE`, the repository's host targets take a free port block from 40000 instead of the fixed 13500.
531
+ - 4c61d6b: Hostile apps no longer says "got through" when the host never reached the chain. If the app cannot get the chain through its host, `hostile-chain-bypass` is now inconclusive ("the host never connected to people within 120 s", with the probe's reason) in `product-lab host verify`, in the window's Hostile apps report and in MCP `host_verify`. An inconclusive result does not conform. An app that reaches the chain node directly still fails, whether or not the host reached the chain.
532
+ - 5494236: The two stock hosts are named "truAPI CLI" and "truAPI WASM" everywhere you read them: the lab window, the terminal app, the CLI's and the MCP server's words, and the docs (they were "Desktop host" and "In-browser host"). Their ids are unchanged, and a scenario that names a host by its old name (`on the "desktop" host`, `on the "in-browser" host`) still finds it: a host adapter can declare the names its hosts went by before (`HostAdapterFactory.formerNames`), which no view shows.
533
+ - b640ee4: The lab window follows feature-file saves in a lab that declares no feature globs (it watches its own folder; until now such a watch reported nothing), and a save made while the window was opening. Starting a feature run reads the list again first, so the window shows the tags and description of the file it runs.
534
+ - 7ec2ce9: Each identity in the lab's snapshot now says which host it is on, when the host knows: `ActorSession.host` is
535
+ `{ id, label }`, for example `{ id: "truapi-cli", label: "CLI" }` or `{ id: "truapi-wasm", label: "WASM" }`. A host
536
+ adapter names its short label with the optional `HostProvider.label`; without one, the identity's host stays unknown.
537
+ Custom environments can fill it with `actorHost(provider)`.
538
+ - d208201: Deleting a person says what is lost before anything is removed, in the lab window and the terminal app alike: their keys and the lab's data go for good, what they did on chain stays but no one can act as them again, and while people are kept between starts, that they will not come back at the next start. Every removal reaches the environment with where it was asked (the window, the terminal app, a scenario's own cleanup) and why (`LabEnvironment.deleteActor(id, removal)`, `ActorRemoval`); the Notes example records it in its run's timeline (`actor-removed`), so a person missing after a restart has a recorded cause. `bun run e2e:keep` in examples/notes checks live that a truAPI WASM person comes back after a keep restart and a deleted one does not.
539
+ - fbf16dc: In the lab window, an (i) explanation opens where it can be read whole: near the panel's edge it moves back inside, opens above the (i) when there is more room there, and widens in a short panel docked at the bottom. The chain-day (i) in the Environment view was cut off at the panel's right edge.
540
+ - 20472af: `product-lab init` writes the new layout: a `lab.config.ts` with only what is about the app (its steps, its chains, its own dev server), `lab/steps/<id>.ts` with `defineSteps`, and `lab/features/first.feature`.
541
+ - bb3c311: The paused run's inspection reads cleanly: headings in sentence case, step text in “typographic quotes” (no more nested quotes, also in breakpoint reasons), and Continue, Step and Cancel only in the dock.
542
+ - 32b7ba0: A step set can declare its own panel scenarios (`defineSteps({ scenarios })`): inputs, several steps and several people, listed in the lab window and MCP's `run_scenario` under any session, the lab's default session included. Each step gets what an action gets in a feature step: the lab's readers, the person's resource accounts (another person's by role) and the step's readings and writes. The one-step scenario of every action now gets the readers and resource accounts too.
543
+ - fcd3094: An owned Engine fork with isolation (the default) no longer starts when Engine's IPFS repository does not exist yet: before, Engine's start created a default one after the lab's isolation step, listening on every interface. `bun run setup` now runs Engine's fetch, which creates it.
544
+ - 6f77f63: A run whose `@isolated` scenario fails no longer leaves the local network running after it ends. Before, giving the scenario's start state back could outlast the end hook's five minutes, for example after a step that timed out. The run then stopped its environment, and the give-back started the network again with nothing owning it: the command did not exit, and the next run found its ports taken. The run's stop now waits for that end as it already waits for a fixture restore. A stop that a person asks for still waits only a few seconds.
545
+ - 683af25: An `@isolated` scenario now runs in Watch mode in the lab window: its save and restore no longer make the run's identities "stale" at the first step. A new environment session that a fixture save or restore opens continues the run's (`environmentLineage` in the lab snapshot); a start, switch or reset still ends it.
546
+ - 859f308: A new setting, "Keep each fork run's starting state" (off by default), saves the state a fork scenario starts on, so Reproduce can rebuild a failed fork run. It adds about a minute to each fork scenario's start, and the lab keeps the last 5. With the setting off, a fork run's "Reproduce: not available. Why?" says its starting state was not kept and offers to turn the setting on or to choose a fixture. `product-lab reproduce` names the same way on: turn the setting on and run again, or tag the scenario with a fixture.
547
+ - 2fc1fca: The Notes example's "Keep chain and people between starts" people line now says that only a person on the Desktop host keeps their app's storage between starts; the In-browser host keeps none. With the In-browser host as the lab's host, the line says each start makes new people and how to keep them.
548
+ - 7f7ca80: A chain kept between starts whose clock has run onto a later day than the wall clock (a local fast chain moves its clock 12 s per block) is no longer started: claims and new people would fail there ("NotAvailable", "UnableToSign"). The start says so, naming both clocks, and tells you how to start clean.
549
+ - a1a7c57: The AI kit's Notes reference carries the custom RPC and public deploy changes together.
550
+ - ba5ec63: The AI kit's Notes reference now includes the previewnet fork and the live read-only environments (`lab/previewnet-fork.ts`, `lab/live-networks.ts`).
551
+ - 31765c1: The AI kit's two complete labs (`references/minimal-lab.md` in the product-lab-setup skill and `references/notes-lab.md` in the product-lab-integration skill) are now written from product-lab's examples when the package is packed, so the copy `product-lab ai init` installs always matches the release it came with. A package without them is refused before it is published.
552
+ - ba348e9: The Notes and minimal labs shipped in the AI kit's references now run a product's people on the released truAPI WASM test host: their default host and their modes' hosts are changed for a product. A product no longer has to add `defaultHost: "truapi-wasm"` after copying them. The Notes reference now ships its `two-writers` fixture with the fixture's setup feature, and leaves out Notes' three other fixtures, whose setups it never shipped. It no longer ships Notes' `app/vite.config.ts`, which a product copying the reference beside its own app could have copied over its own: the reference says to keep the app's own dev server configuration.
553
+ - f851fda: Commands in a repository without the product-lab AI kit no longer load the kit to compare it with the installed package; they only look for the kit's record, as before.
554
+ - 85c9209: `checks.accessibility.ignore` is applied: findings of the rules it lists never fail a step. They are still scanned and kept with the step's evidence, and the step's notes count them. A rule may not be both run (`rules`) and ignored.
555
+ - 66746a5: `product-lab config` names an adapter by its label ("Local dev chain (Omni Node)"), never its code id, also for `advanced.environmentAdapters` and `advanced.hostAdapters`. Each environment keeps its run folders under `.product-lab/environments` (or `PRODUCT_LAB_OUTPUT_DIR`), Chopsticks' included, so a config needs no `environmentAdapters` for them; an adapter setting under `advanced` (a Chopsticks `bin`) keeps the lab's folder.
556
+ - 794cd0f: `product-lab check` no longer lists the `lab.lock.json` entries an environment lacks when no app of the lab can run there. Each app's "unavailable" line says why. Such an environment still cannot start.
557
+ - 5ee7957: The function form of `defineLab` may be async, and its context offers `claimPorts(size)`: a block for what the config runs itself, from the lab's ports like the window's (a slice of `ports` or `PRODUCT_LAB_PORTS`, else a claimed block in 20000-32699, the same on every load). A claimed block may be wider than 100 ports. Notes takes its 500-port block this way (no more fixed 13000-13499), and its window and session ports are the lab's own claim.
558
+ - a393c3f: "the contract … returns N from …" fails with the reason `not-on-chain` when the contract returns another number, so a negative control that expects that reason matches it.
559
+ - 82dd27f: The default session launches its browser with the network policy's resolver backstop when a declared host denies by default. Before this, a person on the network-locked truAPI WASM host (on by default in the product config) was refused with "deny-by-default needs the browser launched with the network policy's resolver backstop".
560
+ - 787e7bb: A fixture rebuilt on a kept chain holds only the identities its setup made (and the base fixture's it is bound to), never the people an earlier start kept, so running a fixture control twice no longer fails with two identities of one name.
561
+ - 1a0b0df: A product config's lab says what keeping keeps of its people: each person and their wallet when the default host is the truAPI CLI host, else that each start makes new people and how to keep them (the lab window's switch and `product-lab dev` show it). Notes keeps people and runs workers through the lab's own (no `advanced.keepBetweenStarts`; `advanced.workers` only for named blocks or per-worker caches).
562
+ - a191b7a: A mode, and `defaultEnvironment`, can name an environment your config brings under `advanced.environments`: `defineLab` infers its keys, so `modes: { merge: { environment: "local" } }` type-checks when `advanced.environments.local` exists, and a name that is neither the lab's nor yours is still a type error. In the function form, write the arrow with its `context` parameter so the names are inferred.
563
+ - 88f2070: The one-time move of state saved under an old environment name prints its notice on stderr, so `--json` output (`product-lab config --json`, `lint --json`, `test --json`) stays valid JSON on the first run after upgrading.
564
+ - a393c3f: `defineLab({ app, … })` runs: the lab works out the rest from your app. `app.steps` names the app (a list: the first set is the app's, the others are offered beside it). The lab offers `fast` (People and the app's chains on this machine, Omni Node) and `paseo-copy`, plus `previewnet-copy`, `chopsticks` and `live.<network>` when you list them. `false` turns one off. A live network without `people` is read only. Its `people` sign with the phrase in the variable you name, and `newPeople.fund` ("5 PAS") is paid on the app's first chain. Both truAPI hosts are on (the CLI with the local network patch, WASM network locked), and dot.li is off unless listed. `advanced` takes any field of the full definition, merged over what the lab worked out.
565
+
566
+ The lab's registry carries the config as it runs: every value, where it came from (yours, the lab's default, detected, advanced) and the line that changes it, with no environment started. It shows a secret's variable name, never its value. `modes` are kept as written. `labDefinitionFrom(config, { root, env })` from `@product-lab/composition` gives the definition the lab runs.
567
+
568
+ A lab that declares no ports claims a free block of 100 between 20000 and 32699 (a lock file per block, released when the process ends), so labs side by side never collide. The truAPI CLI and WASM hosts take their ports from it when none are given. `ports: { from, to }` and `PRODUCT_LAB_PORTS=<from>-<to>` still override it. The older `defineLab({ apps, environments, … })` shape works as before.
569
+
570
+ Without `app.devServer` the lab reads the dev server from `app/package.json`: Vite, Next (webpack App Router or Turbopack) or webpack-dev-server, on the port it gives and loopback only. A declared bare command (`vite`) runs the app's own copy. Fixtures without `inputs` are rebuilt when `app/src/**`, `app/index.html` or `lab/**` change. `rootCalls` are allowed on local copies only, signed with the copy's sudo key. `product-lab test --workers <n>` works with no declaration: each worker gets its own folder (`PRODUCT_LAB_OUTPUT_DIR`) and its own ports. Secrets sign outside the runtime too (Sr25519 keys).
571
+
572
+ The lab window and its sessions take ports the lab claims when your config names none: a block of their own, kept for the whole run, instead of port 5202 and the shared 40000-40999.
573
+
574
+ `versions: { runtime, hosts }` ("locked" or "latest") sets the version policy for the lab's runtimes and hosts. Where each one is published is declared for you, so a mode or a suite row can ask for the latest. `keepBetweenStarts: false` turns off the lab window's keeping by default. `--keep` still keeps.
575
+
576
+ The local dev chain (`fast`) also runs on ports the lab claims, apart from the window's. A reopened lab gets the same ports again (the claim starts from the lab's folder), so its kept chain and people are where it left them.
577
+
578
+ On the local dev chain, an app whose chains include Bulletin, or whose requires name the Statement Store, gets new people who are persons on People: the lab recognises them, and stands in for the XCM to Bulletin. Nobody funds them, as on a real network. Other apps keep funded wallets, which are quicker to make. `product-lab config` shows which, as "detected".
579
+
580
+ The config view says whether each secret's variable is set where the lab runs (never its value), and points every value you wrote at its line in `lab.config.ts`.
581
+
582
+ `companions` declares apps beside yours that it opens in the same wallet (their own sentences, chains and requires). `devices` lists the devices the window and modes offer.
583
+
584
+ `advancedWhy` says why each `advanced` field is needed. `product-lab config` shows it beside the field, and `product-lab lint` warns on one that names no `advanced` field. Under `advanced`, an app's or a host's fields merge into the ones the lab works out (so `advanced.hosts["truapi-cli"] = { aliases }` keeps its options). The Paseo and Previewnet copies also answer to their old `-light` and `-full` names.
585
+ - c990387: Actions now get the lab's own readers (`context.readers`) and the person's resource accounts (`context.resourceAccounts()`), as checks do, so an action can read back what it stored with `statementReader`. On both actions and checks, `resourceAccounts("Bea")` gives another scenario actor's accounts by the name the feature uses; a name the scenario does not bind is refused by name. An action or check that acts as no actor gets no resource accounts.
586
+ - eb15ed2: A negative control that did not run is no longer reported as "passed". When every scenario of a control is skipped (for example not for this chain, such as `@policy-1` on a chain with another policy), its verdict is `not-run`, "not run here: <why>". That is inconclusive, never a pass, and the run exits 3. `product-lab test --negative-control` with no path lists a control whose `@environment:`, `@live-network` or `@root-calls` tags rule out the run's environment as not for it, without starting it. It passes only when at least one control ran and every control that ran failed as intended; the others are listed as "not run here (not passed)".
587
+ - bad4436: The minimal example the AI kit's setup skill refers to now declares `modes`: `merge` (fast, the truAPI CLI host, locked) and `nightly` (fast and the local copy of Paseo, both hosts, locked), run with `product-lab test --mode <name>`. latest-sdk and counter-contract declare the same, and each example has tests that plan both modes and refuse an undeclared one.
588
+ - 4e0885e: `product-lab test --mode` no longer fails a row that passed because of a scenario tagged for another environment. A row now plans only the scenarios its run runs on its environment, by the same rule the run uses (`@environment:`, `@live-network`, `@root-calls`), so `--plan` shows what will run. Before, a feature tagged `@environment:live-next-v2` was counted in a `fast` row and reported as "planned but not reported by the run". A row whose selected scenarios all run elsewhere is shown as empty, with the reason.
589
+ - 2c427b9: Modes take two more version choices and their own change scopes. `versions: ["locked", "latest", "runtime-latest", "hosts-latest"]` adds rows where only the runtimes, or only the row's own host, move to their latest release, so `hosts × versions` tells which upgrade breaks a run. `scopes: { "app/**": "@notes", "viewer/**": "@viewer" }` (with `onlyAffected`) runs only the scenarios tagged for the globs a change touches. A change to feature files only still runs just those files, and a change outside every glob still runs the whole mode. `hosts-latest` without a host, and `scopes` without `onlyAffected`, are refused with the reason.
590
+ - eb0bfc1: `modes` in `lab.config.ts`: `product-lab test --mode <name>` runs one way to run the lab, its environments, hosts, versions (`locked`, `latest`) and devices (one row per combination), its tags, `onlyAffected` (a change to feature files runs only those files), `workers` (rows at once; one combination shared out by feature file) and `budget`. It reports like `--suite`, which keeps working. MCP `run_scenario` takes `mode` (and `row`).
591
+ - e300b97: `statementReader` with `content: "bulletin"`: a content id that Bulletin does not return no longer refuses the whole statement. The entry is kept and the content id is listed in `unreadable` with why. Bytes that do not match their content id still refuse it. Refused statements now carry their expiry and proof result. Notes reads its store through the reader (`lab/on-chain.ts`).
592
+ - ab6b90f: polkadot-omni-node's `latest` release now resolves. polkadot-sdk tags its releases `polkadot-stable2606-2`, which is not a dotted version, so the lab found no release to move to. A GitHub version source can now declare `order`: a pattern whose numbers rank the tags. With it, polkadot-omni-node's latest is the newest patch of the newest stable line (today `polkadot-stable2606-2`), not the most recently published release (a patch of an older line, which ships no omni-node binary), and never a release candidate.
593
+ - 4fdfdd6: `statementReader({ topics, decode, content: "bulletin" })`: a check reads what an app stored for a person in the Statement Store by its topics and gets the decoded entries, newest first. The lab keeps an entry only when its proof verifies and it is signed by the person's statement account for the product. The lab derives that account itself from the identity it started the host with. With `content: "bulletin"`, each content id an entry names must also hold matching bytes on Bulletin. Everything refused comes back with why. `statementTopic(name)` hashes a topic. Checks get `resourceAccounts()`.
594
+ - c66ddc8: A product config's lab selects every component its lab.lock.json pins, so `versions: ["locked", "latest"]` in a mode and `versions: { runtime, hosts }` resolve real components. A `latest` row moves each pinned component, and its own host, to its latest release. A host set to `locked` that the lock doesn't pin is no longer selected; it used to refuse every run as "not locked". A lock that is missing or pins nothing makes a `latest` row unsupported, with a message naming the lock. Mode `latest` rows now use the `latest-release` selector; before, they asked for `latest`, which is not a selector. polkadot-omni-node's release source (paritytech/polkadot-sdk) is new, checked against the repository's live release listing. The small examples' nightly modes run `latest` again.
595
+ - 8f7bcbf: examples/notes: every negative control declares where and why it must fail by its tags (`@fails-with:<reason>`, `@fails-at-step-N`, `@runs-with:`), and Notes' own checks fail with `fail(reason, message)` (`not-on-chain`, `screen-mismatch`, People's `Resources.LongTermStorageAllocationFailed`); `NOTES_NEGATIVE_CONTROLS` is gone.
596
+ - e45b73f: examples/notes: under the lab's default session the publish reads back what it wrote through the lab's readers as the host's statement account, and "{actor} sees {actor}'s note" reads the author's account by their role.
597
+ - d43b5aa: The Notes example uses the new layout: its features live in `lab/features/`, and its live features in `lab/features/live/`. The AI kit's Notes reference names the new paths.
598
+ - 2b30094: examples/notes: Notes' real sentences are `lab/steps/notes.ts` (`notes`, `defineSteps`); the planted lies the lab's own self-tests use are a second step set, `lab/self-test/steps.ts` (`labSelfTest`, id `lab-self-test`), with their features in `lab/features/self-test/` tagged `@lab-self-test`. The kit's Notes reference lists both files.
599
+ - 9146c8a: examples/notes: each step asks one resolver what it works with (`lab/steps/context.ts`, `notesStep`): Notes' own lab while its own sessions run, the lab's default session's page, statement account, readers and stand-in for XCM otherwise.
600
+ - 28291a5: The lab window has the bottom bar's Lab button on top of Run, Scenarios and Recordings as well. It opens the same Lab menu, just under it. In that menu, Environments (E) opens the whole Environment view (Start and Stop, chains, chain console, apps, environments, Advanced) in place of the tab's content, and any tab brings you back. The panel is no longer split by an Environment section above the tabs, and it reopens on the place you left it after a reload.
601
+ - 57fde7e: The lab window keeps its place:
602
+
603
+ - The panel keeps the width you chose (Panel size, or the handle) on every section. Before, a scenario's detail and the Timeline widened it to 760 px. The Builder, an editor in three columns, still takes the whole frame; its new "Back to the panel" gives your width back.
604
+ - The top bar says how the chosen scenario's last run ended ("last run passed", "last run failed as intended"), or "ready to run". Before, it read "not running" after a run had passed.
605
+ - Recordings sits apart from Watch | Background in the bottom bar: it opens your recorded runs and runs nothing.
606
+ - A run picked in History shows in Steps, Timeline and Evidence, with "A past run, picked in History" and "Back to the latest run".
607
+ - Opening a section, the Scenarios tab included, closes a scenario's detail and brings the library back.
608
+ - Run on a scenario while another run goes says so: "Publish a note is running", with "Stop it and run this one" (one click) and "Keep it running". Before, it selected the scenario and started nothing, silently. When nothing can start, it says why.
609
+ - e1c3900: Moving around the lab window takes one click:
610
+
611
+ - Run on a scenario while you look at a recording goes back to live and starts the run. Before, the recording stayed in front of the app the run drives.
612
+ - "Back to live" keeps the left panel open, on the section and at the size it had. Before, it closed the panel.
613
+ - A new run clears the failure line of the run before it. A failure that arrives after a newer run started no longer lands on the newer run. A negative control that failed as intended no longer shows a red failure line.
614
+ - A run started while the window lays out its people waits for the person's app to be shown, up to 5 s. Before, it refused with "The app frame … has no visible box".
615
+ - The (i) next to Recordings and on a replay opens its explanation when clicked. Before, it only said it on hover.
616
+ - 434c530: The lab window now opens with each identity's cursor shown, so you can follow every click and keystroke; turn it off in Settings. Headless windows still open without it, and `--cursor` turns it on there.
617
+ - 5a9591d: A headless lab window can open at a higher pixel ratio for sharp captures: `deviceScaleFactor` on `openLabWindow` and `startDev`, for example 2.
618
+ - 314c5a1: The lab window opens as soon as its own panel is ready instead of waiting for every app tile to finish loading, so a slow first compile of an app's dev server no longer makes the window fail to open (it waited 22-26 s, and gave up after 30 s on a loaded machine).
619
+ - c3e30f0: The lab window's Settings (Show cursor, cursor speed, theme) are now kept with the lab, in `.product-lab/settings.json`, so your choices come back the next time you open the lab window.
620
+ - 7642b87: Every browser the lab launches now runs Chromium's synthetic camera and microphone, so no page in a lab run can prompt for or take your machine's own camera or microphone: a video call holding your camera can no longer fail a run, and a run no longer depends on your devices. This covers the lab window and every detached window, and every browser the Playwright adapter launches (`PlaywrightBrowser`, `PlaywrightBrowserLauncher`, the browsers a lab's sessions get); nothing turns it off. `--synthetic-media` is still accepted and changes nothing; `openLabWindow` no longer takes `syntheticMedia`. Recordings label the window's frames `synthetic`.
621
+ - 498d3d7: The lab window shows a person on the WASM test host. Their tile is their host page, with the app inside it, so Watch runs act on the app and screen checks read it. The tile says "network open" when the host's deny-by-default policy cannot apply in the shared window, and closing the window moves the session back to a headless page.
622
+ - 3ab07ba: The lab's check after a failed step reads every chain the lab connected for the environment, not only the chains the lab's sessions answer for: a failed run on people-fast that stored on Bulletin no longer says "The environment has no chain bulletin to read (it has people)" (`LabEnvironment.landingChains`).
623
+ - b044c1b: An owned Engine fork can be laid out for a smaller machine: engine.json `forkTopology: "light"` runs 4 relay validators instead of 6, Asset Hub on one core (6 s blocks, no elastic scaling) instead of three, and one PVF worker of each kind per validator. A light fork keeps its own Engine workspace and bundle, bitten from the live network on its first start, because Engine publishes only its own layout; it offers `--update-runtime` but not `--refresh`. The default (`faithful`) is unchanged.
624
+ - 859b28b: `openLabWindow` takes a `launch` option, the function that opens the window's browser (default: Chromium's own launch), so a test can open the lab window in a fixed locale and time zone. Nothing changes for a window opened without it.
625
+ - 5016b75: Hints and messages name the local dev chain by what you write in lab.config.ts: `environments: { fast: { pace: "real-time" } }` for real-time blocks, `environments: { fast: {} }` to turn it on, and "the local dev chain" instead of "relay-less".
626
+ - b53b2c6: Allow an explicitly routed persisted CLI wallet to serve a canonical localhost product binding, while retaining namespace checks for DotNS products.
627
+ - fd52c9b: Reproduce no longer calls the same failure "failed differently" because its error names something generated for that run, such as a Notes note's text.
628
+ - 7981643: `product-lab mcp` answers its client in well under a second: it answers `initialize` and the tool, prompt and resource lists before it loads your lab's runtime, and loads it in the background; a tool call made meanwhile waits for it. Before, it loaded everything first (twice), which took 3 to 14 s on a busy machine, and Codex, which drops a server that has not answered in 10 s, showed no product-lab tools. The first tool call is faster too: the runtime loads once, not twice.
629
+ - df2a10d: A feature run started through the MCP server (`run_scenario` with `feature`, `run_report`) now reports its result when no environment runs in the server itself, the usual case: its Cucumber process starts and stops its own. Since 6 October such a report answered "No environment is running" in place of the run's scenarios and their errors.
630
+ - a2356a2: `product-lab mcp` uses `@modelcontextprotocol/sdk` 1.32.1 (was 1.30.1), which fixes GHSA-6qxp-vccf-f47h: the SDK's OAuth client could send credentials to an authorization server chosen by the MCP server.
631
+ - 079f778: When a step fails, the lab's check of what it sent now reads a block's runtime metadata a second time if the first read fails. If both reads fail, the message says why ("the runtime at 0x…, read twice: <error>") instead of only "runtime metadata unavailable" (backlog 217).
632
+ - 6e564d1: `product-lab test --negative-control` with no feature path now runs every negative control your `lab.config.ts` declares in `negativeControls`, one run each, and prints `Negative controls: N of M failed as intended` with the ones that did not. It exits 0 only when every control failed at its declared step for its declared reason, so you no longer need a script of your own to run them.
633
+
634
+ A pre-onboarded actor now belongs to the environments where its secret has a source. With `secrets: { "ada-wallet": { "live-next-v2": fromEnv("MY_ADA_MNEMONIC") } }`, Ada is opened from that phrase on `live-next-v2` and created as a new actor on every other environment, so one `lab.config.ts` can hold both your local chains and a live network. Until the variable is set, the live environment is greyed in the chain picker and its start is refused, with a message that names the variable and says to add it to `.env`.
635
+
636
+ In the lab window's environment picker, an environment that cannot start is now greyed like an unconfigured one, with its "can't start" chip and the reason as its tooltip.
637
+ - c38f3a3: See the config the lab runs with, and where each value came from: `product-lab config [<group or key>] [--json]`, the lab window's Config view (Lab menu, More, Config) and MCP `lab_describe` section `resolvedConfig` show every value as yours (written in lab.config.ts), the lab's default (with why), detected from your app, or advanced, with the line in lab.config.ts that changes it. A value from a secret shows its variable's name only. The fast local chain is called "Local dev chain (Omni Node)" wherever you read it (it was "relay-less"); saving a fixture on a chain that is not kept says to run with --keep, or turn on Keep chain and people between starts. `defineSteps` is the name for declaring your product's steps (`defineIntegration` still works, marked deprecated). In lab.config.ts, an environment, live network, host or mode environment name that is not one of the lab's is a type error.
638
+ - 6008a83: The `@negative-control` tag now decides whether a feature file is a negative control. Before, a file kept showing "expected to fail" after you removed the tag, because its `features/controls/` folder or its `negativeControls` entry in `lab.config.ts` was enough. Now a file without the tag runs as a normal scenario everywhere: in the lab window (its chip and the Negative controls filter), the terminal app, `product-lab test` and MCP `run_negative_controls`. The `lab.config.ts` entry only gives a tagged file the step and the reason it must fail with. When the tag and the entry disagree, the scenario's row shows a warning and its detail explains what to change. A tagged file without an entry gets the exact line to add.
639
+ - 9c3f906: Negative controls are declared by their tags only. `negativeControls` in lab.config.ts is gone: it no longer typechecks, and a lab that still lists it is refused, naming the tags to write instead (`@negative-control`, `@fails-at-step-N`, `@fails-with:<reason>`). `product-lab test --expect-step`/`--expect-marker` and the `expectations` argument of MCP `run_negative_controls` are refused the same way, and the lab window no longer shows the "move to tags" warning.
640
+ - 07225f0: A failed run never blocks the lab. When a failed step may have sent a transaction, the lab checks the chain by itself in the background. It adds the answer to the failed step and to the run's failure message: it did send, nothing was sent, or it cannot tell and why.
641
+
642
+ The next scenario starts at once in the panel, the CLI and MCP. Reconcile is gone: the `reconcile_run` MCP tool, the Reconcile banner, step line, dock button and status row, and the "uncertain mutations" block.
643
+
644
+ While the check is pending, a run that would act as the same identity, or use what the step still holds, is refused with the reason; it is never queued. A pool reading that a new block interrupted is read again before the lab says it cannot tell. Only the environment itself can still stop runs: setup or cleanup failed, or it lost its chain. Then the lab says so plainly and offers Reset.
645
+ - 97234a0: A scenario that introduces several new actors in a row ("Given Ada is a new actor / And Grace is a new actor") now creates them all at once when its environment allows it, instead of one per step. Each step still waits only for its own actor, and a failure names the actor that failed.
646
+ - e0f36c7: New identity's host menu shows each host as a card with its options as small switches inside it, lined up under the host's name; hovering an option shows why you would turn it on. The picked host's card is highlighted (the default one, until you touch another host's switch); the other hosts' options are greyed but still shown and usable. Each host's button has an id, `#new-identity-on-<host id>`, for tests. The menu fits the panel at its narrowest.
647
+ - 4eb2f5a: New identity in the lab window lets you choose the host when your lab declares several: New identity creates on the default host, and its ▾ lists exactly the hosts your lab declares, with an unavailable one disabled and its reason. Each identity row shows its host (CLI, WASM), as its tile does. `snapshot().hosts` entries carry each host's short `label`.
648
+ - 75647d5: In the lab window, a section is named once: the button on top of the tabs. Identities, Tools, Environments, Settings and the other sections no longer repeat their name in a heading under the tabs; the Lab menu on that button reaches every section, as the heading's own menu did.
649
+ - 5c46fe4: The lab window no longer blinks while it updates. The steps, the chain picker, the bottom bar, the evidence, history,
650
+ timeline, Scenarios and Identities views change only what changed, in place: an open section, a scroll position or
651
+ the field you are typing in stays as it is, and creating an identity adds its row without redrawing the others.
652
+ - 03b211d: The README and the setup skill no longer describe patched host releases as coming: none are planned. The host fixes the lab needs are proposed upstream, and the lab moves to the host releases that carry them; until then `bun run setup` builds the patched host locally.
653
+ - debd1ef: The package no longer carries product-lab's `patches/` and `docs/` folders. What it read from them at run time now ships inside it: the truAPI CLI host's lock check and the names of the behaviours a release lacks, the Engine commit the lab tests, and the light fork's layout.
654
+
655
+ A patched truAPI CLI host or a patched Engine can only be built from the product-lab repository, and an installed package now says so by name instead of failing on a missing file. Prepare a local copy of a network with stock Engine: `npx --no-install product-lab fetch --environment paseo-copy --no-engine-patch`. Without `--no-engine-patch`, `fetch` refuses and names that flag.
656
+
657
+ The MCP server's `product-lab://docs/mcp` resource now serves a short guide of its own: the tools by group, the resources and the prompts. The design-section resources (`product-lab://docs/design/{section}`) are no longer listed outside product-lab's repository.
658
+ - dfc20f4: The AI kit tells an assistant where runs happen: in the open lab window by default (`run_scenario`/`run_action` without `where`), asking "in the open lab or headless?" when the request does not say, headless when no window is open, with `lab_open` to start one. The Codex configuration `product-lab ai init` writes now gives the product-lab MCP server 60 s to start (`startup_timeout_sec`); Codex's default of 10 s dropped it without a word on a busy machine.
659
+ - 03dd5cc: A scenario can now slow down or take offline an actor that it put on another host (`Grace is a new actor on the "…" host`, then `Grace goes offline`). The check before the run asks that actor's own host whether it can apply the condition, instead of the default host. An actor on a host that cannot apply it is refused by name before anything runs.
660
+ - 1a0c514: In the lab window, a feature's `{actor} is a new actor` step now ends only once that person's tile shows the app ready (its declared `apps.<id>.ready` state; with the default, once its document has loaded), so a later step never conditions or acts on a tile that has not loaded. A check can read another actor's screen as the run shows it: `scenario.surface(role)` gives that actor's tile in the lab window (absent elsewhere, where the actor's own page is its screen).
661
+ - fca048c: The Notes example has a scenario for the README's lab-window recording (`lab/features/media/`, tagged `@media`); its merge and nightly modes leave `@media` scenarios out.
662
+ - 2469fa2: The Notes reference lab (`product-lab ai init`'s `notes-lab.md`) now reads a publish back: after the app reports a note announced, the publish step checks that Bulletin holds the text under that content id and that the author's index statement lists it with the signer the app named, and fails at the publish step naming the side that is missing. A saved Notes fork whose recorded port block differs from `NOTES_OWNED_FORK_PORT_BASE` now resumes on its own block when that block is free, with a notice; when it is busy, the start is refused naming both blocks, the ports in use, the saved folder and `--refresh`, and nothing saved is set aside or discarded.
663
+ - 1b4ab49: The Notes example's app asks for room on Bulletin only when a publish says the person's allowance is used up. Before,
664
+ it asked once per page load, and each request takes one more slot by design. The host's own submit allocates the
665
+ allowance on first use. Records corrected after rechecking the upstream drafts: the host-lost-block and WASM-saved
666
+ records, backlog 190's lead, and the fork-speed record's withdrawn upstream item.
667
+ - 72c24be: The AI kit's Notes reference names its launch in one word (`app: { launch }`) and lets the lab add what a launch needs, instead of working out its chains, requirements and dev server itself.
668
+ - 4386c3a: The AI kit's Notes reference uses the lab's Chopsticks copy of the local dev chain (`environments: { chopsticks: { chains: ["people"], from: "fast" } }`) instead of its own, so its config brings no environment of its own. With an attached fork (`PRODUCT_LAB_FORK_ATTACH`), Notes' chopsticks now copies the local dev chain's People, as without one.
669
+ - cebdb95: The AI kit's Notes reference uses the lab's own run folders and fixture source instead of declaring its own: `PRODUCT_LAB_OUTPUT_DIR` moves every run output (it replaces Notes' `NOTES_OUTPUT_DIR`, which a load through Notes' `lab.config.ts` still takes over once, with a warning), and the shared fixtures are `notes/` in `PRODUCT_LAB_SHARED_FIXTURES` (`NOTES_FIXTURE_SOURCE` is refused, naming it).
670
+ - 8abbdb4: The AI kit's Notes reference reads this machine's inputs as the lab's own variables, and its copies of Paseo and Previewnet are the lab's. Notes' old names still work once, with a warning, and are refused beside a different value under the new name: `NOTES_OWNED_FORK_PORT_BASE` → `PRODUCT_LAB_FORK_PORT_BASE`, `NOTES_FORK_PORT_BASE` → `PRODUCT_LAB_FORK_ATTACH`, `NOTES_FORK_SNAPSHOT` → `PRODUCT_LAB_FORK_SNAPSHOT`, `NOTES_BASELINE` → `PRODUCT_LAB_BASELINE`, `NOTES_PEOPLE_NODE_LOG` → `PRODUCT_LAB_NODE_LOG` (now every node of the local dev chain), `NOTES_WORKER_CACHES` → `PRODUCT_LAB_WORKER_CACHES`, `NOTES_LIVE_ADA_ACCOUNT` → `PRODUCT_LAB_LIVE_ACCOUNTS` (`Ada=<SS58>`). While `PRODUCT_LAB_FORK_ATTACH` is set, `previewnet-copy` is refused instead of starting its own copy.
671
+ - b99eff1: The AI kit's Notes reference is shorter: its `lab.config.ts` no longer carries the lab's own self-tests (they are an overlay, `lab/self-test/overlay.ts`, applied in one line) or the `notesLab` helper the tests build a lab with (now `tests/helpers/notes-lab.ts`). Nothing changes for your own lab.
672
+ - 865ba61: The Notes example's unit tests no longer read your shell's `PRODUCT_LAB_*` and `NOTES_*` variables, so they pass whatever port base you set (backlog 207). `NOTES_WRITE_BUILT` still applies.
673
+ - c059571: Safer and quieter version notices.
674
+ - Every command the CLI, the MCP server, the lab window, the AI kit and the docs tell you to run is now `npx --no-install product-lab …`. The unscoped `product-lab` on npm is not this package: without `--no-install`, npx in a directory without `@parity/product-lab` would download and run whatever is published under that name.
675
+ - A finished command no longer waits for a slow or silent registry: the daily version check is abandoned when the command is done, and that day's check is not used up.
676
+ - CI is also recognised by `CONTINUOUS_INTEGRATION`, `BUILD_NUMBER` and `RUN_ID` (an explicit `CI=false` still wins): no check, no notices.
677
+ - `product-lab upgrade` recognises pnpm refusing a version younger than its `minimumReleaseAge`, says when the version can be installed, and prints the commands to finish by hand.
678
+ - The MCP server reports the package's version to clients instead of `0.0.0`.
679
+ - d913dc2: A product config names how hosts get the app in one word: `app: { launch: "dev" | "deployed-local" | "deployed" }`. The lab adds what the launch needs to the app's chains and requirements, and `product-lab config`, the lab window and MCP show the launch. A launch the lab's own session cannot do yet (deployed-local) is shown greyed with the line that gives it, and a start that asks for it is refused by name instead of serving the dev server. The resolved config has a new source, `machine`: a value read from this machine's variables.
680
+ - 2a2a860: `environments: { chopsticks: { chains: ["people"], from: "fast" } }` gives a Chopsticks copy of the local dev chain: the lab starts those chains from the locked releases and copies them through Chopsticks, so a test of a copy needs no public network. Its ports sit inside the lab's block, beside the local dev chain's. A chain the local dev chain does not make is refused by name.
681
+ - 2a2c290: The lab reads this machine's inputs itself, so a lab.config.ts names none: `CHOPSTICKS_BIN`, `PRODUCT_LAB_WORKER_CACHES` (one cache per worker of `product-lab test --workers`), `PRODUCT_LAB_BASELINE` (the local dev chain's People runtime and node from a prepared fast baseline), `PRODUCT_LAB_NODE_LOG` (log targets for the local dev chain's nodes) and `PRODUCT_LAB_LIVE_ACCOUNTS` (`Ada=<SS58 address>`: the account the host gives the app for a live person). Each is optional, shows in `product-lab config` with source `machine`, and is refused by name when wrong; an account that is not an SS58 address is never echoed. The local copies of Paseo and Previewnet keep their saved folders under the lab's output folder (a worker's own), on `PRODUCT_LAB_FORK_PORT_BASE`, else 1000 after `PRODUCT_LAB_PORT_BASE`, else 42000, each worker 1000 further on. `PRODUCT_LAB_FORK_ATTACH=<port>` makes the Paseo copy attach a fork already running on this machine.
682
+ - 11fb31d: A product config can state how many ports its lab window and sessions need: `ports: { size: 500 }`. The lab takes exactly that many, from the top of `PRODUCT_LAB_PORTS` or a block it claims, and `product-lab config` shows the block (`500 ports: 48100-48599`). A range that cannot hold them is refused, naming the range, the size asked and what is left; before, a lab silently got at most half of what was left. The function form's `claimPorts(size)` is exact the same way. A config that states no size gets the ports it got before.
683
+ - ab046f8: Environments go by the lab's names only: `fast`, `paseo-copy`, `previewnet-copy`, `chopsticks` and `live-<network>`. The pre-redesign ids (`people-fast`, `paseo-fork`, `paseo-fork-light`, `previewnet-fork`, `people-chopsticks`, `live-next-v2-write`) no longer start anything: `--environment people-fast` is refused, naming the lab's environments. Choose Light with `--environment paseo-copy --option light`. A lab may still declare its own `environmentAliases`.
684
+ - 98562c7: `lab.config.ts` no longer takes the imperative `defineLab({ name, start })` shape: write the product config
685
+ (`defineLab({ app })`) or a lab definition (`environments` and `apps`). A config in the old shape fails to load and
686
+ says what to write instead.
687
+ - a2432c6: `product-lab test --race` and `product-lab test --mutate` now run the same loops as the lab window's Tools page, so a fix to race hunting or test the tests lands in both. Their seeds, waits, printed lines and record files are unchanged: a seed printed before this release replays the same runs.
688
+ - d99c5f3: A run started outside the lab window, by an agent over MCP or from the terminal app, now looks in the window as the same scenario started from the window's own Run. While it runs as two or more people the view switches to Grid, so every person in the run has a tile on screen, and when it ends the view you had comes back. Before, the window stayed on one person's tile.
689
+ - 27ee3aa: A scenario started outside the lab window (by an agent over MCP or from the terminal app) now shows everyone in it side by side as soon as it involves two people, even when the window cannot tell from its Scenarios list which scenario is running. That covers a run of several feature files, a run selected by tags alone, or a name pattern such as one ending in `$`. Before, the window could stay on one person, and a step that checks another person's screen failed because that person's tile was not shown.
690
+ - 3b20065: A scenario that an agent starts over MCP, or that you start from the terminal app, now plays in the lab window's tiles while the window is open, just like a run from the window's own Run. Each person types and reads in their own tile, and a step's network condition (for example "Grace goes offline") applies in that person's tile. Before this, such runs acted on hidden pages, so most tiles stayed still. With no lab window open, runs work as before.
691
+ - 1801cf8: The package carries only the upstream patches it reads at run time (the truAPI CLI host's and Engine's). It no longer includes a product app's page patch or this repository's own install patches.
692
+ - ac2bd70: `LICENSE` now carries Parity's copyright line, and the package's manifest names the files it carries (`files`) and no
693
+ longer has `homepage` or `bugs`. The README starts with the experimental-code disclaimer, has a quick start from
694
+ `npm install`, a section on custom panels, and Security and contribution sections. The lab window's "How to add one"
695
+ link for panels opens that README section on npm, and `product-lab init` and the AI kit no longer say the package is
696
+ not on npm.
697
+ - 8e94b8c: A Playwright page can now apply per-identity conditions (`PlaywrightPage.conditions`): offline and throttled networks by routing, so the app keeps its local link to its host, and a slower CPU on Chromium. Condition sentences stay refused until a host offers them.
698
+ - 85313b8: A tile's address shows the app's host and path without the scheme (the whole origin is its tooltip), and the selected identity's avatar has a plain ring, no glow.
699
+ - 0a7f3c8: With the lab in its own window, the people's window says so in its stage header ("Lab detached").
700
+ - 7bf2dd9: The lab's bottom bar offers each run state's controls: Pause and Stop while a run runs; Continue, Step and Stop while it is paused; Replay, Rerun and the evidence after a failure; the previous step, Play and the next step in a replay. Its line starts with the state in bold ("Paused after step 3 · your turn").
701
+ - 9ee1e93: The lab's Environment and Identities views say each fact once: the Environment header drops the "local" and "healthy" chips its title and status already say (and an "unknown" keep chip), and an identity that is running shows a green dot rather than a "running" chip; the selected identity no longer carries a "Viewing" chip beside its outline.
702
+ - 172ae24: The lab's design page (`/gallery.html`) shows the bottom bar, the stage header and the tiles in each state, and its colours are named for the Polkadot pink design. With nothing running, the stage header names the scenario a Run would start ("Launch reminder · not running").
703
+ - 0318a0c: The lab's scenario library rows are one line, as the design draws them: "file.feature · 2 people · 4 steps · passed 14:02", with a chip only for what is not the usual (unavailable, variants, expected to fail). The people, inputs and tags are in the scenario's detail.
704
+ - 1380591: The lab no longer floats a step caption over the acting person's app: the step running now is in the Run tab's steps, and its place ("Running step 3 of 7") in the bottom bar.
705
+ - 65a1519: A phone tile in the lab now shows the app inside a phone frame (bezel and notch), centred in the tile. Each person's avatar is a filled circle in that person's own colour, on their tile too.
706
+ - f1e53b5: The bottom bar follows the new design: the Lab button, the environment (its live dot, name and what it runs), then the
707
+ run's state in words. Who is shown is chosen from "3 people" over the people; a scenario is chosen in the Scenarios tab
708
+ (Run runs the selected one, named in its tooltip).
709
+ - 0ad4f1e: The lab's buttons, segmented controls and search fields are outlined pills, its chips are outlined, and its cards have
710
+ softer corners, as in the new design; no grey fills and no dividers inside disclosures.
711
+ - e1efb43: The lab window docks the lab beside the people on arrival, like DevTools: left by default, or bottom or right with the
712
+ buttons beside the logo; the choice is remembered. Docking never reloads the apps, so sessions and typed input are
713
+ kept. A header over the people says how many there are and has the grid and whole-stage buttons.
714
+ - 8f22d41: The lab window's dotted grid covers the whole background, around the lab, the people and the bottom bar; the selected
715
+ person's tile has a plain 2 px pink border, with no glow.
716
+ - d4f7fe4: The lab window's Environment view takes the new look: its title in the display font, flat outline cards and rows with no dividers or grey fills, and Start as the solid primary button.
717
+ - f124a3a: The lab window's Identities view takes the new look: 12 px rows, the selected identity in a thin accent outline, a rounded row menu, and New identity as the solid primary button.
718
+ - 9b449cd: The lab window's Lab menu takes the new look and gains one-key shortcuts: R for the current run, S for scenarios, P for recordings and replays, B for the builder, C for the chain console, E for environments and comma for Settings. Every other section stays under More. The new Settings view holds Show cursor, the cursor speed and the theme (dark, light, or following the system).
719
+ - a45e56c: The lab window has no activity bar above the people any more. Each person's tile says in words what they are doing or
720
+ waiting for, the bottom bar shows "Running step 4 of 7 · 0:21" beside a spinner, and the chain heights are on the
721
+ environment button. The bottom right holds Watch, Background and Replay, then Run (or Pause), then Stop.
722
+ - a6e026b: The lab can open in a window of its own, beside the window with the people (the fourth button beside the logo). Every
723
+ control works there and nothing reloads: the apps keep their sessions, and anything typed in the lab is kept. The choice
724
+ is remembered; closing that window, or choosing a docked position in it, docks the lab back where it was.
725
+ - 72fb1f8: The lab window's replay takes the new look: a replay is marked by an info-coloured outline instead of dashed stripes, the recorded screen sits in a rounded tile, the step timeline uses pills with the selected step filled in pink, and a recorded step's evidence shows as flat cards whose colours follow the dark and light themes.
726
+ - 0132c33: The lab window's run report (Evidence & reports) takes the new look: step rows and evidence on rounded outline rows with no dividers or grey fills, and a step's landing results outlined in their outcome's colour.
727
+ - 96e8708: The lab panel is resized by dragging its edge toward the people, in every dock mode (or with the arrow keys once the
728
+ edge has focus); each mode's size is remembered, and a double-click gives the default back. The panel stays readable
729
+ and the people keep at least 40% of the window. Resizing never reloads the apps. The normal, wide and full sizes are in
730
+ the menu beside the dock buttons.
731
+ - ec9583f: Running a scenario no longer closes the lab: Run opens the Run tab beside the people, with the run's steps.
732
+ - c7cfa0a: The lab window's Run tab shows the run's steps in the new design: a status icon per step, who acted and how long it took on one line, and under the step being run (or the one you pick) what the actor's screen did and what the chain shows, each with its own status.
733
+ - e3a2800: Each scenario in the library shows how its last run went: a coloured dot (green passed, red failed, yellow a negative
734
+ control) and "passed 14:02" after its details. Groups are headed by their folder; the play button is round, filled on
735
+ the selected scenario.
736
+ - 4b6e37c: The selected row in the lab's lists (an environment, an identity) is a thin accent outline over a faint tint, as in
737
+ the new design.
738
+ - 05b41b4: The lab's tables have no grey header fill, as in the new design.
739
+ - 4345382: The lab panel has three tabs under its head: Run (the current run's steps, its timeline, past runs and evidence),
740
+ Scenarios (the library and the builder) and Recordings. Each tab remembers where you were in it; everything else is in
741
+ the Lab menu.
742
+ - 23906f8: The lab window's tiles take the new design: the header shows the identity, the host it runs in (CLI or WASM) and its
743
+ device as pills; a condition strip under it shows the tile's network (online, offline with its seconds, or slow with
744
+ its delay and rate), the address bar and the pop-out. In dark and light; nothing went away.
745
+ - 888dae1: The lab window takes the new design's colours (Polkadot pink for the main action and selection), fonts (Inter,
746
+ Unbounded, JetBrains Mono) and icons (Lucide), in dark and light. The fonts and icons are served by the lab itself,
747
+ so the window looks the same offline.
748
+ - 44b7b0c: The scenario builder, the chain console and the Actions and Extensions tools take the lab window's new design: pill
749
+ controls, flat outlined cards with no grey fills, the scenario's name in the display face, and Lucide icons, in dark
750
+ and light. Nothing moved or went away.
751
+ - af7c970: A replay's chain notes are compact: one line per chain ("people #161 → #173 · final", with when each block was observed in its tooltip) and one per transaction, long accounts and hashes shortened with the full text in a tooltip and a copy button; a transaction's block is no longer listed a second time.
752
+ - 11d5134: A replay's chain observations wrap long account ids and hashes inside the panel instead of running past its edge.
753
+ - f53f9c3: The replay says each thing once: one banner over the tiles carries "Read only" (with a lock), the step, the before/after switch, an (i) with when it was recorded and how it was captured, and the only Back to live. The panel lists the recorded steps without a second step-by-step block or explanatory paragraphs. A run blocked by uncertain mutations now shows one compact line, "Uncertain: step 1 may have changed the chain", with Reconcile and Reset; the full reason is its tooltip.
754
+ - 98413cf: In a replay the lab's bottom bar shows Replay pressed and unfaded, with Watch and Background not pressed, as the design draws it.
755
+ - aa3808d: The lab's Run tab heads a run with its scenario and where it is written ("team.feature:4"), as the design does, and says the run's state once: the steps and the bottom bar carry it (a run from History and a negative control's verdict keep their chip). The run's controls are the bottom bar's, except in the lab's own window. After a failure, the stage no longer repeats it in a chip.
756
+ - 8030583: Step rows name who acts once: a step whose words already start with the actor's name shows the avatar alone, and the detail line under a step no longer repeats the name. The recorded runs list shows each run's status only, uses a 24-hour clock, and keeps where recordings are stored and for how long behind an (i) by its title.
757
+ - 35fb12e: Settings picked in quick succession in the lab window (for example light, then system, then dark) are saved in the order they were picked, so the last pick is the one the lab keeps.
758
+ - 9d0dece: The lab's stage header says what the apps are for right now: Watch while a watched run drives them, Hands on while a run is paused, the failed step after a failure, Read only in a replay.
759
+ - f9fda10: The lab panel no longer repeats a run in its status lines: the busy notice shows outside the Run tab, and a failed run's own line is left to its steps and the bottom bar (the lab's own errors still show on every tab). The third person's colour is violet, as in the design, and the environment pill keeps its name whole.
760
+ - 5bf1b13: A step row in the Run tab and in a replay shows a person's avatar only when the step is about that one person. A step about everyone or about the chain ("everyone sees …", "the chain advances") shows no avatar and no name before its words; the row's detail line still says who acted.
761
+ - fe72e57: A tile's header in the lab is the person's name, avatar, host and device and one status dot; what the person is doing ("Acting · waiting for finality") is in the condition strip under it, in words. The run card drops its step, time and progress figures (the bottom bar has them), and the time waterfall has no grey fill.
762
+ - 82eeef5: The lab's tiles keep their host and device names in the header down to 320 px wide, and the address shows the app's origin and path, as the design draws them. Watch | Background | Replay no longer fades while a run is on, and the bottom bar's words stay plain in every state.
763
+ - 9ec9ee6: A visible fill no longer fails on a busy machine just because typing was slow. Each typed key now gets 300 ms beyond the typing delay (it was 50 ms), in a tile and in a detached window alike. Typing goes in runs of 16 keys, each with its own time, so a field whose page stops answering fails the fill within one run's time however long the text. When focus leaves the field, typing stops at the end of that run instead of sending the rest of the text elsewhere, and the fill refocuses the field once as before. A field inside a shadow root counts as focused, and a page that stops answering while the lab reads the field back fails the fill instead of holding it.
764
+ - a961399: The scenario-writing skill (`product-lab ai init`'s `product-lab-scenario`) has a "Write steps in parallel" section: when to put independent people's steps `… at the same time`, when the order is the meaning (reads of another's writes, absence checks, shared state, conditions), that a part is one action or assertion with no table of its own, and an example.
765
+ - 92cbbd0: The Paseo copy (`paseo-copy`, and any saved fork from `paseoCopy()`) can be reset while it keeps chain and people, so `product-lab fixture save <name> --fresh` and a `fixture refresh` rebuild start it from its first boot. Before, keeping its people turned Reset off: `--fresh` was always refused with "offers no reset", and a refresh rebuilt the fixture on the resumed chain. A reset makes a new generation with new people; the people kept with the old one stay in their folder and are never reopened on the new chain. An environment with no reset at all now says why when it refuses `--fresh`.
766
+ - 9d2191c: When a run pauses, the Run tab shows the step it waits at with its details under it, instead of above the steps where they pushed the step out of view; scrolling a paused run no longer jumps back to the top.
767
+ - 92e2dd5: A run refused because the same identity's earlier failed step is still being checked ("Run again in a few seconds") no longer stays on the lab window's status line after that check answers. The refusal is a typed `PendingCheckError` naming the identity, answered with 409 by the lab window's server.
768
+ - f3e9a7b: The local dev chain's people are the framework's (`@product-lab/composition`, people-dev): `peopleDevGenesis` creates People's collections at genesis, `peopleOnboarding` makes each new actor a person (the truAPI CLI provisioner where an identity backend runs, else the lab attester, which now checks that People's sudo key is //Alice before it sends anything), and `standInForXcm` answers the Bulletin allowances a relay-less People cannot send over XCM; `xcmStandIn(environment).skipNext()` is the self-test's hook. Notes uses them instead of its own copies.
769
+ - a4a6598: Keeping chain and people between starts is the framework's (`@product-lab/composition`, people-keep): `keptPeople` gives a kept start the folder of its environment and chain generation, the people saved there with their wallets, the truAPI CLI host's state in that folder, and discards a replaced generation's people; `SavedPeople` and `PeopleLifecycle` (Stop and Start of a person) come from Notes, which now uses them.
770
+ - 9e5a545: Notes' negative control for the XCM stand-in fails its publish in plain words on the step ("Bulletin allowance was not
771
+ allocated: People could not deliver it, and nothing stood in for XCM"); People's own event
772
+ (`Resources.LongTermStorageAllocationFailed` for the account, at its block) is on the error's next line, which the lab
773
+ window keeps in the run's Details. The control's marker is the event's name.
774
+ - f42e5b6: Hosts have plain names in the lab window: "Desktop host" (was "CLI") and "In-browser host" (was "WASM"). A lab can name each declared host itself with `hosts.<id>.label`, so variants of one kind read apart ("Desktop host, network locked").
775
+ - 0d7cef6: The readable output of `product-lab test` now covers every kind of run:
776
+ - each row of `--suite` opens with its own line and ends in a line per row;
777
+ - each worker of `--workers` has its lines after its number, with a line per worker at the end;
778
+ - each run of `--race` ends with its result in words;
779
+ - runs started from the lab window log the same grouped lines.
780
+
781
+ A failed step's error is said once, under the step: the summary repeats it only when no step showed it. Every kind of
782
+ run ends with a `Look at:` line, which also names the hosts' logs its failed runs kept. `--verbose` still prints each run as before, and the lines scripts read (each run's
783
+ `product-lab test …` line, the suite, workers and race lines) are unchanged.
784
+ - 88ccc4a: `product-lab test`'s "What the lab saw" line keeps the reasons a refusal lists under it (up to three, then how many more), so "Scenario … cannot run; nothing ran:" no longer reads as a refusal without a reason.
785
+ - e351f75: `product-lab test` prints a readable run. It opens with the versions and the environment's start, with their times. Each
786
+ scenario follows as a group: one line per step with its time and what it checked on the person's screen and on chain,
787
+ in the lab window's words (`screen ✓ · chain ✓ Bulletin #28`, or `chain: none` when a step checked nothing there). A
788
+ failed step shows the lab's own message, with no stack trace and long ids shortened. The end gives the result with
789
+ where it failed, the lab's answer, the host check in the window's words, and a last line of what to look at: the
790
+ report, the scenario's recording, and the lab's own log lines. Setup chatter and raw hashes stay in the run's log
791
+ (`cucumber.log`); `--verbose` prints the run as before. With `GITHUB_ACTIONS=true`, the start, each scenario and the
792
+ end are collapsible groups, and a failed step is an error annotation on its line of the feature file. The run's
793
+ summary line (`product-lab test <id>: passed; …`) and a negative control's verdict line are unchanged.
794
+ - 3996525: The lab window explains itself in plain words:
795
+
796
+ - Each identity says where it came from and when: "Opened when the lab started", "New identity, made at …", "Made by a run of …", "Came with the saved state …". Its tooltip says how to make one. A username shows only when there is one; it no longer reads "no username".
797
+ - New identity's menu lists hosts your lab could add but does not declare, greyed. Each one says what it is and which config line turns it on.
798
+ - A lab names its environments with `nameEnvironment(entry, { label, description })`, for example "Fast local chain: People and Bulletin" instead of "Relay-less people, bulletin". The bottom bar reads "People + Bulletin · on this machine". The environment card says "a new chain each start" or "thrown away when stopped".
799
+ - The scenario library's filters read "Several people", "Can run here" and "Quick set". The group of scenarios written in code is "Scenarios in the lab's code".
800
+ - A setting that does nothing right now is greyed, with the reason on its row.
801
+ - Every (i) opens its explanation when clicked, including the one beside Focus, Compare and Follow acting.
802
+ - e983290: Recording a run no longer slows the lab window's input: each step's frames are cut from the window's capture in a worker thread, so a highlight hold or a cursor glide is not held up while a frame is decoded and encoded.
803
+ - 37c719d: Update the minimal starter reference to polkadot-api 3.2.1, including its host signer bridge, required dependencies and standalone SDK compatibility override. Host signing and finalized chain checks keep their existing behavior.
804
+ - 2385804: The chain history port has an optional `poolAwareNonce(account)`: the next nonce as the node counts it, including transactions still in its pool from any sender (`system_accountNextIndex`). `PapiChainAccess` implements it, and answers `undefined` on a node without the method. Use it when a setup signs from an account another process may also be using.
805
+ - 376c086: Port blocks stay clear of the ports your OS hands to outgoing connections:
806
+
807
+ - When a lab's ports reach into the OS's ephemeral range (macOS from 49152, Linux from 32768 by default), starting an environment prints one warning naming the block, the range and a base below it, in `product-lab lab` and `product-lab test` alike. Any port in that range can be taken by a browser tab or a WebSocket while the lab runs.
808
+ - "Cannot bind port N", and a chain's "refuses occupied port N", now say what holds the port, for example "held by node (pid 97474, listening)".
809
+ - Every example lab reads `PRODUCT_LAB_PORT_BASE` when its own `<NAME>_PORT_BASE` is unset. The default blocks are now below the ephemeral range: minimal 15000, counter-contract 16000, latest-sdk 17000 (Notes stays at 13000).
810
+ - c2d8215: When a local fork's start loses a service process, the error now says how each one ended (an exit code, or the signal that killed it) and shows the last lines of its log. Before, it named only the log file, and a killed process read as "Exited with code 1" (backlog 197).
811
+ - 7d1bedb: - An app whose Vite dev server the lab detects now gets `VITE_PRODUCT_ID` and `VITE_<CHAIN>_GENESIS`, as the lab's own Vite default always gave them; `product-lab config` shows them as detected. Before, an app detected from the `package.json` at the lab's root never learned its chain's genesis.
812
+ - A product's fixtures: on a host that keeps no person's state (the truAPI WASM test host, a product's only host today), `product-lab config` and `check` say up front that a fixture whose setup makes people cannot be saved, and why. Such a setup is refused before its first person is made, not after it ran. A fixture whose setup makes no people still builds and saves. The keep line no longer suggests the truAPI CLI host in a product.
813
+ - A scenario the lab refuses before anything runs (a step needs a host or capability the run lacks) is explained as `unsupported-here` or `scenario-refused`, no longer as a failed hook with advice to read the logs.
814
+ - A transaction the host approved and the chain refused as `Invalid / UnknownOrigin` is explained by its likely cause: the app forces `VerifyMultiSignature: Disabled`, so the truAPI WASM test host adds no signature.
815
+ - c8c73ed: In a product, making a person on a local environment (an app that writes to the Statement Store or Bulletin) is now refused by name. The lab reads a new person's People member key with the truAPI CLI host, and no release of that host takes local endpoints yet (host-rust-core#1166). The refusal no longer suggests changing host. In `product-lab test`, a scenario whose every step was skipped now prints "skipped: not run" instead of "passed".
816
+ - 7e017f3: A product is never told to build or fetch a patched host. `product-lab init` makes the released truAPI WASM test host the default (`defaultHost: "truapi-wasm"`). `doctor` checks that host, needs no Bun, and suggests only `npx --no-install product-lab fetch`. A missing truAPI CLI host now says it is not supported in a product yet, links the upstream change it waits for (host-rust-core#1166), and names the WASM test host to run instead. `host build`, `host rebase-check` and `host fetch --patches` are refused in a product. The AI kit, its references and the product docs say the same. The kit's AGENTS.md section no longer lists `PRODUCT_LAB_HOST_BIN`, and `ai init` no longer adds it to the variables Codex passes to the MCP server. A product never runs the truAPI CLI host, even when a patched one is already cached on the machine or `PRODUCT_LAB_HOST_BIN` names one.
817
+ - ddc48bf: A read-only public environment offers no integration action to run.
818
+ - 72a9297: On a public network the lab window disables Reset ("nothing resets") and, when read only, New identity, each saying why.
819
+ - c86a35b: Groundwork for race hunting: a seeded race jitter (`RaceSeed`, `RaceJitter`) and a scheduler hook (`stepDelay`) that waits before a step to interleave actors differently, without ever reordering one actor's steps.
820
+ - e8f77c2: The package's README is now a short introduction: what product-lab is, its status, a quick start, how to use it in a product (install, a lab, a scenario, the main commands), how it works, the examples, CI, releases and channels, contributing, security and the licence. The package's own READMEs describe the framework without naming any product. The longer material moved into the repository's documentation (the concepts and the command line pages).
821
+ - 81dfffe: The Notes reference in the AI kit (`product-lab ai init`) now declares its negative controls so that they pass whoever plays the actor. Before, a control run in the lab window with the actor bound to an existing identity, such as "Person 1", was judged "failed for another reason" rather than "failed as intended", because its expected message named the actor ("Ada"). The two markers that named the actor now start after the name. The same applies to your own lab: a negative-control marker that should hold for any identity must not contain the identity's name.
822
+
823
+ The lab window's control helpers (`@parity/product-lab/shell/controls`, used by scripts that drive the window) open a recording's replay by waiting for the replay banner over the tiles, where the redesigned window shows it.
824
+ - eff1dc0: The lab window offers Reconcile wherever it says a failed run may have changed the chain: a banner over the run's steps says which steps, why the lab waits and what Reconcile does, and the failed step and the bottom bar carry the button too. While it reads the chain it says so; afterwards it says per step whether the transaction landed (with its block), did not land, or is still unknown and why, and whether the lab is free again. A step whose action already knows what it sent says that instead of offering Reconcile. Any status message that asks you to reconcile, reset or restart now has that button, a list that failed to load has Try again, and Restart confirms, then stops and starts the environment. The Shared activity lane names whose account a step held instead of its address, and each of its pills stays on one line with the full text on hover.
825
+ - d94f771: Recordings of `product-lab test` runs now name their feature file, line, tags and fixture too, so a failing test run,
826
+ in CI or locally, can be bundled with `product-lab bundle <recording>` and rerun with `product-lab reproduce`.
827
+ - 4ff35ac: A recording of a feature scenario now names its feature file, line, tags and the fixture it started from; recordings made before still open as before.
828
+ - 3c989b3: A `product-lab test` scenario that fails in a custom `step()` or a hook is now recorded as failed, with the step and
829
+ its error, instead of passed, so it can be bundled and rerun like any other failure.
830
+ - c3a221f: Recorded runs open while the environment is stopped, even when the last run ended just before the stop: the lab window no longer asks you to "Finish the active run" when nothing can be running.
831
+ - 3285486: The lab stays responsive while it starts and stops processes: starting a tree, stopping one and waiting for it to exit no longer freeze the lab, its window or the MCP server for up to five seconds while the process table is read.
832
+ - 368d9d4: The package names no private product or branch: a Chopsticks adapter comment and the core README say what they mean in general terms. Before a release, `tools/release/src/main.ts check` now refuses a package that names a private product, repository, branch or commit, ships a `docs/`, `patches/`, `examples/` or `test-support/` folder, holds an absolute path from the packing machine or a token, or whose files differ from the signed-off list in `tools/release/baseline/files.txt`. Each refusal names the file and the rule. Nothing is published.
833
+ - 2b65a9d: A product that never installs `bulletin-deploy` now type-checks against the package without `skipLibCheck`. The
834
+ Bulletin deploy adapter's `BulletinDeployLibrary` is declared by what the adapter uses (the DotNS client and the
835
+ environment resolution) instead of as bulletin-deploy's module type, so the package's declarations no longer import
836
+ that optional peer. The release check refuses a package whose declarations import an optional peer.
837
+ - f3e0a0d: The published `package.json` declares public access (`publishConfig.access` is `public`), so installing it needs no npm login. Nothing changes in how it installs or runs.
838
+ - 3d2d4cf: Use the released truAPI CLI host 0.26.0 on local networks and follow its navigation requests. New labs now default to the CLI host. Backend onboarding uses the released host whenever it supplies local routing, including in the repository. Repository builds use the same base with request decisions, native signature evidence and bounded socket shutdown.
839
+ - dd60420: A saved copy of Paseo or Previewnet, a kept local dev chain, kept people and a remembered Full/Light choice stored under an environment's old name (`paseo-fork`, `people-fast`, …) move to the new name (`paseo-copy`, `fast`, …) the first time the lab loads, with one line saying so, so nothing is rebuilt. A kept local dev chain takes the new name in its folder and its record, and one kept under `.product-lab/environments/relayless/` moves to `.product-lab/environments/`, where every lab now keeps it. When both names exist, nothing moves and the line says which one is used.
840
+ - bb1102b: A recording's replay steps, plays, pauses and closes without redrawing its frames, evidence and scrubber; the builder's
841
+ run progress and state, a run's steps and the workspace's processes update in place.
842
+ - d9451ef: A replay says once, behind its (i), that the apps had a synthetic camera and microphone, instead of a chip on every tile and another in the panel.
843
+ - 7eef755: `report.html` reads in about one screen per scenario: each step's attachments are closed under a one-line summary
844
+ ("call trace: 1 call, 4 readings, 24 KB"), its screen and chain checks stay visible as one line each ("✓ chain,
845
+ Bulletin #24 (finalized): holds exactly that text"), errors and images stay visible, and passed hooks fold into one
846
+ line. The raw data is still in the report, one click away.
847
+ - db08f0a: Reset stays available on a chain kept between starts: it asks first, says what it discards (the kept chain and each person by name), and starts a new chain. When Reset is off, its hover says the real reason (a public network, a running scenario or operation, or the environment's own reason) instead of "no reset owner".
848
+ - eae2acf: A resource reads the lab's chains: `defineResource({ read({ services, actor, chains }) })` (and `watch`) get the same opened connection per chain that steps get, so a panel can show a balance or the finalized block with no connection of its own. Notes' account panel uses it under the default session.
849
+ - 7432d30: The lab's check after a failed step now counts a People resource claim its host made for the identity's app (`AsResources`, no signer by design) as the step's transaction. On Notes a failed Publish is no longer answered "cannot tell" for that reason alone. When the lab cannot read whose a transaction is, it says in words how many it read and why the others could not be read.
850
+ - 1de5c0d: When a lab run is killed before it can stop what it started (a forced exit, a crash), the next run now stops the chain node, host and app servers it left behind and says so ("Stopped people-node in …: left running by lab process 14816, which exited without stopping them"). Before, they kept running and the next run failed on their ports ("people node refuses occupied port 60060", "No free port in 60070-60070") until they were stopped by hand. Each started process records the lab process that started it; what a lab process still running started is left alone.
851
+ - f0c5bc3: In the lab window, a lab panel opened just before a watched run now stays docked beside the people instead of sometimes closing when the run starts; in a phone-width window, where it covers the people, it still closes.
852
+ - 9b0607f: The lab window no longer opens a `chrome://webrtc-internals` window beside it. The page the lab uses to watch WebRTC peers is now hidden. A visible browser that cannot hide it does not track WebRTC peers, and the host check says so.
853
+ - 8f1a655: The lab window's run card counts every write a run caused, by who wrote it ("Writes: 5 · Ada's host 2 · Grace's host 2 · the lab 1"), not only the lab's own transactions; a lab transaction's row names the person it was for, and the Notes stand-in for XCM says "the person's host" with the account shortened.
854
+ - 9cb431f: A test run's Cucumber process is told which fixtures its selected scenarios start from (`PRODUCT_LAB_RUN_FIXTURES`, each as `<fixture>@<environment>`) and how many scenarios name none (`PRODUCT_LAB_RUN_UNFIXTURED`). A lab's own Cucumber run can then restore them, or refuse them before its environment starts. The lab's product integration example uses this: its `product-lab test` now runs scenarios that start from a fixture on its own lab, each restoring its fixture, and refuses a run that mixes them with acceptance scenarios (backlogs 213, 193).
855
+ - e4c5ae8: While a scenario runs, the lab window's Compare (Grid) view shows only the people in that run, so the lab's own idle identity (Person 1) no longer takes a tile beside them. It comes back when the run ends. This holds whether the run was started from the window, from the terminal app or by an agent over MCP.
856
+ - 3b8663c: A local fast chain whose clock runs onto the next day while the lab is open (its blocks move the clock much faster than the wall clock) now stops the lab with a plain message naming both clocks, instead of later failing claims and new people with "NotAvailable" or "UnableToSign". Reset gives a new chain.
857
+ - a9c1fc6: A lab's window now records itself per configuration file, not per folder. Two configurations in one folder (`lab.config.ts` and `lab.live.config.ts`) start side by side: the second prints "Another lab (<name>, <window>) is also running from this folder" instead of being refused. A second window of the same configuration is still refused, naming the first. The MCP server and `product-lab test` attach to the window of their own configuration.
858
+ - cbbd4dd: Looking for a running lab window creates nothing. A start with refused flags, or with a configuration that does not exist, now says so instead of failing to create `.product-lab/running` in a folder that is not there.
859
+ - a6b1b91: The lab window's Tools page can save an exploration's smallest failing scenario as one of the lab's feature files: "Save as a feature" writes it into the lab's features folder as `explored-seed-<seed>.feature` (never over a file already there), shows the saved file's first lines and opens it in Scenarios. It refuses, saying why, when the lab's features glob names a folder outside the lab's directory.
860
+ - 78b1180: An identity your lab brought back from its workspace says so in Identities: "Saved, made 23:40; back at 06:12 · kept in .product-lab/…". Before, it read "Opened when the lab started", as if it were new. Its tooltip says how the lab keeps identities between starts.
861
+
862
+ A saved chain state in the environment picker says what made it (its setup, on which fixture, or the running state saved as it was), when (a clock time and an age), how many identities it holds and where it is kept. In a narrow panel, an identity row puts its actions under its name, so the name, where it came from and its host are read whole.
863
+ - 54cbdf4: The lab window's Scenarios library no longer redraws itself every second and a half: hovering, focusing or selecting a scenario now stays put while the lab is running.
864
+ - 1fdd67f: A scenario that starts from a fixture (or is `@isolated`) gets up to 31 minutes to restore its start state, not 5. If a run still gives up on it, the run waits for the restore to finish before stopping its environment, so the network no longer comes back up after the run ends and the command exits (backlogs 216, 206).
865
+ - 0077380: A screen check passes only on what a person can see: headless reads and waits now scroll their target into view and fail naming it off screen when it cannot be seen, as the lab window's do.
866
+ - cccc93d: The lab reads a product's account from the truAPI CLI host with `signing-host --script` and no longer needs the product-account-read patch.
867
+ - e2e742e: Use the released native PAPI 3 transaction creator and upstream transport retries without a local SDK patch. Use SDK host 0.29 and truAPI 0.26 for current examples, host probes and the generated minimal kit. The lab's product integration example follows SDK 0.40. Remove the global truAPI 0.23 downgrade; each upstream application keeps its own dependency lock.
868
+ - 4a82e00: A second `bun run lab` (`product-lab dev`) of a lab that is already running in another terminal now stops before it
869
+ starts anything, in the same words as MCP `env_start`: "The lab window at http://127.0.0.1:13250 is already running
870
+ this lab (Notes, process 1234): starting here would start a second lab on the same kept chain and ports. Use that
871
+ window, or stop it (Ctrl-C in its terminal) and start again."
872
+ - f667559: In the lab window, a switch (Focus / Compare / Follow acting, Watch / Background, the theme, cursor speed…) never wraps onto a second row: where its row does not fit, its buttons show their icons only, each named by its tooltip and for screen readers.
873
+ - 1b153b6: The minimal lab reference (`minimal-lab.md`) now reads its remark back inside the send step. After the app reports `finalized`, the step waits until People's finalized chain shows `System.Remarked` from the actor with the text's hash, in a block after the click. If the chain does not hold the remark, the send step fails and names the chain, instead of a later check failing.
874
+ - 2738947: Host sessions can open in a place the lab gives them, such as a lab-window tile: `HostSessionRequest.placement`, `HostCapabilities.placement`, and `placeSessions` on the lab runtime and environment. Without a placement nothing changes.
875
+ - 74cba0c: Preparing a Paseo copy on a Mac without eturnal no longer fails at Engine's download step: the copy runs with the TURN relay off, as `bun run setup` and the first start already said.
876
+ - 48110ff: Add an opt-in shared WASM browser shell that keeps one wallet and persistent host storage across canonical product frames. Existing WASM host sessions and defaults are unchanged.
877
+ - fab4ef4: The Markdown the package carries no longer links files it does not carry, and one README written for the repository's contributors, `adapters/lab/module/README.md`, leaves the package (the client-bundle rule it states is in the package README's "Custom panels" and the panel README). In the 33 READMEs that change, the 562 links to files the package does not carry (the repository's `docs/`, layer READMEs and TypeScript sources) are rewritten. 32 now point at what the package carries (15 ports' `.d.ts`, the domain README's "Folders and exports", the MCP README's "Tools", the package README's "With an AI assistant", "When a check fails", "Commands" and "Custom panels", the scenario skill's "Negative controls" and the app skill's dev-server section). Citations of design and verification records are removed with their brackets and separators, as are the sentences and References items that only pointed at one. A sentence that also stated a fact keeps the fact in its own words, and the remaining links keep their words. The MCP README names the guide the running server serves, the resource `product-lab://docs/mcp`. The AI kit's minimal and Notes references no longer mention product-lab's repository. A release now refuses a shipped `.md` whose relative link the package does not carry or whose anchor matches no heading (rule `markdown-link`), and a kept README that is missing, lost a heading, or lost words of its own text (rule `markdown-keep`).
878
+ - d406ff6: Forward only the selected runtime transaction-extension pipeline to legacy signers, preventing malformed transactions on runtimes with multiple pipelines. Refuse nonzero pipeline versions that the legacy signer interface cannot convey.
879
+ - 38b3d63: `product-lab ai init` and `product-lab ai doctor` read Codex's `config.toml` with smol-toml 1.7.1 (was 1.6.1), which fixes GHSA-7w5x-hrqm-74c2: a malformed TOML document (a value in an array or inline table followed by a comment that ends the file, such as `a=[1 #`) made the parser loop forever, so the command hung. Valid files are read as before.
880
+ - d78a017: `smol-toml` 1.9.0 (was 1.7.1), which `product-lab ai init` and `ai doctor` read Codex's TOML config with: it fixes a
881
+ quadratic-time parse on documents with many keys (GHSA-r4xh-jqrq-34v2, moderate) and a denial of service on malformed
882
+ documents (GHSA-7w5x-hrqm-74c2, high).
883
+ - 099b4c3: The host check no longer sees a WebSocket without its handshake Origin when it reads the network evidence right after the socket opened: a socket the host opened could then be reported as unattributed.
884
+ - 02c3321: A negative control's run now carries `PRODUCT_LAB_CONTROL_RUN=1`, so a lab can bound the checks its controls are written to fail more tightly where its positive runs are measured to be fast, and say which bound it used.
885
+ - 872a3e1: `product-lab test --negative-control --tags <expression>` (or `--name`) runs only the controls the selection picks. The others are listed as not selected instead of each being refused for an empty selection and failing the run; a selection that picks no control exits 1.
886
+ - 425509e: `product-lab dev --fixture <name>` starts the lab from a saved fixture, its chain and people restored as the environment starts. A scenario that names that fixture then needs no restore, and an `@isolated` one saves no copy. A fixture that does not fit is refused, saying why.
887
+ - e7cc546: An `@isolated` scenario that starts on a state that is exactly a saved fixture (just restored or saved, nothing run since) no longer saves a copy of it first: the fixture gives the state back after the scenario. On a full local fork this saves a drain, a stop, a copy and a resume (about 110 s) per scenario.
888
+ - 5169c75: An `@isolated` scenario run in the lab window, by `product-lab fixture run` or through MCP now says how its start state was kept (saved, kept from a fixture, or recovered), as a `product-lab test` run already did.
889
+ - 8b95b75: Restoring a fixture or an isolated scenario's start state on a local fork no longer drains the network before it stops: the restored data replaces it, so the drain (about 30 s) settled nothing anyone reads.
890
+ - a5b8fdf: `product-lab test --negative-control` with no feature path starts the environment once for all the controls instead of once per control. Each control still starts from a fresh state: the environment restarts after a control that changed it, and a control that cannot run on the chain no longer pays a start and a stop.
891
+ - 4fe2e4a: A Chopsticks environment now refuses to start, by name, when the sqlite3 package it needs for its databases has no native build: "sqlite3 has no native build (…), so Chopsticks cannot open its database". The message gives the fix: `npm rebuild sqlite3` in a product. Before, Chopsticks exited before it was ready, with typeorm's `DriverPackageNotInstalledError`. In product-lab's checkout, `bun run setup` now builds sqlite3 when Bun installed it without running its install script.
892
+ - 8f33684: A command that ends very quickly no longer fails to start with "The command's start was not acknowledged and its group anchor has exited" when the machine is busy: once the command has been seen to start, it counts as started.
893
+ - 5204378: `PRODUCT_LAB_STATE_DIR` tells the lab where to keep the lab window's remembered choices: the RPC per chain and each environment's option. It is optional; unset, they stay in the lab folder's `.product-lab/state`. A test that loads your lab can set it so it never reads or changes what a person chose in their running lab.
894
+ - 9d2191c: The Run tab says where a step was verified ("Verified on Grace's screen and on the chain") instead of "Checked twice", and names what each action touched ("clicked Publish", "typed "Grace was here" into Note"); the technical locator stays under Evidence.
895
+ - 7cc6751: A network condition a scenario step sets (for example "Linus's network is "slow-3g"") now shows in that person's tile in the lab, named by its profile ("slow 3G"), also when the run is in the background; it goes back to "online" when the scenario ends. The lab snapshot carries each identity's conditions (`actorConditions`).
896
+ - 19c28d4: A step held at a pause or a breakpoint no longer keeps its process alive by itself. The day-long limit on how long a person may hold a step now runs on a timer of its own. That timer never keeps Node running, and it is cleared as soon as the step goes on. Before, Cucumber's own hook timer stayed referenced, so a run whose gate was never released kept its process open for a day.
897
+ - 6d16849: The lab window no longer flashes at every step: a run recording's frames are cut from one capture of the whole window, taken once per step boundary for every person, instead of a clipped capture per person (a clipped capture made the headed window show only that part for a moment).
898
+ - 1c1abc9: Prepare stock Previewnet Engine v0.11.0 by default for local network copies, and refuse stale Engine build records before starting a fork.
899
+
900
+ Enforce one live network per prepared Engine checkout, including shutdown. A second start is refused immediately because stock Engine cleanup sweeps service commands by checkout path. Use a separate cache or checkout for concurrent networks. A checkout lock whose lab exited is recovered, with a warning, only when every Engine process that lab recorded has stopped too; otherwise the start is refused. For a saved workspace it names the workspace: starting it again stops what its interrupted run left, while holding the lock. For a one-off Engine network it names the processes to stop, since no later start stops them. A lock that records no process list to check is never recovered by itself. Live locks are never broken.
901
+
902
+ A shared fixture bundle's provenance records the Engine build prepared in the cache, and flags a build at another commit than the tested one.
903
+
904
+ For parallel Engine runs, set PRODUCT_LAB_WORKER_CACHES to a separate cache for every worker, including workers that resume saved forks.
905
+ - 5e3e098: A Statement Store reader can now read an account's statement allowance at the best or the finalized block (`allowanceAt`). A node accepts a statement against the best block, but it removes the statements of an account that has no allowance at the finalized block. The Notes reference lab (`notes-lab.md`) now uses this: a publish waits until the author's allowance is finalized and reads the note once more. If the note is gone by then, the publish fails with "accepted at best and evicted at finalized", naming both blocks, instead of a later check failing with no clear reason.
906
+ - 356ecd3: The agent kit's Notes reference now shows the example app waiting until the author's statement allowance is finalized before it submits its first statement, and the publish step recording the finalized block that wait ended on (`allowance`). A store removes the statements of an account with no allowance at its finalized block, so on a chain whose finality lags, a statement submitted at once was accepted and then removed.
907
+ - 48110ff: Expose bounded read-only permission-status inspection for registered products in the opt-in shared WASM shell.
908
+ - 48110ff: Add an optional fail-closed byte admission bridge to the shared WASM host shell. It preserves the registered product and provider channel for original requests and responses and waits for explicit admission before forwarding either direction. Existing sessions without a bridge retain their synchronous forwarding behavior.
909
+ - ac2bd70: Strip comments from compiled JavaScript while retaining copyright and SPDX notices and declaration documentation.
910
+ - 1f5e850: A tile's strip in the lab window says what its person is doing in words, as the step cards do ("Acting · clicking Publish", "Acting · typing into Note", "Acting · waiting for the Publish button"), instead of a call's name ("Acting · click…"); the hover keeps the full text, and no locator shows.
911
+ - 65e2bb4: A kept relay-less start now lists every chain generation its environment still keeps (`provenance.workspace.kept`), so
912
+ a lab can remove the people of chains no longer kept. The Notes example does so at each kept start and says whom
913
+ ("Notes removed people of chains no longer kept: …"); identities the lab did not make stay.
914
+ - eca83c1: The lab window's switch warning names where it goes the same short way on both buttons: "Switch to Local copy of Paseo (Light) and run", and "Discard Fast local chain, switch to Local copy of Paseo (Light) and run".
915
+ - cb60d75: A switch between environments names them by their labels: the warning before a run on another environment ("Run on
916
+ Local copy of Paseo?", "Stay in Fast local chain: People and Bulletin", "Switch to Local copy of Paseo and run"), the
917
+ environment switch dialog, the switch plan's consequences, and the run's first step ("Switch to Local copy of Paseo").
918
+ An environment's id comes first only when another environment shares its label.
919
+ - da0d77c: A switch to an environment with more than one way to run says which way it starts and why. The switch plan carries
920
+ `option: { id, label, why }`, taken from the environment's pick: the person's last choice, else what fits this
921
+ machine. Its consequences add "<environment> starts as <why>", and before a run on it the lab window's warning reads
922
+ "Switch to <environment>, <option> and run".
923
+ A switch that discards the environment it leaves now names where it goes on its button too, in short labels: "Discard
924
+ Fast local chain, switch to Local copy of Paseo (Light) and run" (it read "Discard …, switch and run").
925
+ - ec72153: The lab window: after a switch, while the run waits for you to allow its root calls, the Run tab keeps the switch as the run's entry and says what it waits for, instead of "No run yet"; declined, the switch leaves the Run tab.
926
+ - 92137ba: The terminal app (`product-lab dev` in a terminal) now takes the mouse while it shows: the wheel scrolls the app's screen (Logs, lists, Run, Help) instead of the terminal's history behind it, where macOS Terminal showed old shell lines above the app. Mouse reporting is turned off again when the app closes, crashes or hands the terminal to an agent. To select text while the app shows, hold Option while you drag in macOS Terminal (Shift in most other terminals).
927
+ - ae5decc: A lab started inside `node --test` no longer writes to the test runner's standard output. That output carries the runner's own messages, and a line written into it could end the run with "Unable to deserialize cloned data due to invalid or unsupported version". `startDev`'s progress now goes to standard error in a test file. The `@product-lab/cli/own-running-record` preload also sends `console.log`, `console.info` and `console.debug` there. A lab started outside a test prints as before.
928
+ - 310fcd8: Text in the lab window wraps instead of running past the panel's edge: content ids, addresses and errors break where
929
+ they must, at the panel's default width and at its narrowest. A run's title gets the card's width, with where it is
930
+ written on its own line below it; a scenario's description shows up to three lines (its tooltip has the rest), and its
931
+ title is never cut. A person's tile now shows their host as soon as the lab knows it (a saved identity reopened showed
932
+ none). The Run setup's identity choices, the Environment section's chains, processes and notices, a feature run's
933
+ progress and the recordings list update in place instead of redrawing.
934
+ - 382d9f9: In a narrow lab-window tile the device menu is an icon that opens the same list, so the address bar keeps its room.
935
+ - ce27165: Fixed: in the lab window's grid, the selected identity's name no longer runs over the address bar's reload button and address. The "Selected" label is now its own chip beside the name, which is shortened with an ellipsis when the tile is narrow.
936
+ - cff5c29: The host pill on a person's tile now shows what that host cannot do yet, as the person's row does: a warning mark that gives each limit and its reason on hover, for example "can't read Bulletin" on truAPI WASM.
937
+ - 1dbc74d: In the lab window, a tile whose identity plays a scenario actor under another name says so: "Person 1 · as Ada", in a quieter style after the name. Before, the tile said only "Person 1" while the steps said Ada.
938
+ - 5307acf: In the lab window a tile's strip keeps the app's whole origin in its address: the acting words beside it wrap to a second line, and only then end in an ellipsis.
939
+ - 3ee8937: During a switch or a reset, the lab window closes each identity's app as the operation begins ("Ada's app is closed"),
940
+ so no app is left calling a host that stopped; the apps open again once the environment runs. The snapshot's running
941
+ operation says so (`operation.leaving`).
942
+ - 8d8f5cb: On a tool's page in the lab window, the command shown under "The same from a terminal" (and what Copy the command copies) now always matches the form. Before, when you changed fields quickly, an older answer could arrive last and leave a command the form no longer held.
943
+ - 547f4a7: The lab window's Tools page no longer opens blank. Find problems used to show an empty list for about five seconds on the first visit and after every return. Switching between Find problems and Characters looked like the only way to make the tools appear. The page now says "Reading the lab's tools…" until the list comes, and the list comes in well under a second: the lab reads the suites a lab declares from its config instead of planning each suite on every read.
944
+ - c3010ca: In the lab window, the button on top of the panel's tabs names what the panel shows (Environments, Identities, Current run, Chain console, …) with that section's icon, instead of the logo and "Lab"; it still opens the Lab menu. The bottom bar's Lab button is unchanged.
945
+ - 07ef089: In a terminal, the lab's title no longer shows "esbuild" while the lab runs: tsx's esbuild service runs in a session of its own, outside the terminal's foreground process group, so a terminal that names its foreground process (macOS Terminal) shows the lab. Starting in a terminal takes about 0.2 s longer; without a terminal nothing changes.
946
+ - 03957ed: The lab's terminal app fits the terminal: it no longer draws the header twice or leaves old lines behind in macOS Terminal. It uses the whole screen and gives the terminal's lines back when it closes, cuts long lines instead of wrapping them, and draws again when the window changes size.
947
+ - 7da49fc: `product-lab dev` checks the terminal app's packages before it starts anything: when one is not installed it says so at once with `bun install` and runs with plain lines, instead of stopping after the chain, the people and the window had started.
948
+ - e6925e6: The terminal app's People screen says whether people are kept between starts the way the lab window says it: what this start did and why, what keeping keeps of the people (or why it keeps none), and where. It no longer points to a lab.workspace.config.ts that labs no longer have; Config names `keepBetweenStarts` in lab.config.ts instead.
949
+ - b681298: In a terminal, `product-lab dev` (and every example's `bun run lab`) takes the whole terminal from the first moment, as Claude Code and Codex do: the start's checklist shows inside the terminal app instead of as lines under your shell's history. A kept chain whose day ended asks inside the app whether to replace it (y or n). A start that fails shows inside the app with its words; `q` leaves, and the failure is then printed once so it is not lost. Without a terminal, with `CI` or with `--plain`, the plain lines stay.
950
+ - 4dc2a79: The terminal's title no longer flips to "ps" every second while the lab runs: the lab reads the process table outside the terminal's foreground process group. The terminal app sets the title to "product-lab · <lab>" while it shows and puts the old one back when it closes.
951
+ - ef7b7df: A runtime upgrade the chain rejects before the lab first looks is told as rejected at once, instead of waiting for the upgrade tool to time out.
952
+ - dd260f2: The CLI's usage now names `upgrade --force`, the option `upgrade` reads; it said `--allow-dirty`, which `upgrade` never accepted.
953
+ - b6c9c56: Visual checks can wait for your app's screen to settle before each screenshot: `defineLab({ checks: { visual: { settled: ['[data-testid="publish"]:enabled'] } } })`
954
+ names your app's own elements whose presence means it is at rest (`settleTimeoutMs`, default 120 s). A step that
955
+ returns before the app settles, such as a publish that moves on at inclusion while the app waits for finality, no
956
+ longer gives a different screenshot on a chain whose finality lags. A screen that never settles fails the step,
957
+ naming the selector and the time waited.
958
+ - 4dcb5af: The host check credits a truAPI WASM host's own Bulletin stores to its app, as it does for the truAPI CLI host: the WASM session reports its Bulletin account as one it signs with (`session.resourceAccounts()`, `signs: true`). A clean Notes run on the WASM host no longer warns about a Bulletin store it signed itself.
959
+ - 4539211: A person on the in-browser (truAPI WASM) host shows up front that the host cannot read Bulletin yet (upstream): a
960
+ "can't read Bulletin" chip on their row, with what that means for the app. A host adapter can declare such limits
961
+ (`HostProvider.limits`), and the lab's own description of the host follows them.
962
+ - 7ac2ff8: The WASM test host now runs `@parity/truapi-host` 0.23.0, the truAPI the apps' Product SDK speaks: on 0.20.0 every publish failed with `MalformedFrame: Input buffer has still data left after decoding!`. A WASM host of another truAPI release than the `@parity/truapi` installed beside it is now refused by name before a session starts.
963
+ - 485d19d: On the in-browser host (truAPI WASM), the host check no longer reports the host's own storage and Statement Store claims as "sent around the host". It credits them to the person, as it already does on the desktop host. The host page's sockets to the chain now count as that person's tile's own when they come from scripts that only that page loaded. A headless lab window runs full Chromium, as the hosts' browsers do, so it observes WebRTC too.
964
+ - 0e02225: The WASM test host can open a person's session in a place the lab gives, such as their lab-window tile. Each placed session signs in only its own tagged host page. Where its network cannot be routed alone, the session records why in its evidence and reports no blocked requests.
965
+ - 6d97b98: On truAPI WASM with the network locked, the host check no longer says it cannot tell whose the host's chain connections are. The browser sets each connection's origin, and a page cannot change it, so a connection from the host page's own origin counts as the host's. A connection from the app's origin, or with no origin, still counts as the app's.
966
+ - de69f2a: A person on the in-browser (WASM) host now shows one scrollbar, the app's: the test host page no longer scrolls by a
967
+ few pixels around the app.
968
+ - 1822795: A lab with `sessions()` of its own can declare `defineLab({ sessionPorts: { from, to } })`, a range inside its own port block for the origin gates of its deny-by-default hosts. Without it, those gates take the framework's fallback block 40000-40999, which every such lab on the machine shares, and the run's output now says so when a gate first takes a port there. `PRODUCT_LAB_SESSION_PORTS` still wins.
969
+ - 12091ee: In the lab window, a person on the in-browser host made after a chain reset or a restored fixture now runs in their tile like everyone else. Before, their tile showed the app without its host, and the app waited 120 s for an account ("getProductAccount timed out after 120000ms"). A Watch run that meets a person whose tile shows the app without its host now stops at once and says what to do, instead of waiting.
970
+ - 525bd3b: The host check no longer says "Signing evidence failed: page.evaluate: Target page, context or browser has been closed" for a truAPI WASM person moved into their lab-window tile: a stopped truAPI WASM session keeps the signing log it had when it stopped.
971
+ - 14e4c22: In the lab window with two or more people on the truAPI WASM host, the host check and `@deny-by-default` scenarios now tell each person's chain connections apart, instead of saying "Chromium named no frame for this websocket traffic" for every one of them.
972
+ - 4539211: In the lab window, a person on the in-browser (truAPI WASM) host with "network locked" now has their lock applied
973
+ to every request their tile makes. Requests the lock refuses are blocked and listed, still after the window is
974
+ refreshed. Only sockets stay open in the tile, and the person's row and tile both say so: "network partly locked:
975
+ sockets open", with why. Before, the tile applied no lock at all while the row said "network locked".
976
+ - fffb983: The host check can see a person on the in-browser (truAPI WASM) host in the lab window. The window's traffic is
977
+ observed from the moment it opens, and each tile's traffic, its workers' included, is read by frame. The host's own
978
+ traffic is told apart from the app's, so "host and app share a context" is said only where the browser named no
979
+ frame. In a locked tile, sockets are observed and listed in the host check, not blocked, and the tile says so. A
980
+ browser cannot block one tile's sockets, and in headless runs a worker's sockets are not blocked either; the lock's
981
+ words now say that.
982
+ - 6776ffa: The host check no longer misses what a worker sends on its first line. On a local environment where every identity is one the lab made, the lab's browsers and the lab window pause each new worker until the lab watches its traffic. To do that they open a debugging port on 127.0.0.1, at a port the system chooses, and never log it. Every local process of every user on the machine can reach that port while it is open. So it stays off on a public network, when the lab declares pre-onboarded identities, and for a dot.li host. `workerHold: false` in lab.config.ts turns it off everywhere. When it is off, the host check says why a worker's start was not held.
983
+
984
+ Switching the lab window to a public network asks first, in the switch's confirm: the window reopens without its debugging port, keeping your runs and recordings and the tab you had open, then switches. Settings shows "Hold worker starts", and when it is off, greys it out and says why.
985
+ - ce27165: Fixed: a negative control run in Watch mode in the lab window is now judged at the step and for the reason `defineLab({ negativeControls })` declares, as it already was in the background. Before, a Watch run of a declared control finished without a verdict.
986
+ - 62c0b81: Fixed: a scenario that changes an identity's network (`Grace goes offline`, `Grace's network is "slow-3g"`) now runs in Watch mode in the lab window. Before, Watch refused it before anything ran, while the same scenario ran in the background. The identity's tile is conditioned (its app's requests fail or slow down; its link to its host is kept), and so are its host's own connections. A slower device (`Grace's device is 4 times slower`) is refused in a tile with the reason, since every tile shares the lab window's renderer; open the identity in its own window for that. A tile's own WebSockets are not conditioned.
987
+ - 880db89: The lab window's Settings shows "Hold worker starts" as on from the moment the window opens. Before, the window could answer the page before it had finished opening, and Settings then showed the hold as unavailable until something else redrew it.
988
+ - cbf4f36: A run in the lab window (or any in-process run) removes its isolated scenarios' saved start state when it ends, passed or failed, so the next run no longer restores it first.
989
+ - 9e51512: The lab window says an environment whose chain is forked is "a copy of another chain's state" (it may copy the lab's own local chain, not a live network), and a Chopsticks environment the lab declares under `advanced` shows as on in Config, never greyed as "off unless listed".
990
+ - 4127327: A feature step refused because the environment lacks a capability now says why, as app availability already did: for example `missing capability devAuthority (withheld by the lab: rehearsing a public network)`, in `product-lab lint` and in the plan before a scenario runs.
991
+ - `product-lab test` refuses `--workers` together with `--rerun-failures` instead of ignoring the reruns.
992
+ - 7733849: A run's Transactions tab now opens with the count of everything the run wrote ("Writes in this run: 4"), then the lab's own transactions, which say "none" when only the hosts wrote (a publish on a local Paseo fork). It used to open with "The lab submitted no transaction" above the hosts' writes, which read as if nothing was written.
993
+ - 7a1c481: The Notes reference lab in the AI kit reads each People block's events as soon as the block is finalized, so its XCM stand-in no longer misses a Bulletin allowance claim when the lab is busy (a missed claim made the next publish fail).
994
+ - Opening a run bundle (`product-lab bundle open`, `reproduce`, the lab window's bundle routes) or unpacking a fixture bundle (`fixture import`, `fixture download`) can no longer write or point outside the folder it unpacks into. Before, a crafted bundle could chain two links that each looked inside the folder and write a file through them outside it, for example a Git hook in your lab. Links are now created after every file and folder, nothing is written through a link, and a link that passes through another link or leaves the folder is refused. A run bundle holds files only, so one that carries a link or a folder entry is refused. A refused bundle leaves nothing behind.
995
+ - Updated dependencies [1de5c0d]
996
+ - Updated dependencies [d417fc4]
997
+ - @product-lab/ports@0.0.1
998
+ - @product-lab/system-node@0.0.1
999
+ - @product-lab/domain@0.0.1
1000
+ - @product-lab/cli@0.0.1