@gate-forge/pack-playwright 0.7.1 → 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.
- package/README.md +31 -0
- package/dist/constants.d.ts +13 -140
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +13 -148
- package/dist/constants.js.map +1 -1
- package/dist/cypress/plugin.d.ts +53 -0
- package/dist/cypress/plugin.d.ts.map +1 -0
- package/dist/cypress/plugin.js +369 -0
- package/dist/cypress/plugin.js.map +1 -0
- package/dist/cypress/spec-scan.d.ts +39 -0
- package/dist/cypress/spec-scan.d.ts.map +1 -0
- package/dist/cypress/spec-scan.js +301 -0
- package/dist/cypress/spec-scan.js.map +1 -0
- package/dist/diagnosis.d.ts +39 -0
- package/dist/diagnosis.d.ts.map +1 -0
- package/dist/diagnosis.js +63 -0
- package/dist/diagnosis.js.map +1 -0
- package/dist/discovery/adapter-projection.d.ts +13 -0
- package/dist/discovery/adapter-projection.d.ts.map +1 -0
- package/dist/discovery/adapter-projection.js +84 -0
- package/dist/discovery/adapter-projection.js.map +1 -0
- package/dist/discovery/config-locations.d.ts +5 -0
- package/dist/discovery/config-locations.d.ts.map +1 -0
- package/dist/discovery/config-locations.js +19 -0
- package/dist/discovery/config-locations.js.map +1 -0
- package/dist/discovery/cypress-runner-adapter.d.ts +112 -0
- package/dist/discovery/cypress-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/cypress-runner-adapter.js +501 -0
- package/dist/discovery/cypress-runner-adapter.js.map +1 -0
- package/dist/discovery/discover.d.ts +53 -1
- package/dist/discovery/discover.d.ts.map +1 -1
- package/dist/discovery/discover.js +100 -3
- package/dist/discovery/discover.js.map +1 -1
- package/dist/discovery/git-ignore.d.ts +13 -0
- package/dist/discovery/git-ignore.d.ts.map +1 -0
- package/dist/discovery/git-ignore.js +62 -0
- package/dist/discovery/git-ignore.js.map +1 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +9 -0
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/playwright-runner-adapter.d.ts +108 -0
- package/dist/discovery/playwright-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/playwright-runner-adapter.js +185 -0
- package/dist/discovery/playwright-runner-adapter.js.map +1 -0
- package/dist/discovery/prepare-barrier.d.ts +522 -0
- package/dist/discovery/prepare-barrier.d.ts.map +1 -0
- package/dist/discovery/prepare-barrier.js +739 -0
- package/dist/discovery/prepare-barrier.js.map +1 -0
- package/dist/discovery/pytest-adapter.d.ts.map +1 -1
- package/dist/discovery/pytest-adapter.js +6 -2
- package/dist/discovery/pytest-adapter.js.map +1 -1
- package/dist/discovery/pytest-runner-adapter.d.ts +124 -0
- package/dist/discovery/pytest-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/pytest-runner-adapter.js +454 -0
- package/dist/discovery/pytest-runner-adapter.js.map +1 -0
- package/dist/discovery/reconcile.d.ts +80 -11
- package/dist/discovery/reconcile.d.ts.map +1 -1
- package/dist/discovery/reconcile.js +395 -78
- package/dist/discovery/reconcile.js.map +1 -1
- package/dist/discovery/runner-env.d.ts +88 -2
- package/dist/discovery/runner-env.d.ts.map +1 -1
- package/dist/discovery/runner-env.js +142 -4
- package/dist/discovery/runner-env.js.map +1 -1
- package/dist/discovery/static-discovery.d.ts +38 -3
- package/dist/discovery/static-discovery.d.ts.map +1 -1
- package/dist/discovery/static-discovery.js +454 -15
- package/dist/discovery/static-discovery.js.map +1 -1
- package/dist/discovery/supervised-run.d.ts +199 -10
- package/dist/discovery/supervised-run.d.ts.map +1 -1
- package/dist/discovery/supervised-run.js +350 -39
- package/dist/discovery/supervised-run.js.map +1 -1
- package/dist/discovery/trusted-config.d.ts +180 -6
- package/dist/discovery/trusted-config.d.ts.map +1 -1
- package/dist/discovery/trusted-config.js +279 -10
- package/dist/discovery/trusted-config.js.map +1 -1
- package/dist/discovery/vitest-runner-adapter.d.ts +172 -0
- package/dist/discovery/vitest-runner-adapter.d.ts.map +1 -0
- package/dist/discovery/vitest-runner-adapter.js +607 -0
- package/dist/discovery/vitest-runner-adapter.js.map +1 -0
- package/dist/fixture/consumer-runner.d.ts +4 -0
- package/dist/fixture/consumer-runner.d.ts.map +1 -0
- package/dist/fixture/consumer-runner.js +38 -0
- package/dist/fixture/consumer-runner.js.map +1 -0
- package/dist/fixture/evidence.d.ts +27 -0
- package/dist/fixture/evidence.d.ts.map +1 -1
- package/dist/fixture/evidence.js +12 -0
- package/dist/fixture/evidence.js.map +1 -1
- package/dist/fixture/fixture.d.ts +2 -1
- package/dist/fixture/fixture.d.ts.map +1 -1
- package/dist/fixture/fixture.js +1 -17
- package/dist/fixture/fixture.js.map +1 -1
- package/dist/fixture/witness-client.d.ts +6 -174
- package/dist/fixture/witness-client.d.ts.map +1 -1
- package/dist/fixture/witness-client.js +6 -267
- package/dist/fixture/witness-client.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +6 -12
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +6 -17
- package/dist/json.js.map +1 -1
- package/dist/reporter/project-graph-reporter.d.ts +92 -0
- package/dist/reporter/project-graph-reporter.d.ts.map +1 -0
- package/dist/reporter/project-graph-reporter.js +92 -0
- package/dist/reporter/project-graph-reporter.js.map +1 -0
- package/dist/reporter/reporter.cjs.map +1 -1
- package/dist/reporter/reporter.d.ts +93 -4
- package/dist/reporter/reporter.d.ts.map +1 -1
- package/dist/reporter/reporter.js +174 -18
- package/dist/reporter/reporter.js.map +1 -1
- package/dist/runner-claims.d.ts +13 -0
- package/dist/runner-claims.d.ts.map +1 -0
- package/dist/runner-claims.js +46 -0
- package/dist/runner-claims.js.map +1 -0
- package/dist/runner-resolution.d.ts +3 -0
- package/dist/runner-resolution.d.ts.map +1 -0
- package/dist/runner-resolution.js +14 -0
- package/dist/runner-resolution.js.map +1 -0
- package/dist/supervisor/client.d.ts +23 -1
- package/dist/supervisor/client.d.ts.map +1 -1
- package/dist/supervisor/client.js +49 -0
- package/dist/supervisor/client.js.map +1 -1
- package/dist/supervisor/drain.d.ts +65 -0
- package/dist/supervisor/drain.d.ts.map +1 -1
- package/dist/supervisor/drain.js +353 -9
- package/dist/supervisor/drain.js.map +1 -1
- package/dist/supervisor/index.d.ts +7 -3
- package/dist/supervisor/index.d.ts.map +1 -1
- package/dist/supervisor/index.js +7 -3
- package/dist/supervisor/index.js.map +1 -1
- package/dist/supervisor/spool.d.ts +65 -2
- package/dist/supervisor/spool.d.ts.map +1 -1
- package/dist/supervisor/spool.js +47 -0
- package/dist/supervisor/spool.js.map +1 -1
- package/dist/surface.d.ts +6 -207
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +6 -264
- package/dist/surface.js.map +1 -1
- package/dist/vitest/index.d.ts +23 -0
- package/dist/vitest/index.d.ts.map +1 -0
- package/dist/vitest/index.js +356 -0
- package/dist/vitest/index.js.map +1 -0
- package/dist/vitest/reporter.d.ts +83 -0
- package/dist/vitest/reporter.d.ts.map +1 -0
- package/dist/vitest/reporter.js +211 -0
- package/dist/vitest/reporter.js.map +1 -0
- package/dist/vitest/worker-slot.d.ts +36 -0
- package/dist/vitest/worker-slot.d.ts.map +1 -0
- package/dist/vitest/worker-slot.js +51 -0
- package/dist/vitest/worker-slot.js.map +1 -0
- package/dist/witness/adapter-registry.d.ts +6 -50
- package/dist/witness/adapter-registry.d.ts.map +1 -1
- package/dist/witness/adapter-registry.js +6 -257
- package/dist/witness/adapter-registry.js.map +1 -1
- package/dist/witness/behavior-request.d.ts +6 -76
- package/dist/witness/behavior-request.d.ts.map +1 -1
- package/dist/witness/behavior-request.js +6 -273
- package/dist/witness/behavior-request.js.map +1 -1
- package/dist/witness/behavior.d.ts +6 -48
- package/dist/witness/behavior.d.ts.map +1 -1
- package/dist/witness/behavior.js +6 -114
- package/dist/witness/behavior.js.map +1 -1
- package/dist/witness/bin.d.ts +6 -17
- package/dist/witness/bin.d.ts.map +1 -1
- package/dist/witness/bin.js +6 -168
- package/dist/witness/bin.js.map +1 -1
- package/dist/witness/browser.d.ts +14 -206
- package/dist/witness/browser.d.ts.map +1 -1
- package/dist/witness/browser.js +15 -654
- package/dist/witness/browser.js.map +1 -1
- package/dist/witness/classifications.d.ts +6 -38
- package/dist/witness/classifications.d.ts.map +1 -1
- package/dist/witness/classifications.js +6 -83
- package/dist/witness/classifications.js.map +1 -1
- package/dist/witness/env-attestation.d.ts +6 -94
- package/dist/witness/env-attestation.d.ts.map +1 -1
- package/dist/witness/env-attestation.js +6 -198
- package/dist/witness/env-attestation.js.map +1 -1
- package/dist/witness/fixture-provider.d.ts +6 -82
- package/dist/witness/fixture-provider.d.ts.map +1 -1
- package/dist/witness/fixture-provider.js +6 -105
- package/dist/witness/fixture-provider.js.map +1 -1
- package/dist/witness/loopback-pins.d.ts +6 -75
- package/dist/witness/loopback-pins.d.ts.map +1 -1
- package/dist/witness/loopback-pins.js +6 -240
- package/dist/witness/loopback-pins.js.map +1 -1
- package/dist/witness/server.d.ts +8 -26
- package/dist/witness/server.d.ts.map +1 -1
- package/dist/witness/server.js +24 -3761
- package/dist/witness/server.js.map +1 -1
- package/dist/witness/types.d.ts +6 -882
- package/dist/witness/types.d.ts.map +1 -1
- package/dist/witness/types.js +9 -1
- package/dist/witness/types.js.map +1 -1
- package/examples/overlay-proof.spec.js +75 -0
- package/package.json +8 -2
- package/python/__pycache__/gateforge_persistence_intents.cpython-312.pyc +0 -0
- package/python/__pycache__/gateforge_persistence_intents.cpython-314.pyc +0 -0
- 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 {
|
|
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
|
|
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,
|
|
68
|
-
* test files/projects to run, reporter entry
|
|
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
|
|
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
|
-
|
|
98
|
-
|
|
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
|
-
: [
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
439
|
+
processExit === 0;
|
|
179
440
|
return {
|
|
180
|
-
processExit
|
|
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:
|
|
195
|
-
?
|
|
196
|
-
:
|
|
197
|
-
? `runner
|
|
198
|
-
:
|
|
199
|
-
? `
|
|
200
|
-
:
|
|
201
|
-
? `
|
|
202
|
-
:
|
|
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
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
|
554
|
+
let parsed;
|
|
260
555
|
try {
|
|
261
|
-
|
|
556
|
+
parsed = JSON.parse(raw);
|
|
262
557
|
}
|
|
263
558
|
catch {
|
|
264
559
|
return null;
|
|
265
560
|
}
|
|
266
|
-
|
|
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 =
|
|
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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"}
|