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