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