@gfdelarue/testkit 0.4.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (817) hide show
  1. package/README.md +752 -462
  2. package/bin/testkit-windows-owner-arm64.exe +0 -0
  3. package/bin/testkit-windows-owner-x64.exe +0 -0
  4. package/dist/app/bugs/categories.js +1 -1
  5. package/dist/app/bugs/ci-report.js +2 -2
  6. package/dist/app/bugs/ci-summary.js +3 -3
  7. package/dist/app/bugs/draft.js +4 -4
  8. package/dist/app/bugs/facts.js +2 -2
  9. package/dist/app/bugs/file.js +1 -1
  10. package/dist/app/bugs/gate.js +1 -1
  11. package/dist/app/bugs/guide.js +3 -3
  12. package/dist/app/bugs/issue.js +4 -4
  13. package/dist/app/bugs/known-failures.js +1 -1
  14. package/dist/app/bugs/record.js +2 -2
  15. package/dist/app/bugs/run-reading.js +1 -1
  16. package/dist/app/bugs/supplied-reproduce.js +1 -0
  17. package/dist/app/campaigns/campaign.js +1 -1
  18. package/dist/app/cleanup/index.js +1 -1
  19. package/dist/app/db-schema/prepare.js +1 -1
  20. package/dist/app/destroy/index.js +1 -1
  21. package/dist/app/discover/index.js +2 -2
  22. package/dist/app/doctor/index.js +1 -1
  23. package/dist/app/environments/config-driven.js +1 -0
  24. package/dist/app/environments/environment-file.js +1 -0
  25. package/dist/app/environments/file-setup.js +1 -0
  26. package/dist/app/environments/routing.js +1 -0
  27. package/dist/app/environments/static-values.js +1 -0
  28. package/dist/app/environments/supplied-input.js +1 -0
  29. package/dist/app/environments/supplied.js +1 -0
  30. package/dist/app/environments/task-databases.js +2 -0
  31. package/dist/app/file-selection.js +1 -1
  32. package/dist/app/inspect/artifacts.js +1 -1
  33. package/dist/app/inspect/index.js +1 -1
  34. package/dist/app/lint/index.js +1 -1
  35. package/dist/app/lint/native.js +1 -1
  36. package/dist/app/lint/options.js +1 -1
  37. package/dist/app/lint/rules/data.js +1 -1
  38. package/dist/app/lint/rules/engine-imports.js +1 -1
  39. package/dist/app/lint/rules/syntax.js +1 -1
  40. package/dist/app/lint/rules/unit.js +1 -1
  41. package/dist/app/lint/shared.js +1 -1
  42. package/dist/app/package-inspection.js +1 -1
  43. package/dist/app/reports/files.js +1 -0
  44. package/dist/app/reports/prepare.js +2 -0
  45. package/dist/app/reports/publish.js +1 -0
  46. package/dist/app/run/caller-redaction.js +1 -0
  47. package/dist/app/run/engine-evidence-persistence.js +1 -1
  48. package/dist/app/run/engine-execution-failures.js +1 -1
  49. package/dist/app/run/engine-execution-reporting.js +1 -1
  50. package/dist/app/run/engine-execution.js +1 -1
  51. package/dist/app/run/engine-orchestration.js +1 -1
  52. package/dist/app/run/environment.js +1 -0
  53. package/dist/app/run/failure-details.js +1 -1
  54. package/dist/app/run/live-run.js +1 -1
  55. package/dist/app/run/orchestrator.js +1 -1
  56. package/dist/app/run/planning.js +1 -1
  57. package/dist/app/run/request.js +1 -1
  58. package/dist/app/run/results.js +1 -1
  59. package/dist/app/run/run-events.js +1 -1
  60. package/dist/app/run/run-finalization.js +1 -1
  61. package/dist/app/run/runtime-fixtures.js +1 -1
  62. package/dist/app/run/scheduler/estimates.js +1 -1
  63. package/dist/app/run/scheduler/identity.js +1 -1
  64. package/dist/app/run/scheduler/index.js +1 -1
  65. package/dist/app/run/scheduler/locks.js +1 -0
  66. package/dist/app/run/selection.js +1 -1
  67. package/dist/app/run/setup/runtime-node-setup-protocol.js +1 -1
  68. package/dist/app/run/setup/runtime-node-setup-worker.js +1 -1
  69. package/dist/app/run/setup/runtime-node-setup.js +2 -2
  70. package/dist/app/run/task-batches.js +1 -1
  71. package/dist/app/run/task-leases.js +1 -0
  72. package/dist/app/run/worker-loop.js +1 -1
  73. package/dist/app/status/runs.js +1 -1
  74. package/dist/app/tracker/index.js +1 -1
  75. package/dist/app/typecheck/index.js +4 -4
  76. package/dist/cli/command-catalog.js +1 -1
  77. package/dist/cli/command-flags.js +1 -1
  78. package/dist/cli/command-registry.js +1 -1
  79. package/dist/cli/commands/artifacts.js +2 -2
  80. package/dist/cli/commands/bug/file.js +2 -2
  81. package/dist/cli/commands/bug/record.js +2 -2
  82. package/dist/cli/commands/discover.js +1 -1
  83. package/dist/cli/commands/report/prepare.js +5 -0
  84. package/dist/cli/commands/report/publish.js +2 -0
  85. package/dist/cli/commands/run.js +2 -2
  86. package/dist/cli/commands/typecheck.js +1 -1
  87. package/dist/cli/commands/workspace.js +1 -1
  88. package/dist/cli/framework/errors.js +1 -1
  89. package/dist/cli/framework/execute.js +7 -6
  90. package/dist/cli/framework/parser.js +1 -1
  91. package/dist/cli/json-errors.js +1 -1
  92. package/dist/cli/operations/run/operation.js +2 -2
  93. package/dist/cli/renderers/bug/text.js +1 -1
  94. package/dist/cli/renderers/discover/report.js +1 -1
  95. package/dist/cli/renderers/doctor/text.js +1 -1
  96. package/dist/cli/renderers/run/events.js +2 -2
  97. package/dist/cli/renderers/run/formatting.js +1 -1
  98. package/dist/cli/renderers/run/status.js +1 -1
  99. package/dist/cli/renderers/run/text-reporter.js +24 -22
  100. package/dist/cli/terminal/colors.js +1 -1
  101. package/dist/cli/terminal/layout.js +2 -2
  102. package/dist/config/authoring/http-methods.js +1 -1
  103. package/dist/config/authoring/index.js +1 -1
  104. package/dist/config/authoring/preset-env.js +1 -1
  105. package/dist/config/loader/config-loader.js +1 -1
  106. package/dist/config/loader/database.js +1 -1
  107. package/dist/config/loader/decode-execution.js +1 -1
  108. package/dist/config/loader/dependencies.js +1 -1
  109. package/dist/config/loader/discover-tests.js +1 -1
  110. package/dist/config/loader/discovery-summary.js +1 -1
  111. package/dist/config/loader/discovery.js +2 -2
  112. package/dist/config/loader/env.js +1 -1
  113. package/dist/config/loader/execution-model.js +1 -1
  114. package/dist/config/loader/file-metadata.js +1 -1
  115. package/dist/config/loader/groups.js +1 -0
  116. package/dist/config/loader/index.js +1 -1
  117. package/dist/config/loader/load.js +1 -1
  118. package/dist/config/loader/managed-configs.js +1 -1
  119. package/dist/config/loader/owned-discovery.js +1 -0
  120. package/dist/config/loader/path-policy.js +1 -1
  121. package/dist/config/loader/runtime-isolation.js +1 -1
  122. package/dist/config/loader/runtime.js +1 -1
  123. package/dist/config/loader/skip-config.js +1 -1
  124. package/dist/config/loader/task-policy.js +1 -0
  125. package/dist/config/loader/test-selection.js +1 -1
  126. package/dist/config/loader/validation.js +1 -1
  127. package/dist/database/activity-gate.js +1 -1
  128. package/dist/database/admin.js +2 -2
  129. package/dist/database/bindings.js +1 -0
  130. package/dist/database/cleanup.js +1 -1
  131. package/dist/database/docker-metadata.js +3 -3
  132. package/dist/database/docker.js +3 -3
  133. package/dist/database/index.js +1 -1
  134. package/dist/database/lifecycle-cleanup.js +1 -1
  135. package/dist/database/local-postgres.js +1 -1
  136. package/dist/database/naming.js +1 -1
  137. package/dist/database/postgres/connection-check.js +1 -0
  138. package/dist/database/postgres/protocol.js +2 -0
  139. package/dist/database/schema-operations.js +1 -1
  140. package/dist/database/schema-source.js +3 -3
  141. package/dist/database/source-schema-env.js +1 -0
  142. package/dist/database/source-url.js +2 -2
  143. package/dist/database/state-files.js +1 -1
  144. package/dist/database/state.js +1 -1
  145. package/dist/database/steps.js +3 -3
  146. package/dist/domain/file-timeout.js +1 -1
  147. package/dist/domain/identifiers.js +1 -1
  148. package/dist/domain/operation-display.js +1 -1
  149. package/dist/domain/retired-test-types.js +1 -0
  150. package/dist/domain/runtime-isolation-contract.js +1 -1
  151. package/dist/domain/suite-selection.js +1 -1
  152. package/dist/domain/test-outcomes.js +1 -1
  153. package/dist/domain/test-types.js +1 -1
  154. package/dist/engines/adapters/evidence-files.js +1 -1
  155. package/dist/engines/adapters/evidence-identity.js +1 -1
  156. package/dist/engines/adapters/execution.js +1 -1
  157. package/dist/engines/adapters/json-bounds.js +2 -0
  158. package/dist/engines/adapters/native-report.js +1 -1
  159. package/dist/engines/api/execution-scope.js +1 -1
  160. package/dist/engines/api/execution.js +1 -1
  161. package/dist/engines/api/index.js +1 -1
  162. package/dist/engines/api/runtime-artifact.js +1 -1
  163. package/dist/engines/bundle-cache.js +1 -1
  164. package/dist/engines/catalog.js +1 -1
  165. package/dist/engines/contracts/environment-values.js +1 -0
  166. package/dist/engines/contracts/fixture-manifest.js +1 -1
  167. package/dist/engines/definitions.js +1 -1
  168. package/dist/engines/environment/handles.js +1 -0
  169. package/dist/engines/environment/index.js +1 -0
  170. package/dist/engines/factory.js +1 -1
  171. package/dist/engines/installations/node-vitest.js +1 -1
  172. package/dist/engines/installations/package-resolution.js +1 -1
  173. package/dist/engines/installations/playwright-resolution-child.js +1 -1
  174. package/dist/engines/installations/playwright.js +1 -1
  175. package/dist/engines/managed-module-resolution-policy-input.js +1 -1
  176. package/dist/engines/managed-module-resolution-policy.js +1 -1
  177. package/dist/engines/managed-module-resolution.js +2 -2
  178. package/dist/engines/manager.js +1 -1
  179. package/dist/engines/node-vitest/adapter/adapter.js +1 -1
  180. package/dist/engines/node-vitest/adapter/driver.js +2 -0
  181. package/dist/engines/node-vitest/adapter/evidence.js +2 -2
  182. package/dist/engines/node-vitest/adapter/failure-details.js +4 -2
  183. package/dist/engines/node-vitest/adapter/reporter.js +1 -1
  184. package/dist/engines/node-vitest/adapter/workspace.js +31 -192
  185. package/dist/engines/node-vitest/inventory/index.js +2 -0
  186. package/dist/engines/node-vitest/inventory/list-files.js +3 -0
  187. package/dist/engines/node-vitest/runtime/contract/index.js +1 -1
  188. package/dist/engines/node-vitest/runtime/data/http.js +1 -1
  189. package/dist/engines/node-vitest/runtime/data/index.js +1 -1
  190. package/dist/engines/node-vitest/runtime/data/report.js +5 -6
  191. package/dist/engines/node-vitest/runtime/data/scenario.js +2 -2
  192. package/dist/engines/node-vitest/runtime/runtime-input.js +1 -1
  193. package/dist/engines/node-vitest/selection.js +1 -0
  194. package/dist/engines/playwright/adapter/adapter.js +1 -1
  195. package/dist/engines/playwright/adapter/config.js +4 -4
  196. package/dist/engines/playwright/adapter/evidence-validation.js +1 -1
  197. package/dist/engines/playwright/adapter/evidence.js +1 -1
  198. package/dist/engines/playwright/adapter/reporter.js +1 -1
  199. package/dist/engines/playwright/runtime/config-file.js +1 -1
  200. package/dist/engines/playwright/runtime/config.js +1 -1
  201. package/dist/engines/playwright/runtime/runtime-input.js +43 -20
  202. package/dist/engines/runtime-input-file.js +1 -1
  203. package/dist/environment/lifecycle-artifacts.js +1 -1
  204. package/dist/environment/lifecycle-controller.js +1 -1
  205. package/dist/environment/lifecycle.js +1 -1
  206. package/dist/environment/ports.js +1 -0
  207. package/dist/environment/ready-environment.js +1 -1
  208. package/dist/environment/run-environment.js +1 -1
  209. package/dist/environment/run-stopping.js +1 -1
  210. package/dist/environment/runtime-contexts.js +1 -1
  211. package/dist/environment/runtime-manager.js +1 -1
  212. package/dist/environment/runtime-planning.js +1 -1
  213. package/dist/environment/runtime-preparation.js +1 -1
  214. package/dist/environment/services.js +3 -1
  215. package/dist/environment/state.js +1 -1
  216. package/dist/environment/template.js +1 -1
  217. package/dist/evidence/artifact-config.js +1 -1
  218. package/dist/evidence/artifact-validation.js +1 -1
  219. package/dist/evidence/artifacts.js +2 -2
  220. package/dist/evidence/bundles.js +1 -1
  221. package/dist/evidence/environment-record.js +1 -0
  222. package/dist/evidence/index.js +1 -1
  223. package/dist/evidence/logs.js +2 -2
  224. package/dist/evidence/operation-timings.js +1 -1
  225. package/dist/evidence/read-fields.js +1 -1
  226. package/dist/evidence/read-run.js +1 -1
  227. package/dist/evidence/reading.js +1 -1
  228. package/dist/evidence/redaction.js +4 -0
  229. package/dist/evidence/reporting.js +1 -1
  230. package/dist/evidence/run-model.js +1 -0
  231. package/dist/evidence/storage.js +2 -2
  232. package/dist/evidence/timing.js +1 -1
  233. package/dist/kernel/error-serialization.js +1 -1
  234. package/dist/kernel/redaction-targets.js +1 -0
  235. package/dist/kernel/redaction.js +4 -1
  236. package/dist/kernel/unknown-values.js +1 -1
  237. package/dist/process/environment.js +1 -1
  238. package/dist/process/execa-bundle.json +3 -3
  239. package/dist/process/files/json-file.js +1 -1
  240. package/dist/process/files/paths.js +1 -1
  241. package/dist/process/host/metadata.js +1 -1
  242. package/dist/process/host/platform.js +1 -1
  243. package/dist/process/host-process.js +1 -1
  244. package/dist/process/index.js +1 -1
  245. package/dist/process/lifecycle-fence.js +1 -1
  246. package/dist/process/locks.js +4 -4
  247. package/dist/process/port-listener.js +2 -0
  248. package/dist/process/process-group.js +1 -1
  249. package/dist/process/process-identity.js +1 -1
  250. package/dist/process/process.js +33 -33
  251. package/dist/process/readiness.js +1 -1
  252. package/dist/process/ready-deadline.js +1 -0
  253. package/dist/process/recovery.js +1 -1
  254. package/dist/process/runs/manifest.js +1 -1
  255. package/dist/process/runs/ownership.js +1 -1
  256. package/dist/process/runs/product-state.js +1 -1
  257. package/dist/process/runs/stop.js +1 -1
  258. package/dist/process/service-processes.js +1 -1
  259. package/dist/process/stoppable-settlement.js +1 -0
  260. package/dist/process/url-redaction.js +1 -0
  261. package/dist/process/windows-cli-owner.js +3 -3
  262. package/dist/process/windows-native.js +1 -1
  263. package/dist/repo/ci-environment.js +1 -1
  264. package/dist/repo/fingerprint-policy.js +1 -1
  265. package/dist/repo/managed-git.js +1 -1
  266. package/dist/repo/physical-tree.js +1 -1
  267. package/dist/repo/publish-directory.js +3 -0
  268. package/dist/repo/state.js +4 -4
  269. package/dist/steps/build-config.js +1 -1
  270. package/dist/steps/configured-step-testkit-modules.js +1 -1
  271. package/dist/steps/configured-steps.js +1 -1
  272. package/dist/steps/environment.js +1 -1
  273. package/dist/steps/index.js +1 -1
  274. package/dist/steps/run.js +2 -2
  275. package/dist/toolchains/archive.js +1 -1
  276. package/dist/toolchains/index.js +3 -3
  277. package/dist/toolchains/node-provisioning.js +2 -2
  278. package/dist/toolchains/semver.js +1 -1
  279. package/dist/toolchains/vitest/index.js +1 -1
  280. package/dist/tracker/redaction.js +1 -2
  281. package/dist/{config/runtime/build-assets.d.ts → types/config-build-assets.d.ts} +5 -3
  282. package/dist/{database/steps.d.ts → types/config-database-steps.d.ts} +7 -7
  283. package/dist/{config/runtime/next-runtime-tsconfig.d.ts → types/config-next-runtime-tsconfig.d.ts} +5 -3
  284. package/dist/types/config.d.ts +501 -0
  285. package/dist/types/drizzle.d.ts +13 -0
  286. package/dist/{config/runtime/env/index.d.ts → types/env.d.ts} +22 -20
  287. package/dist/types/environment.d.ts +40 -0
  288. package/dist/types/index.d.ts +21 -0
  289. package/dist/types/node-vitest-contract.d.ts +75 -0
  290. package/dist/types/node-vitest-data.d.ts +407 -0
  291. package/dist/types/playwright.d.ts +130 -0
  292. package/dist/types/tooling-vitest.d.ts +13 -0
  293. package/dist/types/workspace.d.ts +617 -0
  294. package/docs/bug-records.md +83 -81
  295. package/docs/engines.md +213 -0
  296. package/docs/test-types.md +35 -33
  297. package/package.json +22 -29
  298. package/testkit-config-schema.md +403 -171
  299. package/dist/app/bugs/areas.d.ts +0 -38
  300. package/dist/app/bugs/assessment.d.ts +0 -9
  301. package/dist/app/bugs/categories.d.ts +0 -41
  302. package/dist/app/bugs/ci-report.d.ts +0 -21
  303. package/dist/app/bugs/ci-summary.d.ts +0 -13
  304. package/dist/app/bugs/draft.d.ts +0 -70
  305. package/dist/app/bugs/facts.d.ts +0 -48
  306. package/dist/app/bugs/file.d.ts +0 -45
  307. package/dist/app/bugs/gate.d.ts +0 -22
  308. package/dist/app/bugs/guide.d.ts +0 -20
  309. package/dist/app/bugs/issue.d.ts +0 -18
  310. package/dist/app/bugs/known-failures.d.ts +0 -49
  311. package/dist/app/bugs/record.d.ts +0 -14
  312. package/dist/app/bugs/run-reading.d.ts +0 -51
  313. package/dist/app/bugs/store.d.ts +0 -34
  314. package/dist/app/campaigns/brief.d.ts +0 -7
  315. package/dist/app/campaigns/campaign.d.ts +0 -14
  316. package/dist/app/campaigns/index.d.ts +0 -38
  317. package/dist/app/campaigns/store.d.ts +0 -5
  318. package/dist/app/campaigns/summary.d.ts +0 -13
  319. package/dist/app/cleanup/index.d.ts +0 -52
  320. package/dist/app/db-schema/prepare.d.ts +0 -11
  321. package/dist/app/db-schema/refresh.d.ts +0 -17
  322. package/dist/app/db-schema/verify.d.ts +0 -11
  323. package/dist/app/destroy/index.d.ts +0 -16
  324. package/dist/app/discover/index.d.ts +0 -8
  325. package/dist/app/doctor/index.d.ts +0 -17
  326. package/dist/app/file-selection.d.ts +0 -1
  327. package/dist/app/inspect/artifacts.d.ts +0 -30
  328. package/dist/app/inspect/index.d.ts +0 -112
  329. package/dist/app/lint/index.d.ts +0 -28
  330. package/dist/app/lint/native.d.ts +0 -10
  331. package/dist/app/lint/options.d.ts +0 -67
  332. package/dist/app/lint/policy.d.ts +0 -21
  333. package/dist/app/lint/rules/data.d.ts +0 -3
  334. package/dist/app/lint/rules/engine-imports.d.ts +0 -3
  335. package/dist/app/lint/rules/syntax.d.ts +0 -4
  336. package/dist/app/lint/rules/unit.d.ts +0 -3
  337. package/dist/app/lint/shared.d.ts +0 -36
  338. package/dist/app/package-inspection.d.ts +0 -20
  339. package/dist/app/run/endpoint-readiness.d.ts +0 -43
  340. package/dist/app/run/endpoint-readiness.js +0 -1
  341. package/dist/app/run/engine-evidence-persistence.d.ts +0 -39
  342. package/dist/app/run/engine-execution-cleanup.d.ts +0 -8
  343. package/dist/app/run/engine-execution-cleanup.js +0 -1
  344. package/dist/app/run/engine-execution-failures.d.ts +0 -41
  345. package/dist/app/run/engine-execution-observer.d.ts +0 -21
  346. package/dist/app/run/engine-execution-reporting.d.ts +0 -17
  347. package/dist/app/run/engine-execution.d.ts +0 -63
  348. package/dist/app/run/engine-failure-stack.d.ts +0 -1
  349. package/dist/app/run/engine-orchestration.d.ts +0 -49
  350. package/dist/app/run/failure-details.d.ts +0 -37
  351. package/dist/app/run/live-run.d.ts +0 -27
  352. package/dist/app/run/operation-progress.d.ts +0 -13
  353. package/dist/app/run/orchestrator.d.ts +0 -68
  354. package/dist/app/run/planning-types.d.ts +0 -68
  355. package/dist/app/run/planning.d.ts +0 -15
  356. package/dist/app/run/playwright-configuration.d.ts +0 -2
  357. package/dist/app/run/playwright-configuration.js +0 -1
  358. package/dist/app/run/request.d.ts +0 -30
  359. package/dist/app/run/results.d.ts +0 -161
  360. package/dist/app/run/run-events.d.ts +0 -144
  361. package/dist/app/run/run-finalization.d.ts +0 -52
  362. package/dist/app/run/run-guards.d.ts +0 -3
  363. package/dist/app/run/runtime-failures.d.ts +0 -18
  364. package/dist/app/run/runtime-fixtures.d.ts +0 -2
  365. package/dist/app/run/runtime-task-types.d.ts +0 -20
  366. package/dist/app/run/scheduler/estimates.d.ts +0 -32
  367. package/dist/app/run/scheduler/identity.d.ts +0 -9
  368. package/dist/app/run/scheduler/index.d.ts +0 -124
  369. package/dist/app/run/scheduler/observations.d.ts +0 -20
  370. package/dist/app/run/selection.d.ts +0 -10
  371. package/dist/app/run/setup/runtime-node-setup-errors.d.ts +0 -13
  372. package/dist/app/run/setup/runtime-node-setup-protocol.d.ts +0 -85
  373. package/dist/app/run/setup/runtime-node-setup-worker.d.ts +0 -1
  374. package/dist/app/run/setup/runtime-node-setup.d.ts +0 -48
  375. package/dist/app/run/task-batches.d.ts +0 -23
  376. package/dist/app/run/worker-loop.d.ts +0 -57
  377. package/dist/app/setup/playwright.d.ts +0 -22
  378. package/dist/app/status/index.d.ts +0 -9
  379. package/dist/app/status/model.d.ts +0 -29
  380. package/dist/app/status/runs.d.ts +0 -99
  381. package/dist/app/stop/index.d.ts +0 -14
  382. package/dist/app/tracker/index.d.ts +0 -8
  383. package/dist/app/tracker/remote.d.ts +0 -13
  384. package/dist/app/tracker/token.d.ts +0 -7
  385. package/dist/app/typecheck/index.d.ts +0 -63
  386. package/dist/cli/command-catalog.d.ts +0 -137
  387. package/dist/cli/command-flags.d.ts +0 -19
  388. package/dist/cli/command-registry.d.ts +0 -3
  389. package/dist/cli/commands/artifacts.d.ts +0 -48
  390. package/dist/cli/commands/bug/file.d.ts +0 -16
  391. package/dist/cli/commands/bug/guide.d.ts +0 -5
  392. package/dist/cli/commands/bug/record.d.ts +0 -9
  393. package/dist/cli/commands/campaign/finish.d.ts +0 -10
  394. package/dist/cli/commands/campaign/start.d.ts +0 -7
  395. package/dist/cli/commands/campaign/status.d.ts +0 -13
  396. package/dist/cli/commands/ci/report.d.ts +0 -15
  397. package/dist/cli/commands/cleanup.d.ts +0 -13
  398. package/dist/cli/commands/db/schema/refresh.d.ts +0 -2
  399. package/dist/cli/commands/db/schema/verify.d.ts +0 -2
  400. package/dist/cli/commands/destroy.d.ts +0 -9
  401. package/dist/cli/commands/discover.d.ts +0 -2
  402. package/dist/cli/commands/doctor.d.ts +0 -2
  403. package/dist/cli/commands/guard/unsafe-entrypoint.d.ts +0 -2
  404. package/dist/cli/commands/lint.d.ts +0 -2
  405. package/dist/cli/commands/run/status.d.ts +0 -5
  406. package/dist/cli/commands/run/stop.d.ts +0 -7
  407. package/dist/cli/commands/run.d.ts +0 -9
  408. package/dist/cli/commands/setup/playwright.d.ts +0 -2
  409. package/dist/cli/commands/status.d.ts +0 -5
  410. package/dist/cli/commands/stop.d.ts +0 -12
  411. package/dist/cli/commands/typecheck.d.ts +0 -2
  412. package/dist/cli/commands/workspace.d.ts +0 -2
  413. package/dist/cli/entrypoint.d.ts +0 -1
  414. package/dist/cli/framework/command.d.ts +0 -21
  415. package/dist/cli/framework/definitions.d.ts +0 -100
  416. package/dist/cli/framework/errors.d.ts +0 -6
  417. package/dist/cli/framework/execute.d.ts +0 -14
  418. package/dist/cli/framework/help.d.ts +0 -11
  419. package/dist/cli/framework/index.d.ts +0 -3
  420. package/dist/cli/framework/parser.d.ts +0 -6
  421. package/dist/cli/index.d.ts +0 -4
  422. package/dist/cli/json-errors.d.ts +0 -3
  423. package/dist/cli/operations/db/schema/refresh/operation.d.ts +0 -7
  424. package/dist/cli/operations/db/schema/verify/operation.d.ts +0 -7
  425. package/dist/cli/operations/run/operation.d.ts +0 -24
  426. package/dist/cli/process-signal.d.ts +0 -1
  427. package/dist/cli/renderers/bug/text.d.ts +0 -8
  428. package/dist/cli/renderers/campaign/text.d.ts +0 -2
  429. package/dist/cli/renderers/ci/text.d.ts +0 -2
  430. package/dist/cli/renderers/cleanup/format.d.ts +0 -14
  431. package/dist/cli/renderers/db-schema/text.d.ts +0 -4
  432. package/dist/cli/renderers/destroy/text.d.ts +0 -4
  433. package/dist/cli/renderers/discover/report.d.ts +0 -7
  434. package/dist/cli/renderers/discover/text.d.ts +0 -3
  435. package/dist/cli/renderers/doctor/text.d.ts +0 -2
  436. package/dist/cli/renderers/lint/text.d.ts +0 -2
  437. package/dist/cli/renderers/run/events.d.ts +0 -8
  438. package/dist/cli/renderers/run/failure.d.ts +0 -8
  439. package/dist/cli/renderers/run/formatting.d.ts +0 -79
  440. package/dist/cli/renderers/run/status.d.ts +0 -6
  441. package/dist/cli/renderers/run/text-reporter.d.ts +0 -19
  442. package/dist/cli/renderers/status/text.d.ts +0 -2
  443. package/dist/cli/renderers/stop/text.d.ts +0 -7
  444. package/dist/cli/renderers/typecheck/text.d.ts +0 -2
  445. package/dist/cli/terminal/colors.d.ts +0 -10
  446. package/dist/cli/terminal/layout.d.ts +0 -11
  447. package/dist/cli/version-drift.d.ts +0 -25
  448. package/dist/config/authoring/build-config-contract.d.ts +0 -27
  449. package/dist/config/authoring/configured-step-contract.d.ts +0 -18
  450. package/dist/config/authoring/http-execution-contract.d.ts +0 -70
  451. package/dist/config/authoring/http-methods.d.ts +0 -18
  452. package/dist/config/authoring/index.d.ts +0 -381
  453. package/dist/config/authoring/preset-env.d.ts +0 -19
  454. package/dist/config/authoring/runtime.d.ts +0 -64
  455. package/dist/config/loader/bugs.d.ts +0 -15
  456. package/dist/config/loader/config-loader.d.ts +0 -9
  457. package/dist/config/loader/database-materialization.d.ts +0 -19
  458. package/dist/config/loader/database-roles.d.ts +0 -2
  459. package/dist/config/loader/database.d.ts +0 -55
  460. package/dist/config/loader/decode-discovery.d.ts +0 -5
  461. package/dist/config/loader/decode-execution.d.ts +0 -9
  462. package/dist/config/loader/dependencies.d.ts +0 -7
  463. package/dist/config/loader/discover-tests.d.ts +0 -111
  464. package/dist/config/loader/discovery-summary.d.ts +0 -29
  465. package/dist/config/loader/discovery.d.ts +0 -54
  466. package/dist/config/loader/env.d.ts +0 -4
  467. package/dist/config/loader/execution-model.d.ts +0 -16
  468. package/dist/config/loader/file-metadata.d.ts +0 -19
  469. package/dist/config/loader/index.d.ts +0 -10
  470. package/dist/config/loader/load.d.ts +0 -91
  471. package/dist/config/loader/managed-configs.d.ts +0 -23
  472. package/dist/config/loader/path-policy.d.ts +0 -9
  473. package/dist/config/loader/paths.d.ts +0 -5
  474. package/dist/config/loader/runtime-isolation.d.ts +0 -44
  475. package/dist/config/loader/runtime.d.ts +0 -25
  476. package/dist/config/loader/skip-config.d.ts +0 -44
  477. package/dist/config/loader/test-selection.d.ts +0 -15
  478. package/dist/config/loader/validation.d.ts +0 -16
  479. package/dist/config/loader/values.d.ts +0 -4
  480. package/dist/config/loader/values.js +0 -1
  481. package/dist/database/activity-gate.d.ts +0 -22
  482. package/dist/database/admin.d.ts +0 -31
  483. package/dist/database/cleanup.d.ts +0 -36
  484. package/dist/database/configured-steps.d.ts +0 -27
  485. package/dist/database/constants.d.ts +0 -11
  486. package/dist/database/docker-metadata.d.ts +0 -3
  487. package/dist/database/docker.d.ts +0 -65
  488. package/dist/database/drizzle/index.d.ts +0 -13
  489. package/dist/database/fingerprint.d.ts +0 -12
  490. package/dist/database/index.d.ts +0 -39
  491. package/dist/database/lifecycle-cleanup.d.ts +0 -7
  492. package/dist/database/local-postgres.d.ts +0 -71
  493. package/dist/database/naming.d.ts +0 -17
  494. package/dist/database/postgres/index.d.ts +0 -71
  495. package/dist/database/progress.d.ts +0 -6
  496. package/dist/database/roles.d.ts +0 -19
  497. package/dist/database/runtime-config.d.ts +0 -16
  498. package/dist/database/runtime-reservations.d.ts +0 -19
  499. package/dist/database/schema-operations.d.ts +0 -18
  500. package/dist/database/schema-source.d.ts +0 -96
  501. package/dist/database/source-refresh-lock.d.ts +0 -8
  502. package/dist/database/source-url.d.ts +0 -22
  503. package/dist/database/state-files.d.ts +0 -13
  504. package/dist/database/state.d.ts +0 -26
  505. package/dist/database/template-steps.d.ts +0 -39
  506. package/dist/domain/file-timeout.d.ts +0 -28
  507. package/dist/domain/identifiers.d.ts +0 -9
  508. package/dist/domain/operation-display.d.ts +0 -10
  509. package/dist/domain/operation-reason.d.ts +0 -5
  510. package/dist/domain/postgres-route.d.ts +0 -4
  511. package/dist/domain/runtime-identity.d.ts +0 -1
  512. package/dist/domain/runtime-isolation-contract.d.ts +0 -5
  513. package/dist/domain/service-name.d.ts +0 -2
  514. package/dist/domain/suite-selection.d.ts +0 -20
  515. package/dist/domain/test-outcomes.d.ts +0 -3
  516. package/dist/domain/test-types.d.ts +0 -16
  517. package/dist/engines/adapters/evidence-files.d.ts +0 -32
  518. package/dist/engines/adapters/evidence-identity.d.ts +0 -12
  519. package/dist/engines/adapters/execution.d.ts +0 -42
  520. package/dist/engines/adapters/native-report.d.ts +0 -25
  521. package/dist/engines/adapters/node-startup-cache.d.ts +0 -8
  522. package/dist/engines/adapters/workspace.d.ts +0 -4
  523. package/dist/engines/api/capabilities.d.ts +0 -31
  524. package/dist/engines/api/capabilities.js +0 -1
  525. package/dist/engines/api/evidence.d.ts +0 -38
  526. package/dist/engines/api/execution-observer.d.ts +0 -8
  527. package/dist/engines/api/execution-scope.d.ts +0 -17
  528. package/dist/engines/api/execution.d.ts +0 -101
  529. package/dist/engines/api/index.d.ts +0 -5
  530. package/dist/engines/api/k6-runtime-input.d.ts +0 -26
  531. package/dist/engines/api/k6-runtime-input.js +0 -1
  532. package/dist/engines/api/runtime-artifact.d.ts +0 -19
  533. package/dist/engines/bundle-cache.d.ts +0 -32
  534. package/dist/engines/catalog.d.ts +0 -27
  535. package/dist/engines/contracts/fixture-manifest.d.ts +0 -34
  536. package/dist/engines/contracts/json-bounds.d.ts +0 -36
  537. package/dist/engines/contracts/json-bounds.js +0 -2
  538. package/dist/engines/contracts/k6-repository-configuration.d.ts +0 -12
  539. package/dist/engines/contracts/k6-repository-configuration.js +0 -1
  540. package/dist/engines/contracts/test-context.d.ts +0 -15
  541. package/dist/engines/contracts/test-context.js +0 -1
  542. package/dist/engines/definitions.d.ts +0 -22
  543. package/dist/engines/factory.d.ts +0 -6
  544. package/dist/engines/generated-performance.d.ts +0 -1
  545. package/dist/engines/installation-catalog.d.ts +0 -27
  546. package/dist/engines/installation-catalog.js +0 -1
  547. package/dist/engines/installations/k6.d.ts +0 -98
  548. package/dist/engines/installations/k6.js +0 -1
  549. package/dist/engines/installations/node-vitest.d.ts +0 -33
  550. package/dist/engines/installations/package-requirements.d.ts +0 -28
  551. package/dist/engines/installations/package-resolution.d.ts +0 -51
  552. package/dist/engines/installations/playwright-resolution-child.d.ts +0 -1
  553. package/dist/engines/installations/playwright.d.ts +0 -75
  554. package/dist/engines/installations/types.d.ts +0 -10
  555. package/dist/engines/k6/adapter/bundle.d.ts +0 -25
  556. package/dist/engines/k6/adapter/bundle.js +0 -112
  557. package/dist/engines/k6/adapter/evidence.d.ts +0 -15
  558. package/dist/engines/k6/adapter/evidence.js +0 -4
  559. package/dist/engines/k6/adapter/executor.d.ts +0 -13
  560. package/dist/engines/k6/adapter/executor.js +0 -1
  561. package/dist/engines/k6/adapter/index.d.ts +0 -1
  562. package/dist/engines/k6/adapter/index.js +0 -1
  563. package/dist/engines/k6/adapter/input.d.ts +0 -21
  564. package/dist/engines/k6/adapter/input.js +0 -1
  565. package/dist/engines/k6/adapter/native-summary.d.ts +0 -11
  566. package/dist/engines/k6/adapter/native-summary.js +0 -1
  567. package/dist/engines/k6/adapter/repository-configuration.d.ts +0 -2
  568. package/dist/engines/k6/adapter/repository-configuration.js +0 -1
  569. package/dist/engines/k6/authoring-type-paths.d.ts +0 -3
  570. package/dist/engines/k6/authoring-type-paths.js +0 -1
  571. package/dist/engines/k6/runtime/ambient-types/bundle-manifest.json +0 -146
  572. package/dist/engines/k6/runtime/ambient-types/k6/LICENSE +0 -21
  573. package/dist/engines/k6/runtime/ambient-types/k6/browser/index.d.ts +0 -6332
  574. package/dist/engines/k6/runtime/ambient-types/k6/crypto/index.d.ts +0 -218
  575. package/dist/engines/k6/runtime/ambient-types/k6/data/index.d.ts +0 -16
  576. package/dist/engines/k6/runtime/ambient-types/k6/encoding/index.d.ts +0 -46
  577. package/dist/engines/k6/runtime/ambient-types/k6/execution/index.d.ts +0 -127
  578. package/dist/engines/k6/runtime/ambient-types/k6/experimental/csv/index.d.ts +0 -96
  579. package/dist/engines/k6/runtime/ambient-types/k6/experimental/fs/index.d.ts +0 -104
  580. package/dist/engines/k6/runtime/ambient-types/k6/experimental/redis/index.d.ts +0 -821
  581. package/dist/engines/k6/runtime/ambient-types/k6/experimental/streams/index.d.ts +0 -198
  582. package/dist/engines/k6/runtime/ambient-types/k6/global.d.ts +0 -83
  583. package/dist/engines/k6/runtime/ambient-types/k6/html/index.d.ts +0 -1325
  584. package/dist/engines/k6/runtime/ambient-types/k6/http/index.d.ts +0 -806
  585. package/dist/engines/k6/runtime/ambient-types/k6/index.d.ts +0 -126
  586. package/dist/engines/k6/runtime/ambient-types/k6/metrics/index.d.ts +0 -66
  587. package/dist/engines/k6/runtime/ambient-types/k6/net/grpc/index.d.ts +0 -247
  588. package/dist/engines/k6/runtime/ambient-types/k6/options/index.d.ts +0 -459
  589. package/dist/engines/k6/runtime/ambient-types/k6/package.json +0 -79
  590. package/dist/engines/k6/runtime/ambient-types/k6/secrets/index.d.ts +0 -36
  591. package/dist/engines/k6/runtime/ambient-types/k6/timers/index.d.ts +0 -47
  592. package/dist/engines/k6/runtime/ambient-types/k6/websockets/index.d.ts +0 -324
  593. package/dist/engines/k6/runtime/ambient-types/k6/ws/index.d.ts +0 -283
  594. package/dist/engines/k6/runtime/ambient-types/xk6-sql/LICENSE +0 -201
  595. package/dist/engines/k6/runtime/ambient-types/xk6-sql/index.d.ts +0 -397
  596. package/dist/engines/k6/runtime/ambient-types/xk6-sql/package.json +0 -15
  597. package/dist/engines/k6/runtime/artifacts.d.ts +0 -2
  598. package/dist/engines/k6/runtime/artifacts.js +0 -1
  599. package/dist/engines/k6/runtime/checks.d.ts +0 -17
  600. package/dist/engines/k6/runtime/checks.js +0 -1
  601. package/dist/engines/k6/runtime/dal-fixtures.d.ts +0 -24
  602. package/dist/engines/k6/runtime/dal-fixtures.js +0 -1
  603. package/dist/engines/k6/runtime/dal-suite.d.ts +0 -24
  604. package/dist/engines/k6/runtime/dal-suite.js +0 -1
  605. package/dist/engines/k6/runtime/dal.d.ts +0 -10
  606. package/dist/engines/k6/runtime/dal.js +0 -1
  607. package/dist/engines/k6/runtime/fixtures.d.ts +0 -3
  608. package/dist/engines/k6/runtime/fixtures.js +0 -1
  609. package/dist/engines/k6/runtime/http-assertions.d.ts +0 -19
  610. package/dist/engines/k6/runtime/http-assertions.js +0 -1
  611. package/dist/engines/k6/runtime/http-checks.d.ts +0 -19
  612. package/dist/engines/k6/runtime/http-checks.js +0 -1
  613. package/dist/engines/k6/runtime/http-suite-runtime.d.ts +0 -103
  614. package/dist/engines/k6/runtime/http-suite-runtime.js +0 -1
  615. package/dist/engines/k6/runtime/http.d.ts +0 -15
  616. package/dist/engines/k6/runtime/http.js +0 -1
  617. package/dist/engines/k6/runtime/index.d.ts +0 -11
  618. package/dist/engines/k6/runtime/index.js +0 -1
  619. package/dist/engines/k6/runtime/input.d.ts +0 -3
  620. package/dist/engines/k6/runtime/input.js +0 -1
  621. package/dist/engines/k6/runtime/k6-repository-configuration.d.ts +0 -9
  622. package/dist/engines/k6/runtime/k6-repository-configuration.js +0 -1
  623. package/dist/engines/k6/runtime/node-setup.d.ts +0 -13
  624. package/dist/engines/k6/runtime/node-setup.js +0 -1
  625. package/dist/engines/k6/runtime/runtime-globals.d.ts +0 -10
  626. package/dist/engines/k6/runtime/runtime.d.ts +0 -54
  627. package/dist/engines/k6/runtime/runtime.js +0 -1
  628. package/dist/engines/k6/runtime/shared/assertion-details.d.ts +0 -19
  629. package/dist/engines/k6/runtime/shared/assertion-details.js +0 -2
  630. package/dist/engines/k6/runtime/shared/db-normalization.d.ts +0 -19
  631. package/dist/engines/k6/runtime/shared/db-normalization.js +0 -1
  632. package/dist/engines/k6/runtime/shared/error-body.d.ts +0 -3
  633. package/dist/engines/k6/runtime/shared/error-body.js +0 -1
  634. package/dist/engines/k6/runtime/shared/file-data.d.ts +0 -1
  635. package/dist/engines/k6/runtime/shared/file-data.js +0 -1
  636. package/dist/engines/k6/runtime/shared/fixture-engine.d.ts +0 -8
  637. package/dist/engines/k6/runtime/shared/fixture-engine.js +0 -2
  638. package/dist/engines/k6/runtime/shared/http-check-plan.d.ts +0 -29
  639. package/dist/engines/k6/runtime/shared/http-check-plan.js +0 -1
  640. package/dist/engines/k6/runtime/shared/http-parsing.d.ts +0 -10
  641. package/dist/engines/k6/runtime/shared/http-parsing.js +0 -3
  642. package/dist/engines/k6/runtime/shared/ordering.d.ts +0 -2
  643. package/dist/engines/k6/runtime/shared/ordering.js +0 -1
  644. package/dist/engines/k6/runtime/shared/properties.d.ts +0 -1
  645. package/dist/engines/k6/runtime/shared/properties.js +0 -1
  646. package/dist/engines/k6/runtime/suite.d.ts +0 -4
  647. package/dist/engines/k6/runtime/suite.js +0 -1
  648. package/dist/engines/k6/runtime/types.d.ts +0 -244
  649. package/dist/engines/k6/runtime/types.js +0 -1
  650. package/dist/engines/k6/runtime/xk6-sql-driver-postgres.d.ts +0 -7
  651. package/dist/engines/k6/runtime/xk6-sql-driver-postgres.js +0 -1
  652. package/dist/engines/managed-module-resolution-policy-input.d.ts +0 -9
  653. package/dist/engines/managed-module-resolution-policy.d.ts +0 -25
  654. package/dist/engines/managed-module-resolution.d.ts +0 -13
  655. package/dist/engines/manager.d.ts +0 -25
  656. package/dist/engines/node-vitest/adapter/adapter.d.ts +0 -16
  657. package/dist/engines/node-vitest/adapter/consumer-typescript-paths.d.ts +0 -17
  658. package/dist/engines/node-vitest/adapter/consumer-typescript-paths.js +0 -3
  659. package/dist/engines/node-vitest/adapter/evidence.d.ts +0 -33
  660. package/dist/engines/node-vitest/adapter/failure-details.d.ts +0 -3
  661. package/dist/engines/node-vitest/adapter/index.d.ts +0 -1
  662. package/dist/engines/node-vitest/adapter/reporter.d.ts +0 -7
  663. package/dist/engines/node-vitest/adapter/resolution.d.ts +0 -12
  664. package/dist/engines/node-vitest/adapter/resolution.js +0 -1
  665. package/dist/engines/node-vitest/adapter/workspace.d.ts +0 -19
  666. package/dist/engines/node-vitest/runtime/contract/index.d.ts +0 -64
  667. package/dist/engines/node-vitest/runtime/data/http.d.ts +0 -4
  668. package/dist/engines/node-vitest/runtime/data/index.d.ts +0 -8
  669. package/dist/engines/node-vitest/runtime/data/primitives.d.ts +0 -1
  670. package/dist/engines/node-vitest/runtime/data/report.d.ts +0 -3
  671. package/dist/engines/node-vitest/runtime/data/runner.d.ts +0 -4
  672. package/dist/engines/node-vitest/runtime/data/scenario.d.ts +0 -12
  673. package/dist/engines/node-vitest/runtime/data/types.d.ts +0 -412
  674. package/dist/engines/node-vitest/runtime/runtime-input.d.ts +0 -64
  675. package/dist/engines/playwright/adapter/adapter.d.ts +0 -18
  676. package/dist/engines/playwright/adapter/attachments.d.ts +0 -26
  677. package/dist/engines/playwright/adapter/config.d.ts +0 -45
  678. package/dist/engines/playwright/adapter/evidence-validation.d.ts +0 -12
  679. package/dist/engines/playwright/adapter/evidence.d.ts +0 -32
  680. package/dist/engines/playwright/adapter/failure-details.d.ts +0 -2
  681. package/dist/engines/playwright/adapter/index.d.ts +0 -3
  682. package/dist/engines/playwright/adapter/reporter.d.ts +0 -12
  683. package/dist/engines/playwright/runtime/config-file.d.ts +0 -2
  684. package/dist/engines/playwright/runtime/config.d.ts +0 -24
  685. package/dist/engines/playwright/runtime/index.d.ts +0 -4
  686. package/dist/engines/playwright/runtime/runtime-input.d.ts +0 -36
  687. package/dist/engines/playwright/runtime/sandbox.d.ts +0 -84
  688. package/dist/engines/runtime-input-file.d.ts +0 -27
  689. package/dist/environment/lifecycle-artifacts.d.ts +0 -7
  690. package/dist/environment/lifecycle-controller.d.ts +0 -70
  691. package/dist/environment/lifecycle.d.ts +0 -29
  692. package/dist/environment/maintenance.d.ts +0 -68
  693. package/dist/environment/planning-types.d.ts +0 -35
  694. package/dist/environment/readiness.d.ts +0 -12
  695. package/dist/environment/readiness.js +0 -1
  696. package/dist/environment/ready-environment.d.ts +0 -19
  697. package/dist/environment/run-environment.d.ts +0 -38
  698. package/dist/environment/run-stopping.d.ts +0 -13
  699. package/dist/environment/runtime-contexts.d.ts +0 -33
  700. package/dist/environment/runtime-manager.d.ts +0 -95
  701. package/dist/environment/runtime-planning.d.ts +0 -16
  702. package/dist/environment/runtime-preparation.d.ts +0 -30
  703. package/dist/environment/runtime-service.d.ts +0 -18
  704. package/dist/environment/services.d.ts +0 -48
  705. package/dist/environment/state.d.ts +0 -18
  706. package/dist/environment/status-runtime.d.ts +0 -53
  707. package/dist/environment/template.d.ts +0 -180
  708. package/dist/evidence/artifact-config.d.ts +0 -14
  709. package/dist/evidence/artifact-validation.d.ts +0 -5
  710. package/dist/evidence/artifacts.d.ts +0 -75
  711. package/dist/evidence/bundles.d.ts +0 -27
  712. package/dist/evidence/ci-provenance.d.ts +0 -9
  713. package/dist/evidence/contracts.d.ts +0 -154
  714. package/dist/evidence/file-evidence.d.ts +0 -23
  715. package/dist/evidence/finalization.d.ts +0 -9
  716. package/dist/evidence/index.d.ts +0 -8
  717. package/dist/evidence/logs.d.ts +0 -31
  718. package/dist/evidence/operation-timings.d.ts +0 -60
  719. package/dist/evidence/read-bundle.d.ts +0 -4
  720. package/dist/evidence/read-fields.d.ts +0 -22
  721. package/dist/evidence/read-provenance.d.ts +0 -2
  722. package/dist/evidence/read-redaction.d.ts +0 -2
  723. package/dist/evidence/read-retention.d.ts +0 -2
  724. package/dist/evidence/read-run.d.ts +0 -2
  725. package/dist/evidence/reading.d.ts +0 -28
  726. package/dist/evidence/reporting-types.d.ts +0 -330
  727. package/dist/evidence/reporting.d.ts +0 -3
  728. package/dist/evidence/secure-file-copy.d.ts +0 -24
  729. package/dist/evidence/setup-progress.d.ts +0 -63
  730. package/dist/evidence/step-output.d.ts +0 -16
  731. package/dist/evidence/storage-inventory.d.ts +0 -27
  732. package/dist/evidence/storage.d.ts +0 -27
  733. package/dist/evidence/timing.d.ts +0 -23
  734. package/dist/file.d.ts +0 -11
  735. package/dist/index.d.ts +0 -4
  736. package/dist/kernel/error-serialization.d.ts +0 -38
  737. package/dist/kernel/redaction.d.ts +0 -2
  738. package/dist/kernel/unknown-values.d.ts +0 -6
  739. package/dist/kernel/work-metrics.d.ts +0 -6
  740. package/dist/process/capture-output.d.ts +0 -7
  741. package/dist/process/command-shell.d.ts +0 -1
  742. package/dist/process/environment-overlay.d.ts +0 -17
  743. package/dist/process/environment.d.ts +0 -33
  744. package/dist/process/files/contained-path.d.ts +0 -8
  745. package/dist/process/files/directory-status.d.ts +0 -14
  746. package/dist/process/files/dotenv.d.ts +0 -2
  747. package/dist/process/files/file-snapshot.d.ts +0 -34
  748. package/dist/process/files/json-file.d.ts +0 -12
  749. package/dist/process/files/paths.d.ts +0 -1
  750. package/dist/process/files/product-dir.d.ts +0 -1
  751. package/dist/process/files/temp-dir.d.ts +0 -11
  752. package/dist/process/host/metadata.d.ts +0 -6
  753. package/dist/process/host/platform.d.ts +0 -57
  754. package/dist/process/host-command.d.ts +0 -4
  755. package/dist/process/host-inspection-command.d.ts +0 -13
  756. package/dist/process/host-process.d.ts +0 -19
  757. package/dist/process/index.d.ts +0 -9
  758. package/dist/process/lifecycle-fence.d.ts +0 -11
  759. package/dist/process/locks.d.ts +0 -28
  760. package/dist/process/process-contracts.d.ts +0 -78
  761. package/dist/process/process-group.d.ts +0 -12
  762. package/dist/process/process-identity.d.ts +0 -27
  763. package/dist/process/process-limits.d.ts +0 -6
  764. package/dist/process/process.d.ts +0 -12
  765. package/dist/process/readiness.d.ts +0 -37
  766. package/dist/process/recovery.d.ts +0 -3
  767. package/dist/process/runs/inspection.d.ts +0 -5
  768. package/dist/process/runs/manifest.d.ts +0 -86
  769. package/dist/process/runs/ownership.d.ts +0 -11
  770. package/dist/process/runs/product-state.d.ts +0 -2
  771. package/dist/process/runs/schema.d.ts +0 -3
  772. package/dist/process/runs/stop.d.ts +0 -19
  773. package/dist/process/runtime-socket.d.ts +0 -4
  774. package/dist/process/service-processes.d.ts +0 -13
  775. package/dist/process/shutdown.d.ts +0 -10
  776. package/dist/process/windows-cli-owner.d.ts +0 -2
  777. package/dist/process/windows-native.d.ts +0 -6
  778. package/dist/process/windows-process-identity.d.ts +0 -4
  779. package/dist/repo/ci-environment.d.ts +0 -7
  780. package/dist/repo/fingerprint-policy.d.ts +0 -15
  781. package/dist/repo/git-path.d.ts +0 -2
  782. package/dist/repo/history.d.ts +0 -17
  783. package/dist/repo/managed-git.d.ts +0 -10
  784. package/dist/repo/metadata.d.ts +0 -3
  785. package/dist/repo/physical-tree.d.ts +0 -37
  786. package/dist/repo/remote.d.ts +0 -6
  787. package/dist/repo/state.d.ts +0 -26
  788. package/dist/repo/tree-listing.d.ts +0 -10
  789. package/dist/steps/build-config.d.ts +0 -35
  790. package/dist/steps/configured-step-testkit-modules.d.ts +0 -19
  791. package/dist/steps/configured-steps.d.ts +0 -51
  792. package/dist/steps/environment.d.ts +0 -84
  793. package/dist/steps/index.d.ts +0 -2
  794. package/dist/steps/module-runner.d.ts +0 -1
  795. package/dist/steps/run.d.ts +0 -36
  796. package/dist/toolchains/archive.d.ts +0 -53
  797. package/dist/toolchains/esbuild.d.ts +0 -9
  798. package/dist/toolchains/host-node-support.d.ts +0 -3
  799. package/dist/toolchains/index.d.ts +0 -114
  800. package/dist/toolchains/managed-node-releases.d.ts +0 -28
  801. package/dist/toolchains/node-cache.d.ts +0 -20
  802. package/dist/toolchains/node-integrity.d.ts +0 -18
  803. package/dist/toolchains/node-provisioning.d.ts +0 -29
  804. package/dist/toolchains/semver.d.ts +0 -13
  805. package/dist/toolchains/shared-operation.d.ts +0 -11
  806. package/dist/toolchains/timeouts.d.ts +0 -1
  807. package/dist/toolchains/vitest/index.d.ts +0 -13
  808. package/dist/tracker/gitea.d.ts +0 -14
  809. package/dist/tracker/github.d.ts +0 -14
  810. package/dist/tracker/http.d.ts +0 -33
  811. package/dist/tracker/index.d.ts +0 -4
  812. package/dist/tracker/redaction.d.ts +0 -4
  813. package/dist/tracker/requests.d.ts +0 -17
  814. package/dist/tracker/responses.d.ts +0 -24
  815. package/dist/tracker/types.d.ts +0 -51
  816. package/docs/engine-architecture.md +0 -654
  817. /package/dist/engines/{k6/runtime/runtime-globals.js → api/profiles.js} +0 -0
@@ -12,13 +12,6 @@ export default defineConfig({
12
12
  taskConcurrency: 8,
13
13
  fileTimeoutSeconds: 60,
14
14
  },
15
- profiles: {
16
- http: {
17
- raw: {
18
- options: { vus: 1, iterations: 1 },
19
- },
20
- },
21
- },
22
15
  toolchains: {
23
16
  frontendNode: toolchain.node({
24
17
  cwd: "frontend",
@@ -30,7 +23,6 @@ export default defineConfig({
30
23
  api: app.node({
31
24
  cwd: ".",
32
25
  entry: "src/index.ts",
33
- port: 3004,
34
26
  envFiles: [".env.testkit"],
35
27
  database: database.postgres({
36
28
  runtimeConnections: 20,
@@ -50,7 +42,6 @@ export default defineConfig({
50
42
  frontend: app.next({
51
43
  cwd: "frontend",
52
44
  mode: "start",
53
- port: 3000,
54
45
  dependsOn: ["api"],
55
46
  envFiles: ["frontend/.env.testkit"],
56
47
  env: {
@@ -65,42 +56,55 @@ export default defineConfig({
65
56
  },
66
57
  }),
67
58
  },
59
+ groups: {
60
+ api: { roots: ["src"], uses: ["api"] },
61
+ frontend: {
62
+ roots: ["frontend"],
63
+ uses: ["frontend", "api"],
64
+ skip: { suites: [{ selector: "ui:billing", reason: "Billing UI is placeholder-only" }] },
65
+ },
66
+ },
68
67
  });
69
68
  ```
70
69
 
71
- Every test file must declare its execution engine. The same file-local metadata
72
- may also declare skip and lock intent:
70
+ Every typed test file must declare its execution engine. A plain Vitest test
71
+ file declares nothing and runs under the general `node-vitest` profile. The
72
+ file-local metadata of a typed file may also declare skip and lock intent:
73
73
 
74
74
  ```ts
75
75
  import { defineFile } from "@gfdelarue/testkit";
76
76
 
77
77
  export const testkit = defineFile({
78
- engine: "k6",
78
+ engine: "node-vitest",
79
79
  skip: "Billing is currently unavailable locally",
80
- locks: ["global-worker-loop"],
80
+ locks: ["payments-sandbox-webhook"],
81
81
  });
82
82
  ```
83
83
 
84
+ Files that name the same lock never run at the same time within one run. Use a
85
+ lock only for a resource that can't be duplicated, such as the one webhook URL
86
+ of a sandbox account. Tests that share rows need their own rows, not a lock.
87
+ See [Give each test its own data](README.md#give-each-test-its-own-data).
88
+
84
89
  The engine is intentionally not a `testkit.config.ts` field and is never
85
90
  inferred from the filename. `defineFile` comes only from the root package, the
86
91
  argument must be a direct object literal, and `engine` must be one of the
87
- literal values `"k6"`, `"node-vitest"`, or `"playwright"`.
92
+ literal values `"node-vitest"` or `"playwright"`.
88
93
 
89
- The filename suffix determines the test type, and the engine catalog resolves
90
- the pair to exactly one runner profile:
94
+ The filename suffix determines the test type, and each engine and test type
95
+ pair runs under exactly one runner profile:
91
96
 
92
- | Test type | Engine | Profile |
93
- | -------------------- | ------------- | ---------------------- |
94
- | `int`, `e2e`, `load` | `k6` | `k6-http` |
95
- | `dal` | `k6` | `k6-dal` |
96
- | `data` | `node-vitest` | `node-vitest-data` |
97
- | `contract` | `node-vitest` | `node-vitest-contract` |
98
- | `ui` | `playwright` | `playwright-ui` |
97
+ | Test type | Engine | Profile |
98
+ | ------------------ | ------------- | ---------------------- |
99
+ | none, a plain file | `node-vitest` | `node-vitest` |
100
+ | `data` | `node-vitest` | `node-vitest-data` |
101
+ | `contract` | `node-vitest` | `node-vitest-contract` |
102
+ | `ui` | `playwright` | `playwright-ui` |
99
103
 
100
- Missing metadata, dynamic values, and unsupported engine/test-type pairs are
101
- discovery errors. There is no default-engine or legacy-runner compatibility
102
- path. See [Engine Architecture](docs/engine-architecture.md) for the managed
103
- distribution contract.
104
+ For a typed file, missing metadata, dynamic values, and unsupported
105
+ engine/test-type pairs are discovery errors. There is no default-engine or legacy-runner compatibility
106
+ path. See [Installation](docs/engines.md#installation) for what an install
107
+ contains and the supported platforms.
104
108
 
105
109
  ## Tooling Adapters
106
110
 
@@ -126,15 +130,14 @@ Default execution settings for the repo.
126
130
 
127
131
  `execution.workers` and `presets.nodeNext({ workers })` remain deprecated aliases
128
132
  through 0.2.x and will be removed in 0.3.0. Use `taskConcurrency` in new config.
129
- If both names are present, their values must match. The normalized configuration
130
- contains only `taskConcurrency`.
133
+ If both names are present, their values must match.
131
134
 
132
135
  `--task-concurrency` overrides the configured value. The CLI alias `--workers`
133
136
  also remains available through 0.2.x; contradictory CLI aliases are rejected
134
137
  before applying CLI precedence. Contradictory config aliases are rejected even
135
138
  when the CLI supplies an override.
136
139
 
137
- Schema-19 evidence retains its configured `run.workers` field. Observed
140
+ Run documents keep the configured `run.workers` field. Observed
138
141
  `workerCount`, Playwright's own `workers`, `runtime.instances` and
139
142
  `runtime.maxConcurrentTasks` keep their existing meanings.
140
143
 
@@ -146,15 +149,35 @@ helpers like `waitFor()` consume this budget automatically.
146
149
  Optional `testkit lint` settings. Omit it to run the default rules.
147
150
 
148
151
  - `rules`: map of rule name to `true`, `false`, or an options object.
149
- `engineImports`, `configImports`, `dataSuiteContract`, `dalParallelSafety`,
150
- and `uiSpecShape` default to enabled; `unitTestBoundaries` and
152
+ `engineImports`, `configImports`, `dataSuiteContract`, and `uiSpecShape` default to enabled; `unitTestBoundaries` and
151
153
  `testkitBoundary` default to disabled.
152
154
  - Rule options: `enabled` (default `true`), `include`, `exclude`. `testkitBoundary`
153
155
  also accepts `allowed` and `trackedOnly`.
154
156
  - `ui`: `maxLines` (default `220`) and `maxTests` (default `8`) for UI suites.
155
157
 
156
158
  Enabled-rule findings and syntax errors fail the command. There are no severity
157
- levels. The repository's `docs/lint.md` describes each rule.
159
+ levels. The rules report:
160
+
161
+ - `engineImports`: a value import the suite's engine can't load, such as Playwright
162
+ in a contract suite. Type-only imports
163
+ are allowed.
164
+ - `configImports`: `testkit.config.ts` importing a repo-local `__testkit__`
165
+ helper module.
166
+ - `dataSuiteContract`: a data suite that doesn't register its cases through
167
+ `dataScenario` from `@gfdelarue/testkit/node-vitest/data`, registers them
168
+ through Vitest's `test`, `it`, `describe`, `suite`, or `bench`, or records
169
+ only bookkeeping such as `count(...)`, `event(...)`, and `finding(...)`
170
+ without product data-flow evidence such as `http(...)` or `record(...)`.
171
+ - `uiSpecShape`: a UI suite longer than `ui.maxLines` lines or with more than
172
+ `ui.maxTests` tests.
173
+ - `unitTestBoundaries`: test doubles, module replacement, `process.env` reads,
174
+ and network, filesystem, or child-process access in plain `*.test.*` and
175
+ `*.spec.*` files outside `__testkit__`.
176
+ - `testkitBoundary`: a JavaScript, TypeScript, or JSON file with `testkit`, in
177
+ any letter case, in its path, other than the root `testkit.config.ts`,
178
+ `testkit.config.mts`, `testkit.config.mjs`, and `testkit.config.js`, and files
179
+ under `**/__testkit__/**`. `allowed` replaces that list of globs, and
180
+ `trackedOnly` limits the rule to files Git tracks.
158
181
 
159
182
  ### `areas`
160
183
 
@@ -206,6 +229,35 @@ Optional settings for bug filing and for runs that meet a filed bug.
206
229
 
207
230
  [Bug records](docs/bug-records.md) describes the issues Testkit files.
208
231
 
232
+ ### `redact`
233
+
234
+ Optional env key names whose values sealing redacts, beyond the keys that hold
235
+ `PASSWORD`, `TOKEN`, `SECRET`, `PRIVATE_KEY`, `AUTH`, `COOKIE`, `SESSION`, or
236
+ `API_KEY`.
237
+
238
+ ```ts
239
+ export default defineConfig({
240
+ redact: ["STRIPE_SK", "PGPASS"],
241
+ });
242
+ ```
243
+
244
+ - Testkit matches each name in any letter case and trims spaces around it.
245
+ - A value under a named key counts from every source a run's environment
246
+ resolves (config `env`, env files, `local.env`, dependency services, `--env`,
247
+ `--env-from`, and an `--environment-file`) and from the environment Testkit
248
+ runs in. It applies the same way to a configured run and a supplied run.
249
+ - A value counts when it is at least eight characters long. A resolved value
250
+ that is a URL counts only for its password. In the environment Testkit runs
251
+ in, such a value counts whole and for its password.
252
+ - `redact` doesn't add text forms. `STRIPE_SK=…` in a log is redacted when its
253
+ value is one Testkit resolved.
254
+ - An entry that isn't a string, or is empty, fails config loading with a
255
+ message that names the entry:
256
+ `testkit.config.ts redact[1] must be a string`.
257
+
258
+ The sealing section of the [README](README.md) describes what else sealing
259
+ redacts.
260
+
209
261
  ### `ui`
210
262
 
211
263
  Targets for Playwright `ui` files. Read through `createUiSandbox`,
@@ -224,7 +276,69 @@ runs. The backend falls back to `TESTKIT_BACKEND_BASE_URL` and then
224
276
 
225
277
  ### `services`
226
278
 
227
- Map of service name to service config.
279
+ Map of service name to service config. A service describes what Testkit can
280
+ start. With `groups` set, a service owns no test files.
281
+
282
+ ### `groups`
283
+
284
+ Map of group name to the test files the group owns and the services its tests
285
+ use.
286
+
287
+ ```ts
288
+ groups: {
289
+ api: { roots: ["services/api"], uses: ["api"] },
290
+ web: { roots: ["apps/web"], uses: ["web", "api"] },
291
+ }
292
+ ```
293
+
294
+ - `roots`
295
+ - required non-empty list of repo-relative directories
296
+ - a file belongs to the group with the deepest root that contains it
297
+ - two groups with roots at the same depth leave a file ambiguous, and
298
+ `testkit discover` reports `ambiguous_test`
299
+ - `uses`
300
+ - ordered list of service names; defaults to `[]`
301
+ - a run starts these services and their `dependsOn` for the group's files,
302
+ and starts no other service
303
+ - when two used services set the same name, such as `BASE_URL`,
304
+ `DATABASE_URL`, or an `env` entry, the first in `uses` wins
305
+ - tests read each used service's URL and database by its name with
306
+ `endpoint()` and `database()` from `@gfdelarue/testkit/environment`
307
+ - the group's default URL and database are also available by the group's
308
+ name; a group named after a used service whose value is not the default
309
+ gets no values, and its files end as an infrastructure failure
310
+ - a dependency starts but gives the group no values; a used service can pass
311
+ one on, for example with `{serviceContextUrl:api}` in its `env`
312
+ - `exclude`
313
+ - repo-relative paths the group does not own; a file that every group
314
+ containing it excludes is dropped, plain Vitest test files included
315
+ - `skip`, `requirements`
316
+ - test policy for the group's files, with the shapes described under
317
+ [Service Fields](#service-fields)
318
+ - `runtimeIsolation`
319
+ - `shared` or `resetBefore` for the group's files, or an object with a
320
+ `default` policy and `suites` and `files` rules; see
321
+ [`runtimeIsolation`](#runtimeisolation)
322
+
323
+ Files that no group's roots claim belong to the implicit group `root`, which
324
+ uses no service. `root` is reserved. With no `testkit.config.ts`, every file
325
+ belongs to `root`, and `groups: {}` gives every file to `root`.
326
+
327
+ With `groups` set, Testkit ignores a service's `discovery` and rejects a
328
+ service's `skip`, `requirements`, or `runtimeIsolation` with a message naming
329
+ the group field to use.
330
+
331
+ #### Legacy ownership
332
+
333
+ A config with `services` and no `groups` key uses legacy ownership. Each
334
+ service is a group of the same name that uses that service. It owns the typed
335
+ `*.testkit.ts` files under its `local.cwd` and `discovery.roots`, and its
336
+ `skip`, `requirements`, and `runtimeIsolation` apply to them. A typed file
337
+ outside every service root belongs to `root`. Legacy ownership never claims a
338
+ plain Vitest test file; those belong to `root` unless declared groups claim
339
+ them. When legacy ownership gives a
340
+ file to a service, Testkit prints a notice on stderr. Legacy ownership will be
341
+ removed; declare `groups` instead.
228
342
 
229
343
  ### `toolchains`
230
344
 
@@ -247,12 +361,11 @@ Node toolchain fields:
247
361
  - explicit npm version or range
248
362
 
249
363
  `cwd` must be product-relative and may not contain a parent-directory segment.
250
- For `install: "download"`, resolution is limited to Testkit's platform-specific
251
- trusted Node release manifest. Testkit verifies the archive's exact size,
252
- SHA-256, entry and file counts, unpacked size, and complete installed-tree
253
- digest before reusing the repo-local `.testkit/_toolchains/node` cache. The
254
- trusted official Linux archives require glibc; download mode rejects a musl
255
- host before fetching or creating cache state.
364
+ For `install: "download"`, Testkit downloads only the official Node releases
365
+ it lists for the platform, verifies each download, and caches it under the
366
+ repo-local `.testkit/_toolchains/node`. A cache entry that changed after
367
+ installation fails verification. The official Linux archives require glibc, so
368
+ download mode fails on a musl host before downloading anything.
256
369
 
257
370
  `detect: "auto"` checks the toolchain cwd for:
258
371
 
@@ -267,30 +380,11 @@ host before fetching or creating cache state.
267
380
 
268
381
  ### `profiles.http`
269
382
 
270
- Named HTTP profiles. k6 suites reference them by name, and Node/Vitest data
271
- suites request them through `flow.http({ profile })`.
272
-
273
- When a run selects k6, every repository HTTP profile must be JSON-only,
274
- including profiles used only by Node/Vitest suites. The orchestrator serializes
275
- the whole collection into a versioned engine input, so any profile containing
276
- a function fails configuration validation. Put k6 setup and header functions in the suite
277
- module through `defineHttpSuite({ auth, headers, rawHeaders })`, or in a
278
- shared `__testkit__/helpers/` module the suites import.
279
-
280
- ```ts
281
- profiles: {
282
- http: {
283
- raw: {
284
- options: { vus: 1, iterations: 1 },
285
- },
286
- },
287
- }
383
+ Named HTTP profiles for Node/Vitest data suites, selected through
384
+ `flow.http({ profile })`.
288
385
 
289
- defineHttpSuite({ profile: "raw" }, ...)
290
- ```
291
-
292
- For runs without k6, Node/Vitest data profiles load in-process and may carry `auth`,
293
- `headers`, and `rawHeaders` functions. `auth.setup` or `auth.setupAsync`
386
+ Node/Vitest data profiles may carry `auth`, `headers`, and
387
+ `rawHeaders` functions. `auth.setup` or `auth.setupAsync`
294
388
  returns a session bundle of named actors; `headers` maps the bundle and the
295
389
  requested actor to request headers.
296
390
 
@@ -324,9 +418,8 @@ profiles: {
324
418
 
325
419
  Repository profile setup data is typed as `unknown`. The example gives its
326
420
  test-owned setup result a name and uses that type in the corresponding header
327
- builder. In a repository that also runs k6, keep the named repository profile
328
- JSON-only and pass the Node functions from the data suite through
329
- `flow.http({ profile: "default", auth: { setupAsync, headers } })` instead.
421
+ builder. Suite-specific functions can also be passed through
422
+ `flow.http({ profile: "default", auth: { setupAsync, headers } })`.
330
423
 
331
424
  ## Service Fields
332
425
 
@@ -336,41 +429,95 @@ Local runtime configuration.
336
429
 
337
430
  - `start`
338
431
  - `cwd`
339
- - `port`
340
432
  - `baseUrl`
341
433
  - `readyUrl`
342
434
  - `readyTimeoutMs`
343
435
  - `shutdownTimeoutMs`
344
436
  - `env`
345
437
 
438
+ #### Readiness
439
+
440
+ A local service starts and must then be ready before `readyTimeoutMs` runs out.
441
+ The default is 120000 ms. Tests receive nothing from the service until then.
442
+
443
+ - With a `readyUrl`, the service is ready when that URL returns a 2xx status,
444
+ after up to 20 redirects. `app.node` defaults `readyUrl` to `{baseUrl}/health`,
445
+ and `app.next` defaults it to `baseUrl`.
446
+ - `baseUrl` must also answer HTTP, unless the `readyUrl` has the same origin.
447
+ Any response counts, including a 4xx or 5xx status. A port that accepts
448
+ connections but does not answer HTTP does not count.
449
+ - `readyUrl: false` removes the 2xx check. Testkit still waits for `baseUrl` to
450
+ answer HTTP.
451
+ - A process with no HTTP endpoint, such as a worker or a queue consumer, declares
452
+ no `baseUrl`. It is ready once it has started. Testkit hands its groups no URL
453
+ for it, and `{baseUrl:<service>}` fails to resolve.
454
+
455
+ ```ts
456
+ services: {
457
+ worker: { local: { start: "node worker.mjs" } },
458
+ },
459
+ ```
460
+
461
+ `app.node` and `app.next` always set a `baseUrl`, so declare a process without
462
+ an HTTP endpoint with `local` directly.
463
+
346
464
  `services.<name>.local.shutdownTimeoutMs` is an optional positive finite integer
347
465
  in milliseconds. It sets how long a launched local service may take to exit
348
466
  after Testkit requests shutdown before Testkit force-kills it. Omitted or
349
467
  `undefined` values use the 1000 ms process-launch default. Strings, zero,
350
468
  negative numbers, fractions, `NaN`, and infinities are rejected.
351
469
 
352
- On POSIX, Testkit sends SIGTERM immediately and returns as soon as the owned
353
- process group exits. A surviving root or descendant receives SIGKILL when the
354
- allowance expires. Repeated stop requests and cancellation reuse the first
355
- deadline; a root exiting before its descendants does not restart the clock.
356
- The allowance also applies to cleanup after readiness failure or cancellation
357
- during startup. It does not change engine, build-command, or database timeouts.
470
+ On POSIX, Testkit asks the service and its descendants to stop, and
471
+ force-kills any that are still running when the allowance expires. Repeated
472
+ stop requests and cancellation keep the first deadline. The allowance also
473
+ applies to cleanup after a readiness failure or a cancellation during startup.
474
+ It doesn't change engine, build-command, or database timeouts.
358
475
 
359
476
  `stop`, `run stop`, active `cleanup`, and `destroy` wait for the recorded service
360
- allowances before forcing an unresponsive controller. After SIGINT, the
361
- controller gets at least two seconds and any remaining service allowance plus
362
- three seconds for forced termination. It then receives SIGTERM and gets five
363
- seconds to finalize before SIGKILL. Recovery uses the policy recorded when the
364
- service launched, including any shutdown time already spent.
365
-
366
- On Windows, the current process adapter uses forceful `taskkill /T /F` and
367
- cannot deliver cooperative SIGTERM. Increasing this option does not give a
368
- Windows service a graceful cleanup interval. Process ownership checks still
369
- apply; this option does not guarantee cleanup of detached resources or Compose
370
- containers.
371
-
372
- Both `app.node({ port: 3000, shutdownTimeoutMs: 5000 })` and
373
- `app.next({ port: 3000, shutdownTimeoutMs: 5000 })` place the option under `local`.
477
+ allowances before they force an unresponsive run to stop. Recovery uses the
478
+ allowance recorded when the service launched, less any shutdown time already
479
+ spent.
480
+
481
+ Both `app.node({ shutdownTimeoutMs: 5000 })` and
482
+ `app.next({ shutdownTimeoutMs: 5000 })` place the option under `local`.
483
+
484
+ #### Ports
485
+
486
+ Testkit asks the OS for a free port for each service in each runtime instance,
487
+ on `127.0.0.1` and, when the host has IPv6, on `::1`. The service receives the
488
+ port as `PORT` and as `{port}`. A `baseUrl` must use `{port}`, or
489
+ `{port:<its own name>}`, as its port, for example `http://127.0.0.1:{port}`.
490
+ `app.node` and `app.next` default to that `baseUrl`.
491
+
492
+ `local.port`, the `port` option of `app.node` and `app.next`, and a literal port
493
+ in `baseUrl` or `readyUrl` are config errors. The error names the service and
494
+ the key. Delete the setting and use `{port}`. Testkit has no setting that pins
495
+ a service to a fixed port.
496
+
497
+ If a service exits before it becomes ready, Testkit starts it again on a fresh
498
+ port, never one the service already tried. A service that already started and
499
+ whose `start`, env, `readyUrl`, or `runtime.prepare` steps name the moved
500
+ service is stopped and started again with the new value, and the
501
+ `runtime.prepare` steps of every service that hasn't started yet run again
502
+ first. Each service gets three attempts in total. After the third, the run fails
503
+ as an infrastructure failure whose error lists each attempt's port and exit
504
+ status and the last attempt's output. A startup that fails another way after an
505
+ earlier attempt, such as a readiness timeout, also lists every port tried.
506
+
507
+ A `runtime.prepare` step whose environment or command includes a service URL or
508
+ port, such as a Next build that embeds `NEXT_PUBLIC_API_URL: "{baseUrl:api}"`,
509
+ sees a new port on every run, so its fingerprint changes and it rebuilds. Pass
510
+ such values at start time when the build should be cached.
511
+
512
+ `run.json` records each service's starts under `environment.services` as they
513
+ happen, with its `runtimeLabel`, `serviceName`, `baseUrl`, `readyUrl`, `port`,
514
+ and each attempt's port and outcome. `baseUrl` and `readyUrl` are `null` when the
515
+ service declares none. A run whose startup fails keeps the
516
+ attempts it made, and a service restarted for a moved peer shows both starts.
517
+ The recorded URLs drop credentials, query values, and fragments, so
518
+ `http://127.0.0.1:41234/health?apiKey=x` is stored as
519
+ `http://127.0.0.1:41234/health?apiKey=<redacted>`. `testkit status` lists the
520
+ ports of active runs.
374
521
 
375
522
  Template tokens are supported in strings:
376
523
 
@@ -398,6 +545,11 @@ the service. Plain services take a string record. `app.node(...)` and
398
545
  `app.next(...)` take `{ values, databases }` and place the result under
399
546
  `local.env`; `local.env` overrides `env` when both set a name.
400
547
 
548
+ Tasks never receive a value under a name that a source schema in their runtime
549
+ reads: `TESTKIT_SCHEMA_SOURCE_DATABASE_URL`, any service's
550
+ `TESTKIT_<SERVICE>_SCHEMA_SOURCE_DATABASE_URL`, or a name passed to
551
+ `database.schema.fromEnv()`. Service processes still receive it.
552
+
401
553
  Values support the template tokens listed under [`local`](#local), including
402
554
  the database tokens:
403
555
 
@@ -420,9 +572,8 @@ that run. A repeated run never sees a previous run's connection details.
420
572
 
421
573
  Database tokens resolve only in `env` and `local.env` values. Testkit rejects
422
574
  them at config load in `local.start`, `local.cwd`, `runtime.prepare`, and
423
- `database.template` strings, because it resolves those strings while laying out
424
- the runtime, before any database exists. Commands read `DATABASE_URL` or a
425
- declared env entry at run time instead.
575
+ `database.template` strings, which resolve before any database exists. Commands
576
+ read `DATABASE_URL` or a declared env entry at run time instead.
426
577
 
427
578
  Source-schema discovery fails when the env entry it reads as the source URL
428
579
  points at the service's own database. A source schema has to come from a
@@ -443,30 +594,49 @@ to the matching `{db*:api}` token. `env.values` entries override expanded names.
443
594
  ### `envFile` / `envFiles`
444
595
 
445
596
  Optional extra env files loaded into the declared service/task environment for
446
- migrations, seeds, services, and every execution engine. k6 exposes task values
447
- through `__ENV`; Node/Vitest data and contract contexts expose them through
597
+ migrations, seeds, services, and every execution engine. Node/Vitest data and contract contexts expose task values through
448
598
  immutable `context.env`; and managed Playwright contexts expose them through
449
599
  `readPlaywrightContext().env`. Direct managed-Node `process.env.KEY` reads are a
450
600
  non-enumerable compatibility overlay, not the consumer-input contract.
451
601
 
602
+ Testkit reads a service's env files only when a selected group uses the service
603
+ or a used service depends on it. Loading the config reads none of them, so a
604
+ missing or unreadable file of an unused service changes nothing. A missing file
605
+ is skipped.
606
+
607
+ Without `envFile` or `envFiles`, a service uses whichever of these exist, in
608
+ this order: `<local.cwd>/.env.testkit`, `<local.cwd>/.env`, `.env.testkit`, and
609
+ `.env`. With them, it uses `envFile` and then each `envFiles` entry. A later file
610
+ overrides an earlier one, `env` overrides every file, and `local.env` overrides
611
+ `env`. A group that uses several services takes each name from the first service
612
+ in its `uses` that sets it.
613
+
614
+ A service that declares only `env`, `envFile`, or `envFiles` starts nothing, and
615
+ neither does a `dependsOn` edge between such services. Their groups get the
616
+ values, and the config's `ui` settings, with no runtime slot, build, database,
617
+ server, or teardown. Without a
618
+ running service, their values can use only `{service}`, `{stateDir}`,
619
+ `{productDir}`, `{lease}`, `{leaseDir}`, `{bin}`, and `{pathList}`. Any other
620
+ token, such as `{runtime}`, `{prepareDir}`, `{port}`, or `{dbUrl}`, fails the
621
+ group's tasks with an infrastructure failure that names the token.
622
+
452
623
  Environment names are validated case-insensitively. All engines reserve
453
624
  `APPDATA`, `ComSpec`, `HOME`, `LANG`, `LC_ALL`, `LOCALAPPDATA`, `PATH`, `PATHEXT`,
454
625
  `SystemRoot`, `TEMP`, `TMP`, `TMPDIR`, `USERPROFILE`, `XDG_CACHE_HOME`,
455
626
  `XDG_CONFIG_HOME`, and `XDG_DATA_HOME`. Engine-specific reservations and limits
456
627
  are:
457
628
 
458
- | Engine | Additional reservations | Consumer environment limit |
459
- | ------------- | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
460
- | `k6` | prefixes `K6_`, `TESTKIT_`; exact keys `BASE_URL`, `GODEBUG` | 128 entries; 16,384 environment-block units |
461
- | `node-vitest` | prefixes `TESTKIT_`, `VITEST_`; exact keys `BASE_URL`, `FORCE_COLOR`, `NODE_OPTIONS`, `NO_COLOR`, `UPDATE_SNAPSHOT` | 512 entries; 4 MiB of UTF-8 key/value data |
462
- | `playwright` | prefixes `TESTKIT_`, `PLAYWRIGHT_`, `PWTEST_`, `PW_TEST_`; exact keys `BASE_URL`, `FORCE_COLOR`, `NODE_OPTIONS`, `NO_COLOR` | 512 entries; 2 MiB of UTF-8 key/value data |
629
+ | Engine | Additional reservations | Consumer environment limit |
630
+ | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
631
+ | `node-vitest` | exact keys `BASE_URL`, `FORCE_COLOR`, `NODE_OPTIONS`, `NO_COLOR`, `UPDATE_SNAPSHOT`, `VITEST_POOL_ID`, `VITEST_WORKER_ID`, and the `TESTKIT_` keys it sets | 512 entries; 4 MiB of UTF-8 key/value data |
632
+ | `playwright` | prefixes `TESTKIT_`, `PLAYWRIGHT_`, `PWTEST_`, `PW_TEST_`; exact keys `BASE_URL`, `FORCE_COLOR`, `NODE_OPTIONS`, `NO_COLOR` | 512 entries; 2 MiB of UTF-8 key/value data |
463
633
 
464
634
  Empty names, names containing `=` or NUL, values containing NUL, and
465
635
  case-variant duplicates are rejected. The limits apply after env files and
466
- configured service/runtime values have been merged. Node/Vitest and Playwright
467
- carry consumer values in bounded owned input files; k6 carries them in its
468
- physical process environment. The aggregate input and physical spawn ceilings
469
- are documented in [Engine Architecture](docs/engine-architecture.md#managed-environment).
636
+ configured service/runtime values have been merged.
637
+ [Environment](docs/engines.md#environment) lists the `TESTKIT_` keys Node/Vitest
638
+ sets and the limits on all of a test's inputs together. Node/Vitest passes other
639
+ `TESTKIT_` and `VITEST_` keys through, such as `TESTKIT_REQUIRE_COMPLETE_SUITE`.
470
640
 
471
641
  ### `database`
472
642
 
@@ -486,6 +656,19 @@ materialize the database as host-local Docker Postgres.
486
656
  - `template.verify`
487
657
 
488
658
  `binding` may be `shared` or `per-runtime`.
659
+
660
+ `reset` defaults to `true`. Each time Testkit sets up a runtime instance, it
661
+ drops that instance's database and clones it again from the cached template,
662
+ so every run starts from the template's state. A run sets up an instance the
663
+ first time a test needs it. If a failure invalidates the instance, such as an
664
+ infrastructure failure or a setup cleanup that throws, Testkit sets it up again
665
+ before the next test uses it. Between setups, every test on the instance uses
666
+ the same database.
667
+ With `binding: "shared"`, every runtime instance uses one database. Testkit
668
+ resets it once per run, when the first instance sets it up.
669
+ `reset: false` keeps the runtime database from the previous run, with every row
670
+ that earlier runs wrote, until the template changes.
671
+
489
672
  `runtimeConnections` is the service runtime slot's Postgres connection budget.
490
673
  `maxConnections` and `reservedConnections` describe the backing host-local
491
674
  Postgres capacity used for scheduler admission.
@@ -496,10 +679,9 @@ Template stages are ordered arrays of typed step objects:
496
679
  - `{ kind: "sql-file", path: "db/schema.sql" }`
497
680
  - `{ kind: "module", target: "src/testkit/verify-seed.ts#verifySeed" }`
498
681
 
499
- Local files and ordinary external packages are valid module targets. Exact
500
- `@gfdelarue/testkit` module targets come from one Testkit-owned registry and are
501
- validated during config loading; unknown Testkit subpaths fail before any step
502
- is executed.
682
+ Local files and ordinary external packages are valid module targets. An
683
+ unsupported or private `@gfdelarue/testkit` target fails when the config loads,
684
+ before any step runs.
503
685
 
504
686
  `verify` runs after template migrate/seed and must succeed before the template DB
505
687
  is cached for reuse.
@@ -543,19 +725,21 @@ existing role unchanged and rolls back any roles created in the same operation.
543
725
  Existing object grants and ownership remain untouched. Setup evidence records
544
726
  the prerequisite operation, including created or reused roles and conflicts.
545
727
 
546
- Testkit sorts role declarations before hashing them, so declaration order does
547
- not independently change the template fingerprint. Repository and source-cache
548
- invalidation still apply; editing the config file can change the repository
549
- cache key. Changing role names or configured template inputs triggers a rebuild.
550
- Roles persist when templates
551
- are rebuilt, replay fails, service caches are removed, or declarations are
552
- removed. Removing a declaration stops ensuring that role. Destroying the owned
553
- PostgreSQL volume removes its roles, and the next provisioning creates the
554
- declared roles again.
728
+ Changing role names or configured template inputs rebuilds the template. Role
729
+ order doesn't count as a change, but editing the config file, even to reorder
730
+ roles, can still rebuild it, because the file is part of the repository. Roles
731
+ persist when templates are rebuilt, replay fails, service caches are removed, or
732
+ declarations are removed. Removing a declaration stops ensuring that role.
733
+ Destroying the owned PostgreSQL volume removes its roles, and the next
734
+ provisioning creates the declared roles again.
555
735
 
556
736
  ### `databaseFrom`
557
737
 
558
- Reuse another service's provisioned `DATABASE_URL`.
738
+ Use another service's database. The service gets the database that the named
739
+ service provisioned in the same runtime instance, as `DATABASE_URL` and in
740
+ `{dbUrl}` and the other database placeholders. List the named service in
741
+ `dependsOn` so that it runs in the same runtime. A service cannot declare both
742
+ `database` and `databaseFrom`.
559
743
 
560
744
  ### `runtime`
561
745
 
@@ -577,14 +761,14 @@ When configured, `testkit` applies the resolved toolchain to:
577
761
  - `runtime.prepare` command/module steps
578
762
  - local service `start` commands
579
763
 
580
- The resolved toolchain identity is also included in runtime preparation
581
- fingerprints so prepared artifacts are not reused across incompatible Node/npm
582
- versions.
764
+ Changing the resolved Node or npm version invalidates prepared artifacts, so
765
+ `runtime.prepare` runs again.
583
766
 
584
767
  ### `skip`
585
768
 
586
- Repo-declared skip rules. Skipped files remain visible in run artifacts and
587
- `testkit.status.json` with `status: "skipped"` and the configured reason.
769
+ Skip rules for a group's files, set as `groups.<name>.skip`. Under legacy
770
+ ownership a service's `skip` applies to the files it owns. Skipped files remain
771
+ visible in run artifacts with `status: "skipped"` and the configured reason.
588
772
 
589
773
  Prefer file-local `export const testkit = defineFile({ ... })` metadata
590
774
  for per-file skips and locks. Repo-level `skip` is mainly for broad suite-level
@@ -594,7 +778,7 @@ policy.
594
778
  skip: {
595
779
  files: [
596
780
  {
597
- path: "__testkit__/billing/billing.int.testkit.ts",
781
+ path: "__testkit__/billing/billing.contract.testkit.ts",
598
782
  reason: "Billing is currently unavailable",
599
783
  },
600
784
  ],
@@ -612,7 +796,7 @@ skip: {
612
796
  - `files[].reason`
613
797
  - required non-empty explanation recorded in artifacts
614
798
  - `suites[].selector`
615
- - existing suite selector syntax, including typed selectors like `int:health`
799
+ - existing suite selector syntax, including typed selectors like `contract:health`
616
800
  and `ui:billing`
617
801
  - `suites[].reason`
618
802
  - required non-empty explanation recorded in artifacts
@@ -654,24 +838,30 @@ runtime: {
654
838
 
655
839
  ### `requirements`
656
840
 
657
- Service-local task lock rules.
841
+ Task lock rules for a group's files, set as `groups.<name>.requirements`. Under
842
+ legacy ownership a service's `requirements` apply to the files it owns.
658
843
 
659
844
  ```ts
660
845
  requirements: {
661
846
  suites: [
662
- { selector: "ui:billing", locks: ["billing-ledger"] },
847
+ { selector: "contract:payments", locks: ["payments-sandbox-webhook"] },
663
848
  ],
664
849
  files: [
665
850
  {
666
- path: "src/api/routes/__testkit__/crawls-worker-concurrency.int.testkit.ts",
667
- locks: ["global-worker-loop"],
851
+ path: "src/api/routes/__testkit__/payout-webhook.contract.testkit.ts",
852
+ locks: ["payments-sandbox-webhook"],
668
853
  },
669
854
  ],
670
855
  }
671
856
  ```
672
857
 
858
+ Files that need the same lock never run at the same time within one run.
859
+ Testkit holds locks for one run only, so two runs, such as two CI jobs, don't
860
+ wait for each other. Use a lock for a resource that can't be duplicated, never
861
+ for tests that share rows.
862
+
673
863
  - `suites[].selector`
674
- - typed selector like `int:health` or `ui:billing`
864
+ - typed selector like `contract:health` or `ui:billing`
675
865
  - `suites[].locks`
676
866
  - named locks required by matching files
677
867
  - `files[].path`
@@ -679,6 +869,62 @@ requirements: {
679
869
  - `files[].locks`
680
870
  - named locks required by that file
681
871
 
872
+ ### `runtimeIsolation`
873
+
874
+ What a group's files share with each other in a run, set as
875
+ `groups.<name>.runtimeIsolation`. Under legacy ownership a service's
876
+ `runtimeIsolation` applies to the files it owns. A file can set its own with
877
+ `defineFile({ runtimeIsolation: "resetBefore" })`.
878
+
879
+ ```ts
880
+ runtimeIsolation: {
881
+ default: "shared",
882
+ suites: [{ selector: "contract:migrations", policy: "resetBefore" }],
883
+ files: [{ path: "__testkit__/orders/purge.contract.testkit.ts", policy: "resetBefore" }],
884
+ }
885
+ ```
886
+
887
+ A string sets the policy for every file, as in `runtimeIsolation: "resetBefore"`.
888
+ A file's `defineFile` policy wins over a `files` rule, which wins over a
889
+ `suites` rule, which wins over `default`. The default is `shared`.
890
+
891
+ - `shared`
892
+ - files on the same runtime instance share its services and its database for
893
+ the whole run
894
+ - each run starts from a database freshly cloned from the template, unless
895
+ `database.reset` is `false`, but within a run every file sees the rows that
896
+ other files wrote
897
+ - a test creates the rows it needs and filters by them, so rows from other
898
+ files don't change its result
899
+ - `resetBefore`
900
+ - before the file runs, Testkit clones each database it provisions that the
901
+ file's environment reaches, from the template that database came from; that
902
+ includes a database a used service names in its env, such as
903
+ `{dbUrl:audit}`
904
+ - the file's `.setup.*` module, `database()`, `DATABASE_URL`, and
905
+ `{dbUrl}`-style values in the group's service env all point at the clone
906
+ - Testkit drops the clone when the file finishes; if that fails, the end of
907
+ the run drops it, and the clone of a run that died is dropped when the next
908
+ run sets up that runtime
909
+ - use it for a test that changes a whole table or schema, such as an
910
+ unfiltered `DELETE` or a migration test
911
+ - a file whose environment reaches no database that Testkit provisions,
912
+ including every file run on supplied values, ends as an environment failure
913
+
914
+ `resetBefore` isolates only the test's own database access. The group's
915
+ services keep running against the runtime's database, so a request the test
916
+ sends to an API server reads and writes the shared database, not the clone.
917
+ When the server's writes must be isolated too, give the test its own group
918
+ whose `uses` names a second service entry for the same server, for example an
919
+ `api-isolated` service declared with the same options as `api`. Groups that use
920
+ the same services share their runtimes, so a separate group alone doesn't give
921
+ the test its own server. The second entry gets its own runtime, server, and
922
+ database, which the files in that group still share.
923
+
924
+ `resetAfter` and `exclusive` were removed. A config or `defineFile` that sets
925
+ either fails to load with a message that names the replacement: `resetBefore`
926
+ on the file that needs a clean database, or `shared` with test-owned rows.
927
+
682
928
  ## Config Surface
683
929
 
684
930
  `@gfdelarue/testkit/config` exports:
@@ -690,43 +936,38 @@ requirements: {
690
936
  - `database.fixture(...)`
691
937
  - `toolchain.node(...)`
692
938
 
693
- The `@gfdelarue/testkit/k6` subpath exports the k6 suite authoring surface:
694
-
695
- - `defineHttpSuite(...)`
696
- - `defineDalSuite(...)`
697
- - `defineDalFixtures(...)`
939
+ ## Discovery Conventions
698
940
 
699
- `defineDalFixtures(...)` is the first-class DAL seeding model. DAL suites receive
700
- `fixtures` plus a deterministic `fixtureScope`, and that scope provides:
941
+ Plain Vitest test files are the files the repository's own Vitest config
942
+ selects, as `vitest run` lists them from the product directory:
701
943
 
702
- - `id(label)` / `uuid(label)`
703
- - `slug(label)`
704
- - `email(label)`
705
- - `string(label, options)`
706
- - `token(label)`
707
- - `seed(kind, key, signature, create)`
708
- - `records()`
944
+ - the root `vitest.config.*` or `vite.config.*`, or the file
945
+ `--vitest-config` names, and its projects; without a config, Vitest's
946
+ defaults, which match `**/*.{test,spec}.?(c|m)[jt]s?(x)` outside
947
+ `node_modules` and `.git`
948
+ - narrowed only by `discovery.exclude` and a declared group's `exclude`
949
+ - owned by the group whose roots contain them, or by `root`
709
950
 
710
- ## Discovery Conventions
951
+ `--vitest-runner managed` lists them with Testkit's own Vitest and its default
952
+ rules instead, without the repository's config.
711
953
 
712
- Suites are discovered from the filesystem:
954
+ Typed suites are discovered from the filesystem:
713
955
 
714
956
  - only files inside `__testkit__/`
715
- - service ownership comes from the deepest matching `local.cwd`
716
- - `discovery.roots` can override ownership for shared-root edge cases
957
+ - a file belongs to the group with the deepest matching root in
958
+ `groups.<name>.roots`
959
+ - files that no group claims belong to the implicit group `root`
960
+ - under legacy ownership, service groups take their roots from `local.cwd` and
961
+ `discovery.roots`
717
962
 
718
963
  Supported suffixes:
719
964
 
720
- - `*.int.testkit.ts`
721
- - `*.e2e.testkit.ts`
722
965
  - `*.contract.testkit.ts`
723
966
  - `*.data.testkit.ts`
724
- - `*.dal.testkit.ts`
725
- - `*.load.testkit.ts`
726
967
  - `*.ui.testkit.ts`
727
968
 
728
- Every discovered file must also export `defineFile({ engine: "..." })` from the
729
- root package. The suffix supplies `testType`; the required engine declaration
969
+ Every discovered typed file must also export `defineFile({ engine: "..." })`
970
+ from the root package. The suffix supplies `testType`; the required engine declaration
730
971
  supplies `engineId`; and Testkit derives `profileId` from the catalog. None of
731
972
  those identities are silently rewritten later in the run.
732
973
 
@@ -749,30 +990,34 @@ type.
749
990
 
750
991
  Examples:
751
992
 
752
- - `src/api/routes/__testkit__/auth/me.int.testkit.ts`
993
+ - `src/api/routes/__testkit__/auth/me.contract.testkit.ts`
753
994
  - `src/api/routes/__testkit__/runtime.contract.testkit.ts`
754
995
  - `src/api/routes/__testkit__/agent-flow.data.testkit.ts`
755
- - `src/db/__testkit__/sessions/count-type.dal.testkit.ts`
996
+ - `src/db/__testkit__/sessions/count-type.contract.testkit.ts`
756
997
  - `frontend/__testkit__/navigation/navigation.ui.testkit.ts`
757
998
 
758
999
  `testkit discover` exposes that inventory directly without running suites:
759
1000
 
760
1001
  - `testkit discover`
761
- - compact human output grouped by service, type, and suite
1002
+ - compact human output grouped by group, type, and suite
762
1003
  - `testkit discover --output-mode verbose`
763
- - includes canonical paths, IDs, locks, dependencies, and skip reasons
1004
+ - includes group roots and uses, canonical paths, IDs, locks, and skip reasons
764
1005
  - `testkit discover --json`
765
1006
  - returns a machine-readable document with stable field names and enums
766
1007
  - `testkit discover --output .testkit/discovery.json`
767
1008
  - writes that same machine-readable document to disk
768
1009
 
769
1010
  The discovery JSON/API surface is exported from `@gfdelarue/testkit/workspace`.
770
- Each file entry includes canonical machine fields such as:
1011
+ The document has `schemaVersion: 10`. Its `groups` list holds each group's
1012
+ `name`, `roots`, `uses`, `source` (`groups`, `services`, or `implicit`), and
1013
+ file and suite counts. Each file entry includes canonical machine fields such
1014
+ as:
771
1015
 
772
1016
  - `id`
773
1017
  - `path`
774
- - `service`
1018
+ - `group`
775
1019
  - `suiteName`
1020
+ - `suiteLabel`
776
1021
  - `testType`
777
1022
  - `engineId`
778
1023
  - `profileId`
@@ -780,20 +1025,7 @@ Each file entry includes canonical machine fields such as:
780
1025
  - `skipped`
781
1026
  - `skipReason`
782
1027
  - `locks`
783
- - `dependsOn`
1028
+ - `runtimeIsolation`
784
1029
 
785
1030
  Human-friendly labels such as `displayName` are additive. They are intended for
786
1031
  compact CLI output and should not be treated as the only identifier.
787
-
788
- `testkit` also persists a lightweight history index at
789
- `.testkit/history/tests.json`. Discovery surfaces may expose:
790
-
791
- - `firstSeenAt`
792
- - `lastSeenAt`
793
- - `lastRunAt`
794
- - `runCount`
795
- - `passCount`
796
- - `failCount`
797
- - `skipCount`
798
- - `avgDurationMs`
799
- - `lastStatus`