@gate-forge/pack-playwright 0.7.0 → 0.8.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 (200) hide show
  1. package/README.md +31 -0
  2. package/dist/constants.d.ts +13 -140
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +13 -148
  5. package/dist/constants.js.map +1 -1
  6. package/dist/cypress/plugin.d.ts +53 -0
  7. package/dist/cypress/plugin.d.ts.map +1 -0
  8. package/dist/cypress/plugin.js +369 -0
  9. package/dist/cypress/plugin.js.map +1 -0
  10. package/dist/cypress/spec-scan.d.ts +39 -0
  11. package/dist/cypress/spec-scan.d.ts.map +1 -0
  12. package/dist/cypress/spec-scan.js +301 -0
  13. package/dist/cypress/spec-scan.js.map +1 -0
  14. package/dist/diagnosis.d.ts +39 -0
  15. package/dist/diagnosis.d.ts.map +1 -0
  16. package/dist/diagnosis.js +63 -0
  17. package/dist/diagnosis.js.map +1 -0
  18. package/dist/discovery/adapter-projection.d.ts +13 -0
  19. package/dist/discovery/adapter-projection.d.ts.map +1 -0
  20. package/dist/discovery/adapter-projection.js +84 -0
  21. package/dist/discovery/adapter-projection.js.map +1 -0
  22. package/dist/discovery/config-locations.d.ts +5 -0
  23. package/dist/discovery/config-locations.d.ts.map +1 -0
  24. package/dist/discovery/config-locations.js +19 -0
  25. package/dist/discovery/config-locations.js.map +1 -0
  26. package/dist/discovery/cypress-runner-adapter.d.ts +112 -0
  27. package/dist/discovery/cypress-runner-adapter.d.ts.map +1 -0
  28. package/dist/discovery/cypress-runner-adapter.js +501 -0
  29. package/dist/discovery/cypress-runner-adapter.js.map +1 -0
  30. package/dist/discovery/discover.d.ts +53 -1
  31. package/dist/discovery/discover.d.ts.map +1 -1
  32. package/dist/discovery/discover.js +100 -3
  33. package/dist/discovery/discover.js.map +1 -1
  34. package/dist/discovery/git-ignore.d.ts +13 -0
  35. package/dist/discovery/git-ignore.d.ts.map +1 -0
  36. package/dist/discovery/git-ignore.js +62 -0
  37. package/dist/discovery/git-ignore.js.map +1 -0
  38. package/dist/discovery/index.d.ts +9 -0
  39. package/dist/discovery/index.d.ts.map +1 -1
  40. package/dist/discovery/index.js +9 -0
  41. package/dist/discovery/index.js.map +1 -1
  42. package/dist/discovery/playwright-runner-adapter.d.ts +108 -0
  43. package/dist/discovery/playwright-runner-adapter.d.ts.map +1 -0
  44. package/dist/discovery/playwright-runner-adapter.js +185 -0
  45. package/dist/discovery/playwright-runner-adapter.js.map +1 -0
  46. package/dist/discovery/prepare-barrier.d.ts +522 -0
  47. package/dist/discovery/prepare-barrier.d.ts.map +1 -0
  48. package/dist/discovery/prepare-barrier.js +739 -0
  49. package/dist/discovery/prepare-barrier.js.map +1 -0
  50. package/dist/discovery/pytest-adapter.d.ts.map +1 -1
  51. package/dist/discovery/pytest-adapter.js +6 -2
  52. package/dist/discovery/pytest-adapter.js.map +1 -1
  53. package/dist/discovery/pytest-runner-adapter.d.ts +124 -0
  54. package/dist/discovery/pytest-runner-adapter.d.ts.map +1 -0
  55. package/dist/discovery/pytest-runner-adapter.js +454 -0
  56. package/dist/discovery/pytest-runner-adapter.js.map +1 -0
  57. package/dist/discovery/reconcile.d.ts +80 -11
  58. package/dist/discovery/reconcile.d.ts.map +1 -1
  59. package/dist/discovery/reconcile.js +395 -78
  60. package/dist/discovery/reconcile.js.map +1 -1
  61. package/dist/discovery/runner-env.d.ts +88 -2
  62. package/dist/discovery/runner-env.d.ts.map +1 -1
  63. package/dist/discovery/runner-env.js +142 -4
  64. package/dist/discovery/runner-env.js.map +1 -1
  65. package/dist/discovery/static-discovery.d.ts +38 -3
  66. package/dist/discovery/static-discovery.d.ts.map +1 -1
  67. package/dist/discovery/static-discovery.js +454 -15
  68. package/dist/discovery/static-discovery.js.map +1 -1
  69. package/dist/discovery/supervised-run.d.ts +199 -10
  70. package/dist/discovery/supervised-run.d.ts.map +1 -1
  71. package/dist/discovery/supervised-run.js +350 -39
  72. package/dist/discovery/supervised-run.js.map +1 -1
  73. package/dist/discovery/trusted-config.d.ts +180 -6
  74. package/dist/discovery/trusted-config.d.ts.map +1 -1
  75. package/dist/discovery/trusted-config.js +279 -10
  76. package/dist/discovery/trusted-config.js.map +1 -1
  77. package/dist/discovery/vitest-runner-adapter.d.ts +172 -0
  78. package/dist/discovery/vitest-runner-adapter.d.ts.map +1 -0
  79. package/dist/discovery/vitest-runner-adapter.js +607 -0
  80. package/dist/discovery/vitest-runner-adapter.js.map +1 -0
  81. package/dist/fixture/consumer-runner.d.ts +4 -0
  82. package/dist/fixture/consumer-runner.d.ts.map +1 -0
  83. package/dist/fixture/consumer-runner.js +38 -0
  84. package/dist/fixture/consumer-runner.js.map +1 -0
  85. package/dist/fixture/evidence.d.ts +27 -0
  86. package/dist/fixture/evidence.d.ts.map +1 -1
  87. package/dist/fixture/evidence.js +12 -0
  88. package/dist/fixture/evidence.js.map +1 -1
  89. package/dist/fixture/fixture.d.ts +2 -1
  90. package/dist/fixture/fixture.d.ts.map +1 -1
  91. package/dist/fixture/fixture.js +1 -17
  92. package/dist/fixture/fixture.js.map +1 -1
  93. package/dist/fixture/witness-client.d.ts +6 -174
  94. package/dist/fixture/witness-client.d.ts.map +1 -1
  95. package/dist/fixture/witness-client.js +6 -267
  96. package/dist/fixture/witness-client.js.map +1 -1
  97. package/dist/index.d.ts +9 -6
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +5 -4
  100. package/dist/index.js.map +1 -1
  101. package/dist/json.d.ts +6 -12
  102. package/dist/json.d.ts.map +1 -1
  103. package/dist/json.js +6 -17
  104. package/dist/json.js.map +1 -1
  105. package/dist/reporter/project-graph-reporter.d.ts +92 -0
  106. package/dist/reporter/project-graph-reporter.d.ts.map +1 -0
  107. package/dist/reporter/project-graph-reporter.js +92 -0
  108. package/dist/reporter/project-graph-reporter.js.map +1 -0
  109. package/dist/reporter/reporter.cjs.map +1 -1
  110. package/dist/reporter/reporter.d.ts +93 -4
  111. package/dist/reporter/reporter.d.ts.map +1 -1
  112. package/dist/reporter/reporter.js +174 -18
  113. package/dist/reporter/reporter.js.map +1 -1
  114. package/dist/runner-claims.d.ts +13 -0
  115. package/dist/runner-claims.d.ts.map +1 -0
  116. package/dist/runner-claims.js +46 -0
  117. package/dist/runner-claims.js.map +1 -0
  118. package/dist/runner-resolution.d.ts +3 -0
  119. package/dist/runner-resolution.d.ts.map +1 -0
  120. package/dist/runner-resolution.js +14 -0
  121. package/dist/runner-resolution.js.map +1 -0
  122. package/dist/supervisor/client.d.ts +23 -1
  123. package/dist/supervisor/client.d.ts.map +1 -1
  124. package/dist/supervisor/client.js +49 -0
  125. package/dist/supervisor/client.js.map +1 -1
  126. package/dist/supervisor/drain.d.ts +65 -0
  127. package/dist/supervisor/drain.d.ts.map +1 -1
  128. package/dist/supervisor/drain.js +353 -9
  129. package/dist/supervisor/drain.js.map +1 -1
  130. package/dist/supervisor/index.d.ts +7 -3
  131. package/dist/supervisor/index.d.ts.map +1 -1
  132. package/dist/supervisor/index.js +7 -3
  133. package/dist/supervisor/index.js.map +1 -1
  134. package/dist/supervisor/spool.d.ts +65 -2
  135. package/dist/supervisor/spool.d.ts.map +1 -1
  136. package/dist/supervisor/spool.js +47 -0
  137. package/dist/supervisor/spool.js.map +1 -1
  138. package/dist/surface.d.ts +6 -207
  139. package/dist/surface.d.ts.map +1 -1
  140. package/dist/surface.js +6 -264
  141. package/dist/surface.js.map +1 -1
  142. package/dist/vitest/index.d.ts +23 -0
  143. package/dist/vitest/index.d.ts.map +1 -0
  144. package/dist/vitest/index.js +356 -0
  145. package/dist/vitest/index.js.map +1 -0
  146. package/dist/vitest/reporter.d.ts +83 -0
  147. package/dist/vitest/reporter.d.ts.map +1 -0
  148. package/dist/vitest/reporter.js +211 -0
  149. package/dist/vitest/reporter.js.map +1 -0
  150. package/dist/vitest/worker-slot.d.ts +36 -0
  151. package/dist/vitest/worker-slot.d.ts.map +1 -0
  152. package/dist/vitest/worker-slot.js +51 -0
  153. package/dist/vitest/worker-slot.js.map +1 -0
  154. package/dist/witness/adapter-registry.d.ts +6 -50
  155. package/dist/witness/adapter-registry.d.ts.map +1 -1
  156. package/dist/witness/adapter-registry.js +6 -257
  157. package/dist/witness/adapter-registry.js.map +1 -1
  158. package/dist/witness/behavior-request.d.ts +6 -76
  159. package/dist/witness/behavior-request.d.ts.map +1 -1
  160. package/dist/witness/behavior-request.js +6 -273
  161. package/dist/witness/behavior-request.js.map +1 -1
  162. package/dist/witness/behavior.d.ts +6 -48
  163. package/dist/witness/behavior.d.ts.map +1 -1
  164. package/dist/witness/behavior.js +6 -114
  165. package/dist/witness/behavior.js.map +1 -1
  166. package/dist/witness/bin.d.ts +6 -17
  167. package/dist/witness/bin.d.ts.map +1 -1
  168. package/dist/witness/bin.js +6 -168
  169. package/dist/witness/bin.js.map +1 -1
  170. package/dist/witness/browser.d.ts +14 -206
  171. package/dist/witness/browser.d.ts.map +1 -1
  172. package/dist/witness/browser.js +15 -654
  173. package/dist/witness/browser.js.map +1 -1
  174. package/dist/witness/classifications.d.ts +6 -38
  175. package/dist/witness/classifications.d.ts.map +1 -1
  176. package/dist/witness/classifications.js +6 -83
  177. package/dist/witness/classifications.js.map +1 -1
  178. package/dist/witness/env-attestation.d.ts +6 -94
  179. package/dist/witness/env-attestation.d.ts.map +1 -1
  180. package/dist/witness/env-attestation.js +6 -198
  181. package/dist/witness/env-attestation.js.map +1 -1
  182. package/dist/witness/fixture-provider.d.ts +6 -82
  183. package/dist/witness/fixture-provider.d.ts.map +1 -1
  184. package/dist/witness/fixture-provider.js +6 -105
  185. package/dist/witness/fixture-provider.js.map +1 -1
  186. package/dist/witness/loopback-pins.d.ts +6 -75
  187. package/dist/witness/loopback-pins.d.ts.map +1 -1
  188. package/dist/witness/loopback-pins.js +6 -240
  189. package/dist/witness/loopback-pins.js.map +1 -1
  190. package/dist/witness/server.d.ts +8 -26
  191. package/dist/witness/server.d.ts.map +1 -1
  192. package/dist/witness/server.js +24 -3761
  193. package/dist/witness/server.js.map +1 -1
  194. package/dist/witness/types.d.ts +6 -882
  195. package/dist/witness/types.d.ts.map +1 -1
  196. package/dist/witness/types.js +9 -1
  197. package/dist/witness/types.js.map +1 -1
  198. package/examples/overlay-proof.spec.js +75 -0
  199. package/package.json +8 -2
  200. package/python/gateforge_pytest_plugin.py +462 -0
@@ -12,6 +12,13 @@
12
12
  * workers, zero retries) and runs the runner with `--config <trusted>`.
13
13
  *
14
14
  * Honesty rules:
15
+ * - The child runs from the SELECTED NATIVE CONFIG DIRECTORY, the same
16
+ * directory `listNativePlaywrightTests` enumerated the suite from, so
17
+ * a nested project's own relative paths — its setup project's saved
18
+ * browser state above all — resolve exactly as they do when the owner
19
+ * runs the suite. The repo root stays the IDENTITY root: the trusted
20
+ * config's testDir, the reporter's root, and the base every
21
+ * repo-relative file/location is resolved against before the spawn.
15
22
  * - Only the engine reporter writes the lifecycle spool + outcomes
16
23
  * document, and only to parent-side paths the runner child never
17
24
  * learns (no state paths in the child env).
@@ -29,14 +36,91 @@
29
36
  * / sharding are NOT honored. See `discovery/trusted-config.ts`.
30
37
  */
31
38
  import { spawn } from 'node:child_process';
39
+ import { createHash } from 'node:crypto';
32
40
  import { existsSync, readFileSync, rmSync } from 'node:fs';
33
41
  import { createRequire } from 'node:module';
34
- import { join } from 'node:path';
42
+ import { dirname, join, resolve } from 'node:path';
43
+ import { ENV_PLAYWRIGHT_CONFIG_DIR } from '../constants.js';
35
44
  import { buildRunnerChildEnv } from './runner-env.js';
36
- import { localPlaywrightCliCandidates } from './reconcile.js';
45
+ import { findPlaywrightConfig } from './reconcile.js';
46
+ import { localPlaywrightCliCandidates } from '../runner-resolution.js';
37
47
  import { synthesizeTrustedConfig, trustedReporterEntry } from './trusted-config.js';
48
+ import { freezeProjectScopes } from './prepare-barrier.js';
38
49
  /** Default whole-run wall-clock bound for one supervised playwright run. */
39
50
  export const DEFAULT_RUN_TIMEOUT_MS = 30 * 60 * 1000;
51
+ /**
52
+ * The CommonJS test module the generated freeze controller imports its
53
+ * `test`/`expect` from — the `@playwright/test` package root or
54
+ * `playwright/test`, whichever package the CLI THIS run actually spawns
55
+ * belongs to, so a repository whose own playwright differs from the
56
+ * pack's pinned fallback still gets one consistent runner.
57
+ *
58
+ * Resolution follows the engine's own consumer-runner binding: at each
59
+ * directory `@playwright/test` is preferred over `playwright`, and the
60
+ * two publish their test module at DIFFERENT paths — `@playwright/test`
61
+ * has no `test.js` beside its `cli.js` at all and exposes its runner at
62
+ * the package root, while `playwright` publishes `test.js` next to its
63
+ * `cli.js`. Joining a `test.js` onto the selected CLI's directory would
64
+ * therefore name a file the preferred install does not contain, so each
65
+ * package is resolved by its own module name instead. `resolve` computes
66
+ * a path and never evaluates the module, so no runner code runs in the
67
+ * CLI.
68
+ *
69
+ * @param baseCommand: the runner argv (see {@link commandFromDirectory}).
70
+ *
71
+ * @returns
72
+ * string: absolute path to the selected package's test module.
73
+ */
74
+ export function playwrightTestModulePath(baseCommand) {
75
+ const cli = baseCommand[1] ?? '';
76
+ if (cli.endsWith('cli.js')) {
77
+ const requireFrom = createRequire(cli);
78
+ return requireFrom.resolve(cli.endsWith(join('@playwright', 'test', 'cli.js')) ? '@playwright/test' : 'playwright/test');
79
+ }
80
+ const require = createRequire(import.meta.url);
81
+ return require.resolve('playwright/test');
82
+ }
83
+ /**
84
+ * Whether the resolved runner argv is a REAL Playwright installation.
85
+ *
86
+ * The global preparation freeze needs the genuine runner: its own phase
87
+ * scheduler, its worker host and its `playwright/test` module are what
88
+ * order the controller between the prerequisites and the bodies. A file
89
+ * that merely occupies a `node_modules/playwright/cli.js` path is not
90
+ * that, and a barrier wired into such a child could only ever fake its
91
+ * own protocol.
92
+ *
93
+ * The test is therefore STRUCTURAL and generic: the runner script's own
94
+ * package manifest must exist and declare the package as `playwright` or
95
+ * `@playwright/test`. Every real install satisfies it (it is what npm
96
+ * writes); nothing about a stub can satisfy it without becoming an
97
+ * install. The same predicate is used by the trusted CLI before it arms
98
+ * a freeze, so both sides agree on whether a barrier is possible.
99
+ *
100
+ * @param baseCommand: the runner argv (see {@link commandFromDirectory}).
101
+ *
102
+ * @returns
103
+ * boolean: true only for a genuine Playwright package installation.
104
+ */
105
+ export function isPlaywrightRunnerInstall(baseCommand) {
106
+ const cli = baseCommand[1] ?? '';
107
+ if (!cli.endsWith('cli.js'))
108
+ return false;
109
+ let manifest;
110
+ try {
111
+ manifest = readFileSync(join(dirname(cli), 'package.json'), 'utf8');
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ try {
117
+ const parsed = JSON.parse(manifest);
118
+ return parsed.name === 'playwright' || parsed.name === '@playwright/test';
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ }
40
124
  /**
41
125
  * The pinned playwright version visible to this process (the pack's own
42
126
  * dependency — the same CLI the supervised run uses), or 'unknown' when
@@ -52,20 +136,62 @@ export function playwrightVersion() {
52
136
  return 'unknown';
53
137
  }
54
138
  }
139
+ /**
140
+ * The directory the runner child runs from: the directory of the
141
+ * selected native config, or the repo root when there is none. Exported
142
+ * because the trusted CLI resolves the SAME directory when it arms the
143
+ * global preparation freeze — a barrier whose baseline environment came
144
+ * from a different resolution than the spawn would project nothing.
145
+ *
146
+ * @param cwd: the absolute repo root.
147
+ *
148
+ * @returns
149
+ * string: absolute native config directory.
150
+ */
151
+ export function nativeConfigDirOf(cwd) {
152
+ const consumerConfig = findPlaywrightConfig(cwd);
153
+ return consumerConfig === null ? cwd : dirname(resolve(cwd, consumerConfig));
154
+ }
155
+ /**
156
+ * The exact environment the supervised runner child starts with: the
157
+ * ALLOWLISTED set (never a wholesale `process.env` merge) plus the
158
+ * non-secret native-config-dir context. The freeze controller projects
159
+ * body workers back to precisely this map, so it is exported for the one
160
+ * caller that must know it before the spawn.
161
+ *
162
+ * @param vars: supervisor-supplied run variables (already child-safe).
163
+ * @param cwd: the absolute repo root.
164
+ * @param ambient: the ambient environment to fall back to (tests only).
165
+ *
166
+ * @returns
167
+ * Record<string, string>: the child's own environment.
168
+ */
169
+ export function supervisedRunnerChildEnv(vars, cwd, ambient = process.env) {
170
+ const child = buildRunnerChildEnv(vars, ambient);
171
+ child[ENV_PLAYWRIGHT_CONFIG_DIR] = nativeConfigDirOf(cwd);
172
+ return child;
173
+ }
55
174
  /**
56
175
  * Executes the configured playwright suite under trusted supervision and
57
176
  * returns the structured outcome envelope (plan Phase 4 item 1). The
58
177
  * consumer's config file is NEVER loaded (see the module doc); the run
59
- * uses the synthesized trusted config over the exact selected files.
178
+ * uses the synthesized trusted config over the exact selected files,
179
+ * narrowed below file granularity to the exact selected `file:line`
180
+ * locations when the caller supplies them.
60
181
  *
61
182
  * Args:
62
183
  * selection: the exact logical keys the supervisor expects (data only
63
- * at this layer — the run itself is the full configured suite).
184
+ * at this layer — the run is driven by `options.testFiles` plus the
185
+ * optional `options.testLocations`).
64
186
  * env: run-state dir + run identity + pre-sanitized vars the child
65
187
  * inherits (witness wiring; NEVER verifier material, NEVER state
66
188
  * paths — the child must not locate the spool or outcomes files).
67
- * options: runner command override (tests), timeout, cwd, the exact
68
- * test files/projects to run, reporter entry override.
189
+ * options: runner command override (tests), timeout, the repo root,
190
+ * the exact test files/locations/projects to run, reporter entry
191
+ * override. The runner CHILD runs from the directory of the selected
192
+ * native config — the way the owner runs the suite, and the way
193
+ * enumeration read it — so a project's own relative paths resolve
194
+ * exactly as they do outside Gateforge.
69
195
  *
70
196
  * Returns:
71
197
  * Promise<RunnerExecutionEnvelope>: the structured outcome envelope —
@@ -73,40 +199,113 @@ export function playwrightVersion() {
73
199
  * outcomes, timeout, or nonzero exit.
74
200
  */
75
201
  export async function executeSupervisedPlaywright(selection, env, options = {}) {
76
- void selection; // the run is the full configured suite; the supervisor owns the comparison
202
+ void selection; // the run is driven by the file/location options; the supervisor owns the comparison
77
203
  const cwd = options.cwd ?? process.cwd();
204
+ const consumerConfigDir = nativeConfigDirOf(cwd);
78
205
  const outcomesPath = join(env.stateDir, 'runner-outcomes.json');
79
206
  // A stale outcomes file from a previous run must never be readable as
80
207
  // this run's result: remove it before spawning.
81
208
  rmSync(outcomesPath, { force: true });
209
+ const baseCommand = options.command ?? commandFromDirectory(consumerConfigDir);
210
+ const isStub = options.command !== undefined;
211
+ // Locate the consumer config without loading it; only the runner child
212
+ // receives this context.
213
+ const childEnv = supervisedRunnerChildEnv(env.vars, cwd);
214
+ // The GLOBAL preparation freeze (see `discovery/prepare-barrier.ts`),
215
+ // already ARMED by the trusted CLI: the CLI owns the per-invocation
216
+ // signing key, the nonce and the baseline child environment, and it
217
+ // needs the control's paths BEFORE the spawn to poll for the request.
218
+ // A runner that is NOT a genuine Playwright installation never carries
219
+ // the barrier: there is no native scheduler, no worker host and no
220
+ // `playwright/test` module, so the controller project could only fake
221
+ // its own protocol and the ordering audit could only ever fail the run
222
+ // for a handshake that was never possible. This is the same structural
223
+ // predicate the trusted CLI applies before it arms a freeze
224
+ // ({@link isPlaywrightRunnerInstall}), so both sides agree.
225
+ const freeze = isStub || !isPlaywrightRunnerInstall(baseCommand) ? null : (options.freeze ?? null);
82
226
  // Trusted-config synthesis (execution-authority fix): the consumer
83
227
  // config is data at most, never code. The synthesized config forces
84
228
  // the engine reporter (absolute entry, parent-side paths as options)
85
229
  // over the exact selected files. A hostile consumer config never
86
230
  // executes, so it cannot fabricate spool/outcomes and exit early.
231
+ // The freeze controller enters here as one more PROJECT SCOPE: the
232
+ // engine gives every body project it as the first dependency and gives
233
+ // it the full prerequisite closure, so the runner's own scheduler puts
234
+ // one prepared snapshot between the prerequisites and every body.
87
235
  const { configPath } = synthesizeTrustedConfig({
88
236
  cwd,
237
+ nativeConfigDir: consumerConfigDir,
89
238
  stateDir: env.stateDir,
90
239
  runId: env.runId,
91
240
  reporterEntry: options.reporterEntry ?? trustedReporterEntry(),
241
+ // The engine's own freeze controller is excluded from the reporter's
242
+ // outcome rows, claims and lifecycle events by its ABSOLUTE pinned
243
+ // path — never by title or project name. Unarmed, the field is absent
244
+ // and the reporter records every test exactly as before.
245
+ ...(freeze === null ? {} : { controlSpecPath: freeze.control.specPath }),
92
246
  ...(options.appBaseUrl !== undefined ? { appBaseUrl: options.appBaseUrl } : {}),
93
247
  ...(options.storageState !== undefined ? { storageState: options.storageState } : {}),
94
248
  ...(options.testFiles !== undefined ? { testFiles: options.testFiles } : {}),
95
249
  ...(options.projects !== undefined ? { projects: options.projects } : {}),
250
+ ...(freeze === null
251
+ ? options.projectScopes === undefined
252
+ ? {}
253
+ : { projectScopes: options.projectScopes }
254
+ : {
255
+ projectScopes: freezeProjectScopes(freeze.control, options.projectScopes ?? [], freeze.prerequisiteProjects),
256
+ }),
96
257
  });
97
- const baseCommand = options.command ?? defaultPlaywrightCommand(cwd);
98
- const isStub = options.command !== undefined;
258
+ // Positional location filters are resolved against the repo root
259
+ // BEFORE the spawn: the child runs from the config directory, so a
260
+ // repo-relative argument would be filtered from the wrong base.
261
+ const locations = [...new Set(options.testLocations ?? [])]
262
+ .sort()
263
+ .map((location) => absoluteLocation(cwd, location));
264
+ // Positional filters REPLACE the runner's own selection, so a named run
265
+ // that filtered only candidate tests would also filter the engine's own
266
+ // controller out — the barrier would never run and the audit would
267
+ // (correctly) fail the run. The control spec's ABSOLUTE path is
268
+ // therefore appended, and ONLY when filters are present: with zero
269
+ // filters the whole trusted config runs, adding the file on its own
270
+ // would narrow a full suite to the control alone. The reporter still
271
+ // excludes that file by identity, so it contributes no case. That path
272
+ // points OUTSIDE the repository (the spec's private per-run
273
+ // directory), which is exactly what the runner's positional filter
274
+ // matches on — the reported file location, not a path below the
275
+ // config's `testDir`.
276
+ const controlLocation = freeze === null || locations.length === 0 ? [] : [freeze.control.specPath];
99
277
  const argv = isStub
100
- ? [...baseCommand, 'test', '--retries=0']
101
- : [...baseCommand, 'test', '--config', configPath, '--retries=0', '--workers=1'];
278
+ ? [...baseCommand, 'test', '--retries=0', ...locations, ...controlLocation]
279
+ : [
280
+ ...baseCommand,
281
+ 'test',
282
+ '--config',
283
+ configPath,
284
+ '--retries=0',
285
+ '--workers=1',
286
+ ...locations,
287
+ ...controlLocation,
288
+ ];
289
+ // The synthesized trusted config is PINNED before the spawn: it is the
290
+ // whole authority the runner executes, and a replaced one would steer
291
+ // every body. The digest is compared again after the child exits, so a
292
+ // same-UID swap during the run is detected rather than trusted. What
293
+ // this does NOT claim is physical immutability: an attacker who both
294
+ // replaces the file and restores it between the two reads stays outside
295
+ // this boundary, exactly like every other local control file here.
296
+ const configDigestBefore = createHash('sha256').update(readFileSync(configPath)).digest('hex');
102
297
  const child = spawn(argv[0] ?? '', argv.slice(1), {
103
- cwd,
298
+ // The NATIVE CONFIG DIRECTORY, the same one enumeration ran from:
299
+ // the repo root stays the identity/testDir root, while the child's
300
+ // own relative paths (a setup project's saved storage state above
301
+ // all) resolve exactly as they do when the owner runs the suite.
302
+ cwd: consumerConfigDir,
104
303
  // ALLOWLIST ONLY (enforcement-review fix 1 + execution-authority
105
304
  // fix): no wholesale process.env merge — the verifier key and every
106
305
  // other unlisted variable never reach the untrusted runner — and NO
107
306
  // state paths (spool/outcomes/obligations locations stay parent-side
108
307
  // so worker code cannot address them). stdio stdin is 'ignore'.
109
- env: buildRunnerChildEnv(env.vars, process.env),
308
+ env: childEnv,
110
309
  stdio: ['ignore', 'pipe', 'pipe'],
111
310
  });
112
311
  let stdout = '';
@@ -141,6 +340,18 @@ export async function executeSupervisedPlaywright(selection, env, options = {})
141
340
  settle({ code, timedOut, error: null });
142
341
  });
143
342
  });
343
+ // The pinned trusted config must still be the file the runner executed.
344
+ // A swap during the run (the runner child can address the state dir
345
+ // through the config path the CLI itself passed) is an integrity
346
+ // failure, not a recoverable run: the bodies that just produced
347
+ // evidence ran under rules nobody pinned.
348
+ if (!isStub) {
349
+ const configDigestAfter = createHash('sha256').update(readFileSync(configPath)).digest('hex');
350
+ if (configDigestAfter !== configDigestBefore) {
351
+ return incomplete(outcome.code, 'the synthesized trusted runner config changed during the supervised run — the run executed ' +
352
+ 'under rules the supervisor did not pin (fail closed)');
353
+ }
354
+ }
144
355
  void stdout;
145
356
  if (outcome.error !== null) {
146
357
  return incomplete(null, `supervised run could not start the runner (${argv.join(' ')}): ${outcome.error.message}`);
@@ -154,6 +365,48 @@ export async function executeSupervisedPlaywright(selection, env, options = {})
154
365
  return incomplete(outcome.code, 'runner outcomes missing or malformed — the trusted engine reporter writes them on every ' +
155
366
  'supervised run (absent = crash, kill, or lost contact; an incomplete run never reports success)');
156
367
  }
368
+ return parseOutcomesDocument(document, outcome.code);
369
+ }
370
+ /**
371
+ * Resolves one repo-relative `file:line[:column]` location against the
372
+ * repo root. The runner child runs from the native config directory, so
373
+ * a location left repo-relative would be filtered from the wrong base;
374
+ * an absolute argument targets the very same file either way. An
375
+ * already-absolute value (or one without a line) passes through the
376
+ * resolver unchanged.
377
+ */
378
+ function absoluteLocation(root, location) {
379
+ const parsed = /^(.*?):(\d+):?(\d+)?$/.exec(location);
380
+ const file = parsed === null ? location : (parsed[1] ?? location);
381
+ const absoluteFile = resolve(root, file);
382
+ const line = parsed?.[2];
383
+ if (line === undefined)
384
+ return absoluteFile;
385
+ const column = parsed?.[3];
386
+ return column === undefined ? `${absoluteFile}:${line}` : `${absoluteFile}:${line}:${column}`;
387
+ }
388
+ /**
389
+ * Maps one validated runner-outcomes document onto the structured
390
+ * outcome envelope. Shared by the supervised run and the runner-adapter
391
+ * contract's `parseResults` (plan 2026-09-25 phase 0) so BOTH read the
392
+ * runner's report through exactly one mapping — a second copy is how a
393
+ * supervised run and a contract run start disagreeing about what a
394
+ * green run looks like.
395
+ *
396
+ * Reporter data is INPUT here, never signature authority: `complete` is
397
+ * the adapter's honest read of runner status, runner-level errors, shard
398
+ * completeness, retry attempts, and the process exit, and supervision
399
+ * (`@gate-forge/core`) still compares the outcomes against the expected
400
+ * set fixed before the run.
401
+ *
402
+ * Args:
403
+ * document: the validated runner-outcomes document.
404
+ * processExit: the runner process exit status (null when it never ran).
405
+ *
406
+ * Returns:
407
+ * RunnerExecutionEnvelope: the structured outcome envelope.
408
+ */
409
+ export function parseOutcomesDocument(document, processExit) {
157
410
  const runnerErrorsFailed = document.runnerErrors.length > 0;
158
411
  const fixtureOutcome = document.runStatus === 'passed' && !runnerErrorsFailed
159
412
  ? 'passed'
@@ -171,13 +424,21 @@ export async function executeSupervisedPlaywright(selection, env, options = {})
171
424
  }));
172
425
  const maxAttempt = outcomes.reduce((max, row) => Math.max(max, row.attempt), 1);
173
426
  const retriesDetected = maxAttempt > 1;
174
- const complete = document.runStatus === 'passed' &&
427
+ // A row the reporter could not identify belongs to NO test. The
428
+ // reporter always writes the runner's own test id, so this only fires
429
+ // for a report whose per-test identity never reached it — and then
430
+ // the run is incomplete rather than partially attributed (the same
431
+ // rule the witness applies to traffic that bypassed every session
432
+ // channel).
433
+ const unattributed = outcomes.filter((row) => row.frameworkId === '').length;
434
+ const complete = unattributed === 0 &&
435
+ document.runStatus === 'passed' &&
175
436
  !runnerErrorsFailed &&
176
437
  shardComplete &&
177
438
  !retriesDetected &&
178
- outcome.code === 0;
439
+ processExit === 0;
179
440
  return {
180
- processExit: outcome.code,
441
+ processExit,
181
442
  complete,
182
443
  outcomes,
183
444
  fixtureOutcome,
@@ -191,37 +452,71 @@ export async function executeSupervisedPlaywright(selection, env, options = {})
191
452
  ...(complete
192
453
  ? {}
193
454
  : {
194
- incompleteDetail: document.runStatus !== 'passed'
195
- ? `runner reported final status '${String(document.runStatus ?? 'unknown')}'`
196
- : runnerErrorsFailed
197
- ? `runner-level errors observed: ${document.runnerErrors[0] ?? ''}`
198
- : !shardComplete
199
- ? `shard run incomplete (${String(document.shard?.total ?? '?')} shards declared)`
200
- : outcome.code !== 0
201
- ? `runner exited with status ${String(outcome.code)}`
202
- : 'supervised run incomplete',
455
+ incompleteDetail: unattributed > 0
456
+ ? `${String(unattributed)} outcome row(s) carried no runner test id — untagged results are never attributed to a test`
457
+ : document.runStatus !== 'passed'
458
+ ? `runner reported final status '${String(document.runStatus ?? 'unknown')}'`
459
+ : runnerErrorsFailed
460
+ ? `runner-level errors observed: ${document.runnerErrors[0] ?? ''}`
461
+ : !shardComplete
462
+ ? `shard run incomplete (${String(document.shard?.total ?? '?')} shards declared)`
463
+ : processExit !== 0
464
+ ? `runner exited with status ${String(processExit)}`
465
+ : 'supervised run incomplete',
203
466
  }),
204
467
  };
205
468
  }
206
469
  /**
207
- * Default runner command: the engine's own pinned playwright CLI. The
208
- * CLI is passed as a PLAIN absolute filesystem path — Node's process
209
- * entry must be a path, never a `file:` URL (a URL argument fails with
470
+ * Parses a runner-outcomes document supplied as TEXT: the
471
+ * runner-adapter contract's `parseResults` surface, so a caller can
472
+ * grade a report the adapter did not spawn.
473
+ *
474
+ * Args:
475
+ * raw: the outcomes document JSON text.
476
+ * processExit: the runner process exit status.
477
+ *
478
+ * Returns:
479
+ * RunnerExecutionEnvelope: the envelope, or a typed incomplete one
480
+ * when the document is unreadable (fail closed).
481
+ */
482
+ export function parseOutcomesText(raw, processExit) {
483
+ let parsed;
484
+ try {
485
+ parsed = JSON.parse(raw);
486
+ }
487
+ catch (error) {
488
+ return incomplete(processExit, `runner outcomes are not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
489
+ }
490
+ const validated = validateOutcomesDocument(parsed);
491
+ if (validated === null) {
492
+ return incomplete(processExit, 'runner outcomes are missing or malformed — a malformed report is never read as a green run');
493
+ }
494
+ return parseOutcomesDocument(validated, processExit);
495
+ }
496
+ /**
497
+ * Default runner command: the scanned repo's own playwright CLI when it
498
+ * has one, else the engine's own pinned playwright. The CLI is passed
499
+ * as a PLAIN absolute filesystem path — Node's process entry must be a
500
+ * path, never a `file:` URL (a URL argument fails with
210
501
  * MODULE_NOT_FOUND before the runner starts, which would masquerade as
211
502
  * a failed suite). A broken pack dependency surfaces as the typed
212
503
  * incomplete envelope (the argv names the path), never a hang.
213
504
  *
505
+ * Args:
506
+ * cwd: absolute root of the repo being run, when the caller knows it.
507
+ *
214
508
  * Returns:
215
509
  * readonly string[]: `[process.execPath, <playwright cli.js>]`.
216
510
  */
217
511
  export function defaultPlaywrightCommand(cwd) {
218
- // CONSUMER-FIRST resolution (consumer migration, E22): the supervised
219
- // run must execute under the scanned repo's OWN playwright — its
220
- // config and specs load through that version, and a mismatch dies with
221
- // the two-versions-of-@playwright/test conflict. Fixture repos symlink
222
- // the monorepo node_modules, so the fallback resolves identically.
223
- if (cwd !== undefined) {
224
- for (const candidate of localPlaywrightCliCandidates(cwd)) {
512
+ if (cwd === undefined)
513
+ return commandFromDirectory();
514
+ const config = findPlaywrightConfig(cwd);
515
+ return commandFromDirectory(config === null ? cwd : dirname(resolve(cwd, config)));
516
+ }
517
+ function commandFromDirectory(startDir) {
518
+ if (startDir !== undefined) {
519
+ for (const candidate of localPlaywrightCliCandidates(startDir)) {
225
520
  if (existsSync(candidate))
226
521
  return [process.execPath, candidate];
227
522
  }
@@ -256,16 +551,32 @@ function readOutcomesDocument(path) {
256
551
  catch {
257
552
  return null;
258
553
  }
259
- let document;
554
+ let parsed;
260
555
  try {
261
- document = JSON.parse(raw);
556
+ parsed = JSON.parse(raw);
262
557
  }
263
558
  catch {
264
559
  return null;
265
560
  }
266
- if (typeof document !== 'object' || document === null || Array.isArray(document))
561
+ return validateOutcomesDocument(parsed);
562
+ }
563
+ /**
564
+ * Structurally validates an already-parsed runner-outcomes value.
565
+ * Split out of the reader so the runner-adapter contract can grade a
566
+ * report TEXT it was handed — with no file on disk — through the SAME
567
+ * validation the supervised run applies.
568
+ *
569
+ * Args:
570
+ * value: the parsed JSON value.
571
+ *
572
+ * Returns:
573
+ * RunnerOutcomesDocument | null: the validated document, or null when
574
+ * the shape is wrong (fail closed — never a partial read).
575
+ */
576
+ export function validateOutcomesDocument(value) {
577
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
267
578
  return null;
268
- const doc = document;
579
+ const doc = value;
269
580
  if (doc['schemaVersion'] !== 1 || !Array.isArray(doc['outcomes']))
270
581
  return null;
271
582
  const outcomes = [];
@@ -1 +1 @@
1
- {"version":3,"file":"supervised-run.js","sourceRoot":"","sources":["../../src/discovery/supervised-run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supervised-run.js","sourceRoot":"","sources":["../../src/discovery/supervised-run.ts"],"names":[],"mappings":"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"}