@codyswann/lisa 4.28.4 → 4.29.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 +3 -1
- package/all/copy-overwrite/scripts/lisa-gates.mjs +2 -1
- package/all/copy-overwrite/scripts/lisa-hooks/sonar-secrets.sh +3 -2
- package/all/copy-overwrite/scripts/lisa-postinstall.mjs +6 -2
- package/cdk/create-only/vitest.config.local.ts +5 -1
- package/cdk/package-lisa/package.lisa.json +14 -7
- package/dist/cli/apply.d.ts +20 -0
- package/dist/cli/apply.d.ts.map +1 -1
- package/dist/cli/apply.js +70 -3
- package/dist/cli/apply.js.map +1 -1
- package/dist/cli/doctor-apply-freshness.d.ts.map +1 -1
- package/dist/cli/doctor-apply-freshness.js +10 -4
- package/dist/cli/doctor-apply-freshness.js.map +1 -1
- package/dist/cli/lisa-test-run-bootstrap.d.ts +3 -0
- package/dist/cli/lisa-test-run-bootstrap.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-bootstrap.js +201 -0
- package/dist/cli/lisa-test-run-bootstrap.js.map +1 -0
- package/dist/cli/lisa-test-run-ipc.d.ts +42 -0
- package/dist/cli/lisa-test-run-ipc.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-ipc.js +200 -0
- package/dist/cli/lisa-test-run-ipc.js.map +1 -0
- package/dist/cli/lisa-test-run-process-group.d.ts +30 -0
- package/dist/cli/lisa-test-run-process-group.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-process-group.js +123 -0
- package/dist/cli/lisa-test-run-process-group.js.map +1 -0
- package/dist/cli/lisa-test-run-reaper.d.ts +3 -0
- package/dist/cli/lisa-test-run-reaper.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-reaper.js +195 -0
- package/dist/cli/lisa-test-run-reaper.js.map +1 -0
- package/dist/cli/lisa-test-run-runtime.d.ts +46 -0
- package/dist/cli/lisa-test-run-runtime.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-runtime.js +123 -0
- package/dist/cli/lisa-test-run-runtime.js.map +1 -0
- package/dist/cli/lisa-test-run-supervisor.d.ts +13 -0
- package/dist/cli/lisa-test-run-supervisor.d.ts.map +1 -0
- package/dist/cli/lisa-test-run-supervisor.js +268 -0
- package/dist/cli/lisa-test-run-supervisor.js.map +1 -0
- package/dist/cli/lisa-test-run.d.ts +3 -0
- package/dist/cli/lisa-test-run.d.ts.map +1 -0
- package/dist/cli/lisa-test-run.js +66 -0
- package/dist/cli/lisa-test-run.js.map +1 -0
- package/dist/cli/shared-options.d.ts +11 -4
- package/dist/cli/shared-options.d.ts.map +1 -1
- package/dist/cli/shared-options.js +8 -8
- package/dist/cli/shared-options.js.map +1 -1
- package/dist/configs/vitest/base.d.ts.map +1 -1
- package/dist/configs/vitest/base.js +5 -2
- package/dist/configs/vitest/base.js.map +1 -1
- package/dist/configs/vitest/cdk.d.ts +4 -0
- package/dist/configs/vitest/cdk.d.ts.map +1 -1
- package/dist/configs/vitest/cdk.js +5 -0
- package/dist/configs/vitest/cdk.js.map +1 -1
- package/dist/configs/vitest/harper-fabric.d.ts.map +1 -1
- package/dist/configs/vitest/harper-fabric.js +1 -0
- package/dist/configs/vitest/harper-fabric.js.map +1 -1
- package/dist/configs/vitest/nestjs.d.ts.map +1 -1
- package/dist/configs/vitest/nestjs.js +1 -0
- package/dist/configs/vitest/nestjs.js.map +1 -1
- package/dist/configs/vitest/phaser.d.ts.map +1 -1
- package/dist/configs/vitest/phaser.js +1 -0
- package/dist/configs/vitest/phaser.js.map +1 -1
- package/dist/configs/vitest/scratch-authority.d.ts +25 -0
- package/dist/configs/vitest/scratch-authority.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-authority.js +107 -0
- package/dist/configs/vitest/scratch-authority.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts +5 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.js +219 -0
- package/dist/configs/vitest/scratch-bound-cleanup-programs.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup.d.ts +28 -0
- package/dist/configs/vitest/scratch-bound-cleanup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-cleanup.js +155 -0
- package/dist/configs/vitest/scratch-bound-cleanup.js.map +1 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts +17 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.js +149 -0
- package/dist/configs/vitest/scratch-bound-root-cleanup.js.map +1 -0
- package/dist/configs/vitest/scratch-global-setup.d.ts +17 -9
- package/dist/configs/vitest/scratch-global-setup.d.ts.map +1 -1
- package/dist/configs/vitest/scratch-global-setup.js +103 -35
- package/dist/configs/vitest/scratch-global-setup.js.map +1 -1
- package/dist/configs/vitest/scratch-leak-setup.d.ts +2 -0
- package/dist/configs/vitest/scratch-leak-setup.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-leak-setup.js +108 -0
- package/dist/configs/vitest/scratch-leak-setup.js.map +1 -0
- package/dist/configs/vitest/scratch-namespace-authority.d.ts +80 -0
- package/dist/configs/vitest/scratch-namespace-authority.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-namespace-authority.js +291 -0
- package/dist/configs/vitest/scratch-namespace-authority.js.map +1 -0
- package/dist/configs/vitest/scratch-owner.d.ts +131 -0
- package/dist/configs/vitest/scratch-owner.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-owner.js +297 -0
- package/dist/configs/vitest/scratch-owner.js.map +1 -0
- package/dist/configs/vitest/scratch-route-profile.d.ts +36 -0
- package/dist/configs/vitest/scratch-route-profile.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-route-profile.js +217 -0
- package/dist/configs/vitest/scratch-route-profile.js.map +1 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.d.ts +33 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.js +137 -0
- package/dist/configs/vitest/scratch-run-root-compatibility.js.map +1 -0
- package/dist/configs/vitest/scratch-run-root-intent.d.ts +66 -0
- package/dist/configs/vitest/scratch-run-root-intent.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-run-root-intent.js +183 -0
- package/dist/configs/vitest/scratch-run-root-intent.js.map +1 -0
- package/dist/configs/vitest/scratch-setup.d.ts.map +1 -1
- package/dist/configs/vitest/scratch-setup.js +45 -15
- package/dist/configs/vitest/scratch-setup.js.map +1 -1
- package/dist/configs/vitest/scratch-supervision-intent.d.ts +8 -0
- package/dist/configs/vitest/scratch-supervision-intent.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision-intent.js +125 -0
- package/dist/configs/vitest/scratch-supervision-intent.js.map +1 -0
- package/dist/configs/vitest/scratch-supervision-protocol.d.ts +12 -0
- package/dist/configs/vitest/scratch-supervision-protocol.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision-protocol.js +230 -0
- package/dist/configs/vitest/scratch-supervision-protocol.js.map +1 -0
- package/dist/configs/vitest/scratch-supervision.d.ts +64 -0
- package/dist/configs/vitest/scratch-supervision.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-supervision.js +209 -0
- package/dist/configs/vitest/scratch-supervision.js.map +1 -0
- package/dist/configs/vitest/scratch-sweep.d.ts +66 -0
- package/dist/configs/vitest/scratch-sweep.d.ts.map +1 -0
- package/dist/configs/vitest/scratch-sweep.js +82 -0
- package/dist/configs/vitest/scratch-sweep.js.map +1 -0
- package/dist/configs/vitest/scratch.d.ts +14 -187
- package/dist/configs/vitest/scratch.d.ts.map +1 -1
- package/dist/configs/vitest/scratch.js +18 -285
- package/dist/configs/vitest/scratch.js.map +1 -1
- package/dist/configs/vitest/typescript.d.ts.map +1 -1
- package/dist/configs/vitest/typescript.js +1 -0
- package/dist/configs/vitest/typescript.js.map +1 -1
- package/dist/core/apply-mode.d.ts +80 -29
- package/dist/core/apply-mode.d.ts.map +1 -1
- package/dist/core/apply-mode.js +23 -2
- package/dist/core/apply-mode.js.map +1 -1
- package/dist/core/apply-receipt.d.ts +5 -1
- package/dist/core/apply-receipt.d.ts.map +1 -1
- package/dist/core/apply-receipt.js.map +1 -1
- package/dist/core/config.d.ts +24 -12
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +8 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +63 -15
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts +1 -1
- package/dist/migrations/ensure-lisa-postinstall.d.ts.map +1 -1
- package/dist/migrations/ensure-lisa-postinstall.js +28 -5
- package/dist/migrations/ensure-lisa-postinstall.js.map +1 -1
- package/dist/utils/postinstall-trampoline-source.js +10 -1
- package/dist/utils/postinstall-trampoline-source.js.map +1 -1
- package/expo/package-lisa/package.lisa.json +14 -14
- package/harper-fabric/package-lisa/package.lisa.json +8 -3
- package/nestjs/create-only/vitest.config.local.ts +5 -1
- package/nestjs/package-lisa/package.lisa.json +14 -8
- package/npm-package/package-lisa/package.lisa.json +8 -0
- package/package.json +17 -13
- package/phaser/package-lisa/package.lisa.json +9 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/sonar-secrets.sh +3 -2
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/hooks/sonar-secrets.sh +3 -2
- package/scripts/install-claude-plugins.sh +7 -2
- package/typescript/create-only/vitest.config.local.ts +5 -1
- package/typescript/package-lisa/package.lisa.json +14 -8
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/** Runtime-only companion, environment, and signal escalation primitives. */
|
|
2
|
+
import { fork } from "node:child_process";
|
|
3
|
+
import { env } from "node:process";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { SCRATCH_PREFIXES_ENV, SCRATCH_SUITE_ENV, } from "../configs/vitest/scratch-route-profile.js";
|
|
7
|
+
import { SCRATCH_SUPERVISION_LEASE_ENV } from "../configs/vitest/scratch-supervision.js";
|
|
8
|
+
import { drainTestRunTarget, } from "./lisa-test-run-process-group.js";
|
|
9
|
+
/** Grace period for a payload to honor a forwarded catchable signal. */
|
|
10
|
+
const FORWARDED_SIGNAL_GRACE_MS = 1_000;
|
|
11
|
+
/** Private deterministic protocol-fault seam. */
|
|
12
|
+
const TEST_FAULT_ENV = "LISA_TEST_RUN_TEST_FAULT";
|
|
13
|
+
/** Catchable signals forwarded to the target process group. */
|
|
14
|
+
export const FORWARDED_SIGNALS = [
|
|
15
|
+
"SIGINT",
|
|
16
|
+
"SIGTERM",
|
|
17
|
+
"SIGHUP",
|
|
18
|
+
];
|
|
19
|
+
/**
|
|
20
|
+
* Start one source-or-built sibling as a detached IPC child.
|
|
21
|
+
* @param name - Sibling module basename
|
|
22
|
+
* @returns Detached protocol companion
|
|
23
|
+
*/
|
|
24
|
+
export function forkDetachedSibling(name) {
|
|
25
|
+
const self = fileURLToPath(import.meta.url);
|
|
26
|
+
const modulePath = path.join(path.dirname(self), `${name}${path.extname(self)}`);
|
|
27
|
+
return fork(modulePath, [], {
|
|
28
|
+
cwd: process.cwd(),
|
|
29
|
+
detached: true,
|
|
30
|
+
execArgv: process.execArgv,
|
|
31
|
+
stdio: ["ignore", "inherit", "inherit", "ipc"],
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Convert inherited values plus the frozen lease to the spawn contract.
|
|
36
|
+
* @param lease - Serialized exact suite lease
|
|
37
|
+
* @param profile - Frozen wrapper route profile
|
|
38
|
+
* @param directScratchRoot - Direct-adapter platform temp root, when applicable
|
|
39
|
+
* @returns String-only payload environment
|
|
40
|
+
*/
|
|
41
|
+
export function payloadEnvironment(lease, profile, directScratchRoot) {
|
|
42
|
+
return Object.fromEntries(Object.entries({
|
|
43
|
+
...env,
|
|
44
|
+
[SCRATCH_SUPERVISION_LEASE_ENV]: lease,
|
|
45
|
+
[SCRATCH_SUITE_ENV]: profile.suiteLabel,
|
|
46
|
+
[SCRATCH_PREFIXES_ENV]: JSON.stringify(profile.registeredPrefixes),
|
|
47
|
+
...(directScratchRoot === undefined
|
|
48
|
+
? {}
|
|
49
|
+
: {
|
|
50
|
+
TMPDIR: directScratchRoot,
|
|
51
|
+
TMP: directScratchRoot,
|
|
52
|
+
TEMP: directScratchRoot,
|
|
53
|
+
}),
|
|
54
|
+
}).filter((entry) => entry[0] !== TEST_FAULT_ENV && entry[1] !== undefined));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Reject if the detached cleanup authority exits during the payload.
|
|
58
|
+
* @param reaper - Armed detached reaper
|
|
59
|
+
* @returns Promise that only rejects on exit
|
|
60
|
+
*/
|
|
61
|
+
export function rejectOnReaperExit(reaper) {
|
|
62
|
+
return new Promise((_, reject) => {
|
|
63
|
+
const onExit = () => {
|
|
64
|
+
reaper.off("exit", onExit);
|
|
65
|
+
reject(new Error("Detached reaper exited while the payload was active"));
|
|
66
|
+
};
|
|
67
|
+
reaper.once("exit", onExit);
|
|
68
|
+
if (reaper.exitCode !== null || reaper.signalCode !== null)
|
|
69
|
+
onExit();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Drain with deterministic birth-probe failures only in dedicated controls.
|
|
74
|
+
* @param target - Armed target authority
|
|
75
|
+
* @returns Bounded drain promise
|
|
76
|
+
*/
|
|
77
|
+
export function drainSupervisedTarget(target) {
|
|
78
|
+
const fault = env[TEST_FAULT_ENV];
|
|
79
|
+
if (fault === "stop-send-closed" || fault === "stop-send-rejected") {
|
|
80
|
+
return Promise.resolve();
|
|
81
|
+
}
|
|
82
|
+
if (fault === "birth-unavailable-on-drain") {
|
|
83
|
+
return drainTestRunTarget(target, {
|
|
84
|
+
probes: { processBirthFingerprint: () => undefined },
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
if (fault === "birth-mismatch-on-drain") {
|
|
88
|
+
return drainTestRunTarget(target, {
|
|
89
|
+
probes: { processBirthFingerprint: () => "mismatched-birth-control" },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return drainTestRunTarget(target);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Build one cancellable TERM-to-KILL escalation.
|
|
96
|
+
* @param target - Armed birth-bound target
|
|
97
|
+
* @returns Cancellable escalation
|
|
98
|
+
*/
|
|
99
|
+
export function createSignalEscalation(target) {
|
|
100
|
+
const state = { started: false };
|
|
101
|
+
const promise = new Promise((resolve, reject) => {
|
|
102
|
+
// eslint-disable-next-line functional/immutable-data -- one promise settlement handle
|
|
103
|
+
state.settle = { resolve, reject };
|
|
104
|
+
});
|
|
105
|
+
return {
|
|
106
|
+
promise,
|
|
107
|
+
begin: signal => {
|
|
108
|
+
if (state.started)
|
|
109
|
+
return;
|
|
110
|
+
// eslint-disable-next-line functional/immutable-data -- first forwarded signal wins
|
|
111
|
+
state.started = true;
|
|
112
|
+
// eslint-disable-next-line functional/immutable-data -- cancellable bounded timer
|
|
113
|
+
state.timer = setTimeout(() => {
|
|
114
|
+
void drainSupervisedTarget(target).then(() => state.settle?.resolve({ code: null, signal }), error => state.settle?.reject(error));
|
|
115
|
+
}, FORWARDED_SIGNAL_GRACE_MS);
|
|
116
|
+
},
|
|
117
|
+
cancel: () => {
|
|
118
|
+
if (state.timer !== undefined)
|
|
119
|
+
clearTimeout(state.timer);
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=lisa-test-run-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-runtime.js","sourceRoot":"","sources":["../../src/cli/lisa-test-run-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ScratchRouteProfile } from "../configs/vitest/scratch-route-profile.js";
|
|
2
|
+
import { type PayloadOutcome } from "./lisa-test-run-ipc.js";
|
|
3
|
+
/** Explicit scratch delivery selected by each generated route. */
|
|
4
|
+
export type TestRunAdapter = "vitest" | "direct";
|
|
5
|
+
/**
|
|
6
|
+
* Arm and execute one supervised command.
|
|
7
|
+
* @param argv - Exact payload argv
|
|
8
|
+
* @param profile - Frozen wrapper route profile
|
|
9
|
+
* @param adapter - Explicit payload delivery adapter
|
|
10
|
+
* @returns Payload outcome after proven cleanup
|
|
11
|
+
*/
|
|
12
|
+
export declare function superviseTestRun(argv: readonly [string, ...string[]], profile: ScratchRouteProfile, adapter: TestRunAdapter): Promise<PayloadOutcome>;
|
|
13
|
+
//# sourceMappingURL=lisa-test-run-supervisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-supervisor.d.ts","sourceRoot":"","sources":["../../src/cli/lisa-test-run-supervisor.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAKtF,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAgBhC,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAmSjD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EACpC,OAAO,EAAE,mBAAmB,EAC5B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,cAAc,CAAC,CAsBzB"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { env } from "node:process";
|
|
2
|
+
import { openOwnedScratchRunRoot, prepareOwnedScratchRunRoot, removeOwnedScratchRunRoot, } from "../configs/vitest/scratch.js";
|
|
3
|
+
import { readBoundedScratchNames, removeAuthorizedScratchChildren, } from "../configs/vitest/scratch-authority.js";
|
|
4
|
+
import { SCRATCH_OWNER_FILE } from "../configs/vitest/scratch-owner.js";
|
|
5
|
+
import { processBirthFingerprint } from "../configs/vitest/scratch-owner.js";
|
|
6
|
+
import { SCRATCH_SUPERVISION_LEASE_ENV, createScratchSupervisionLease, } from "../configs/vitest/scratch-supervision.js";
|
|
7
|
+
import { sendMessage, stopBootstrap, waitForExit, waitForMessage, waitForPayload, } from "./lisa-test-run-ipc.js";
|
|
8
|
+
import { assertTestRunPlatform } from "./lisa-test-run-process-group.js";
|
|
9
|
+
import { FORWARDED_SIGNALS, createSignalEscalation, drainSupervisedTarget, forkDetachedSibling, payloadEnvironment, rejectOnReaperExit, } from "./lisa-test-run-runtime.js";
|
|
10
|
+
/** Private deterministic protocol-fault seam, never inherited by the payload. */
|
|
11
|
+
const TEST_FAULT_ENV = "LISA_TEST_RUN_TEST_FAULT";
|
|
12
|
+
/**
|
|
13
|
+
* Prepare the immutable root intent before starting protocol companions.
|
|
14
|
+
* @param profile - Frozen wrapper route profile
|
|
15
|
+
* @returns Immutable root intent
|
|
16
|
+
*/
|
|
17
|
+
function prepareIntent(profile) {
|
|
18
|
+
return prepareOwnedScratchRunRoot(env[TEST_FAULT_ENV] === "birth-unavailable-on-prepare"
|
|
19
|
+
? {
|
|
20
|
+
platform: process.platform,
|
|
21
|
+
processBirthFingerprint: () => undefined,
|
|
22
|
+
suiteLabel: profile.suiteLabel,
|
|
23
|
+
registeredPrefixes: profile.registeredPrefixes,
|
|
24
|
+
}
|
|
25
|
+
: {
|
|
26
|
+
suiteLabel: profile.suiteLabel,
|
|
27
|
+
registeredPrefixes: profile.registeredPrefixes,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Arm both companions and materialize only after root/target acknowledgements.
|
|
32
|
+
* @param state - One foreground supervision state
|
|
33
|
+
*/
|
|
34
|
+
async function armAuthorities(state) {
|
|
35
|
+
await waitForMessage(state.reaper, "REAPER_READY");
|
|
36
|
+
const bootstrap = forkDetachedSibling("lisa-test-run-bootstrap");
|
|
37
|
+
// eslint-disable-next-line functional/immutable-data -- companion handle captured once
|
|
38
|
+
state.bootstrap = bootstrap;
|
|
39
|
+
await waitForMessage(bootstrap, "BOOTSTRAP_READY");
|
|
40
|
+
const birth = processBirthFingerprint(bootstrap.pid ?? 0);
|
|
41
|
+
if (bootstrap.pid === undefined || birth === undefined) {
|
|
42
|
+
throw new Error("Could not bind bootstrap process birth");
|
|
43
|
+
}
|
|
44
|
+
const target = {
|
|
45
|
+
pid: bootstrap.pid,
|
|
46
|
+
pgid: bootstrap.pid,
|
|
47
|
+
processBirthFingerprint: birth,
|
|
48
|
+
};
|
|
49
|
+
// eslint-disable-next-line functional/immutable-data -- target authority captured once
|
|
50
|
+
state.target = target;
|
|
51
|
+
const rootAck = waitForMessage(state.reaper, "ROOT_INTENT_ARMED", state.intent.token);
|
|
52
|
+
await sendMessage(state.reaper, {
|
|
53
|
+
type: "ROOT_INTENT",
|
|
54
|
+
correlation: state.intent.token,
|
|
55
|
+
intent: state.intent,
|
|
56
|
+
});
|
|
57
|
+
await rootAck;
|
|
58
|
+
const targetAck = waitForMessage(state.reaper, "TARGET_ARMED", state.intent.token);
|
|
59
|
+
await sendMessage(state.reaper, {
|
|
60
|
+
type: "TARGET_INTENT",
|
|
61
|
+
correlation: state.intent.token,
|
|
62
|
+
target,
|
|
63
|
+
});
|
|
64
|
+
await targetAck;
|
|
65
|
+
const rootArmed = waitForMessage(state.reaper, "ROOT_ARMED", state.intent.token);
|
|
66
|
+
await sendMessage(state.reaper, {
|
|
67
|
+
type: "MATERIALIZE_ROOT",
|
|
68
|
+
correlation: state.intent.token,
|
|
69
|
+
});
|
|
70
|
+
const acknowledgement = await rootArmed;
|
|
71
|
+
const opened = openOwnedScratchRunRoot(state.intent);
|
|
72
|
+
const acknowledgedRoot = acknowledgement["root"];
|
|
73
|
+
if (opened === undefined ||
|
|
74
|
+
acknowledgedRoot?.canonicalPath !== opened.owner.root.canonicalPath ||
|
|
75
|
+
acknowledgedRoot.dev !== opened.owner.root.dev ||
|
|
76
|
+
acknowledgedRoot.ino !== opened.owner.root.ino) {
|
|
77
|
+
throw new Error("Detached reaper acknowledged a different scratch root identity");
|
|
78
|
+
}
|
|
79
|
+
// eslint-disable-next-line functional/immutable-data -- exact materialization acknowledgement transition
|
|
80
|
+
state.rootMaterialized = true;
|
|
81
|
+
if (env[TEST_FAULT_ENV] === "kill-reaper-after-root") {
|
|
82
|
+
state.reaper.kill("SIGKILL");
|
|
83
|
+
await waitForExit(state.reaper);
|
|
84
|
+
throw new Error("Detached reaper exited after root materialization");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Send one immutable command after root and target authority are armed.
|
|
89
|
+
* @param state - One foreground supervision state
|
|
90
|
+
* @param argv - Exact payload argv
|
|
91
|
+
* @param profile - Frozen wrapper route profile
|
|
92
|
+
* @param adapter - Explicit payload delivery adapter
|
|
93
|
+
*/
|
|
94
|
+
async function configurePayload(state, argv, profile, adapter) {
|
|
95
|
+
if (state.bootstrap === undefined)
|
|
96
|
+
throw new Error("Bootstrap is not armed");
|
|
97
|
+
const lease = createScratchSupervisionLease(state.intent, {
|
|
98
|
+
suiteLabel: state.intent.suiteLabel,
|
|
99
|
+
registeredPrefixes: state.intent.registeredPrefixes,
|
|
100
|
+
});
|
|
101
|
+
const command = {
|
|
102
|
+
schema: 1,
|
|
103
|
+
argv,
|
|
104
|
+
env: payloadEnvironment(JSON.stringify(lease), profile, adapter === "direct" ? state.intent.rootPath : undefined),
|
|
105
|
+
};
|
|
106
|
+
if (adapter === "direct") {
|
|
107
|
+
// eslint-disable-next-line functional/immutable-data -- immutable invocation snapshot captured once
|
|
108
|
+
state.directBaseline = new Set(readBoundedScratchNames(state.intent.rootPath));
|
|
109
|
+
}
|
|
110
|
+
const commandReady = waitForMessage(state.bootstrap, "COMMAND_READY");
|
|
111
|
+
await sendMessage(state.bootstrap, { type: "COMMAND", command });
|
|
112
|
+
await commandReady;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Attribute and remove direct-adapter scratch additions after the payload drains.
|
|
116
|
+
* @param state - One foreground supervision state
|
|
117
|
+
*/
|
|
118
|
+
function auditDirectScratch(state) {
|
|
119
|
+
if (state.directBaseline === undefined)
|
|
120
|
+
return;
|
|
121
|
+
const opened = openOwnedScratchRunRoot(state.intent);
|
|
122
|
+
if (opened === undefined) {
|
|
123
|
+
throw new Error("Direct scratch root disappeared before invocation audit");
|
|
124
|
+
}
|
|
125
|
+
const additions = readBoundedScratchNames(opened.path).filter(name => name !== SCRATCH_OWNER_FILE && !state.directBaseline?.has(name));
|
|
126
|
+
const unregistered = additions.filter(name => !opened.owner.registeredPrefixes.some(prefix => name.startsWith(prefix)));
|
|
127
|
+
removeAuthorizedScratchChildren({
|
|
128
|
+
parent: opened.owner.root,
|
|
129
|
+
basenames: additions,
|
|
130
|
+
});
|
|
131
|
+
if (unregistered.length > 0) {
|
|
132
|
+
const names = [...unregistered].sort((left, right) => left === right ? 0 : left < right ? -1 : 1);
|
|
133
|
+
throw new Error(`Suite ${opened.owner.suiteLabel} leaked ${String(names.length)} unregistered direct scratch fixture(s): ${names.join(", ")}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Report a cleanup verdict without replacing an already-failing payload.
|
|
138
|
+
* @param error - Secondary direct-audit failure
|
|
139
|
+
*/
|
|
140
|
+
function reportPreservedAuditFailure(error) {
|
|
141
|
+
process.stderr.write(`lisa-test-run direct scratch audit also failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Execute the armed payload while retaining the first forwarded signal.
|
|
145
|
+
* @param state - One foreground supervision state
|
|
146
|
+
* @returns Exact payload outcome
|
|
147
|
+
*/
|
|
148
|
+
async function executePayload(state) {
|
|
149
|
+
const bootstrap = state.bootstrap;
|
|
150
|
+
const target = state.target;
|
|
151
|
+
if (bootstrap === undefined || target === undefined) {
|
|
152
|
+
throw new Error("Payload authority is not fully armed");
|
|
153
|
+
}
|
|
154
|
+
const escalation = createSignalEscalation(target);
|
|
155
|
+
// eslint-disable-next-line functional/immutable-data -- cancellable handle scoped to this run
|
|
156
|
+
state.signalEscalation = escalation;
|
|
157
|
+
for (const signal of FORWARDED_SIGNALS) {
|
|
158
|
+
// Persistent, not `once`. A one-shot listener is removed the first time it
|
|
159
|
+
// fires, and Node restores that signal's DEFAULT disposition the moment its
|
|
160
|
+
// last listener goes. A second delivery of the same signal during the grace
|
|
161
|
+
// window then kills this process outright — skipping the scratch removal
|
|
162
|
+
// this supervisor exists to guarantee. Ctrl-C pressed twice, or a scheduler
|
|
163
|
+
// that re-sends SIGTERM, is the ordinary case. The `finally` in
|
|
164
|
+
// superviseTestRun removes every one of these before the outcome is
|
|
165
|
+
// re-raised, so staying armed costs nothing.
|
|
166
|
+
process.on(signal, () => {
|
|
167
|
+
if (state.forwardedSignal !== undefined)
|
|
168
|
+
return;
|
|
169
|
+
// eslint-disable-next-line functional/immutable-data -- first observed terminal signal is preserved
|
|
170
|
+
state.forwardedSignal = signal;
|
|
171
|
+
void sendMessage(bootstrap, { type: "SIGNAL", signal }).catch(() => undefined);
|
|
172
|
+
escalation.begin(signal);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const outcomePromise = waitForPayload(bootstrap, () => state.forwardedSignal !== undefined);
|
|
176
|
+
await sendMessage(bootstrap, { type: "GO" });
|
|
177
|
+
if (env[TEST_FAULT_ENV] === "kill-reaper-after-go") {
|
|
178
|
+
state.reaper.kill("SIGKILL");
|
|
179
|
+
}
|
|
180
|
+
return await Promise.race([
|
|
181
|
+
outcomePromise,
|
|
182
|
+
rejectOnReaperExit(state.reaper),
|
|
183
|
+
escalation.promise,
|
|
184
|
+
]);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Drain, clean, and disarm after one payload result.
|
|
188
|
+
* @param state - One foreground supervision state
|
|
189
|
+
* @param outcome - Exact payload outcome
|
|
190
|
+
* @returns Outcome after cleanup and disarm
|
|
191
|
+
*/
|
|
192
|
+
async function finishSuccess(state, outcome) {
|
|
193
|
+
state.signalEscalation?.cancel();
|
|
194
|
+
await drainSupervisedTarget(state.target);
|
|
195
|
+
if (state.bootstrap !== undefined)
|
|
196
|
+
await stopBootstrap(state.bootstrap);
|
|
197
|
+
try {
|
|
198
|
+
auditDirectScratch(state);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
if (outcome.code === 0 && outcome.signal === null)
|
|
202
|
+
throw error;
|
|
203
|
+
reportPreservedAuditFailure(error);
|
|
204
|
+
}
|
|
205
|
+
removeOwnedScratchRunRoot(state.intent);
|
|
206
|
+
// eslint-disable-next-line code-organization/enforce-statement-order -- disarm is meaningful only after foreground removal
|
|
207
|
+
const disarmedAck = waitForMessage(state.reaper, "DISARMED");
|
|
208
|
+
await sendMessage(state.reaper, { type: "CLEANED" });
|
|
209
|
+
await disarmedAck;
|
|
210
|
+
await waitForExit(state.reaper);
|
|
211
|
+
// eslint-disable-next-line functional/immutable-data -- terminal verified state
|
|
212
|
+
state.disarmed = true;
|
|
213
|
+
return state.forwardedSignal === undefined
|
|
214
|
+
? outcome
|
|
215
|
+
: { code: null, signal: state.forwardedSignal };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Best-effort foreground cleanup that never hides a drain authority failure.
|
|
219
|
+
* @param state - One foreground supervision state
|
|
220
|
+
*/
|
|
221
|
+
async function cleanupFailure(state) {
|
|
222
|
+
await drainSupervisedTarget(state.target);
|
|
223
|
+
if (state.bootstrap !== undefined) {
|
|
224
|
+
try {
|
|
225
|
+
await stopBootstrap(state.bootstrap);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
state.bootstrap.kill("SIGKILL");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (state.rootMaterialized)
|
|
232
|
+
removeOwnedScratchRunRoot(state.intent);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Arm and execute one supervised command.
|
|
236
|
+
* @param argv - Exact payload argv
|
|
237
|
+
* @param profile - Frozen wrapper route profile
|
|
238
|
+
* @param adapter - Explicit payload delivery adapter
|
|
239
|
+
* @returns Payload outcome after proven cleanup
|
|
240
|
+
*/
|
|
241
|
+
export async function superviseTestRun(argv, profile, adapter) {
|
|
242
|
+
assertTestRunPlatform();
|
|
243
|
+
delete env[SCRATCH_SUPERVISION_LEASE_ENV];
|
|
244
|
+
// eslint-disable-next-line code-organization/enforce-statement-order -- inherited authority must be cleared before intent preparation
|
|
245
|
+
const state = {
|
|
246
|
+
intent: prepareIntent(profile),
|
|
247
|
+
reaper: forkDetachedSibling("lisa-test-run-reaper"),
|
|
248
|
+
rootMaterialized: false,
|
|
249
|
+
disarmed: false,
|
|
250
|
+
};
|
|
251
|
+
try {
|
|
252
|
+
await armAuthorities(state);
|
|
253
|
+
await configurePayload(state, argv, profile, adapter);
|
|
254
|
+
return await finishSuccess(state, await executePayload(state));
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
await cleanupFailure(state);
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
finally {
|
|
261
|
+
for (const signal of FORWARDED_SIGNALS)
|
|
262
|
+
process.removeAllListeners(signal);
|
|
263
|
+
state.signalEscalation?.cancel();
|
|
264
|
+
if (!state.disarmed && state.reaper.connected)
|
|
265
|
+
state.reaper.disconnect();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=lisa-test-run-supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run-supervisor.js","sourceRoot":"","sources":["../../src/cli/lisa-test-run-supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run.d.ts","sourceRoot":"","sources":["../../src/cli/lisa-test-run.ts"],"names":[],"mappings":";AAcA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/** Public entrypoint for birth-bound test supervision and scratch cleanup. */
|
|
3
|
+
// @ts-expect-error -- the shipped JavaScript helper carries the same checked JSDoc signature
|
|
4
|
+
import { invokedAsScript } from "../../scripts/lib/invoked-as-script.mjs";
|
|
5
|
+
import { resolveScratchRouteProfile, } from "../configs/vitest/scratch-route-profile.js";
|
|
6
|
+
import { superviseTestRun, } from "./lisa-test-run-supervisor.js";
|
|
7
|
+
export { assertTestRunPlatform } from "./lisa-test-run-process-group.js";
|
|
8
|
+
/** Dedicated operational-failure exit status. */
|
|
9
|
+
const OPERATIONAL_FAILURE_EXIT = 1;
|
|
10
|
+
/**
|
|
11
|
+
* Parse the exact public `--profile <route> --adapter <kind> -- <command>` syntax.
|
|
12
|
+
* @param argv - Public CLI arguments
|
|
13
|
+
* @returns Validated route profile and payload argv
|
|
14
|
+
*/
|
|
15
|
+
function commandArgv(argv) {
|
|
16
|
+
if (argv[0] !== "--profile" ||
|
|
17
|
+
argv[1] === undefined ||
|
|
18
|
+
argv[2] !== "--adapter" ||
|
|
19
|
+
(argv[3] !== "vitest" && argv[3] !== "direct") ||
|
|
20
|
+
argv[4] !== "--" ||
|
|
21
|
+
argv.length < 6 ||
|
|
22
|
+
argv[5] === undefined) {
|
|
23
|
+
throw new Error("Usage: lisa-test-run --profile <route> --adapter vitest|direct -- <executable> [args...]");
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
profile: resolveScratchRouteProfile(argv[1]),
|
|
27
|
+
adapter: argv[3],
|
|
28
|
+
argv: argv.slice(5),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse public input or emit the usage verdict without starting companions.
|
|
33
|
+
* @returns Validated invocation or undefined after a usage verdict
|
|
34
|
+
*/
|
|
35
|
+
function invocationOrExit() {
|
|
36
|
+
try {
|
|
37
|
+
return commandArgv(process.argv.slice(2));
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
process.stderr.write(`${error.message}\n`);
|
|
41
|
+
process.exitCode = 2;
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Run the public CLI and preserve the child result only after cleanup. */
|
|
46
|
+
async function main() {
|
|
47
|
+
const invocation = invocationOrExit();
|
|
48
|
+
if (invocation === undefined)
|
|
49
|
+
return;
|
|
50
|
+
try {
|
|
51
|
+
const outcome = await superviseTestRun(invocation.argv, invocation.profile, invocation.adapter);
|
|
52
|
+
if (outcome.signal !== null) {
|
|
53
|
+
process.removeAllListeners(outcome.signal);
|
|
54
|
+
process.kill(process.pid, outcome.signal);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
process.exit(outcome.code ?? OPERATIONAL_FAILURE_EXIT);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
process.stderr.write(`lisa-test-run failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
61
|
+
process.exit(OPERATIONAL_FAILURE_EXIT);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (invokedAsScript(import.meta.url))
|
|
65
|
+
void main();
|
|
66
|
+
//# sourceMappingURL=lisa-test-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lisa-test-run.js","sourceRoot":"","sources":["../../src/cli/lisa-test-run.ts"],"names":[],"mappings":";AACA,8EAA8E;AAC9E,6FAA6F;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE1E,OAAO,EACL,0BAA0B,GAE3B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,gBAAgB,GAEjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,iDAAiD;AACjD,MAAM,wBAAwB,GAAG,CAAC,CAAC;AASnC;;;;GAIG;AACH,SAAS,WAAW,CAAC,IAAuB;IAC1C,IACE,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;QACvB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;QACrB,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;QACvB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;QAC9C,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAChB,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EACrB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAA0B;KAC7C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IACvB,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,UAAU,CAAC,IAAI,EACf,UAAU,CAAC,OAAO,EAClB,UAAU,CAAC,OAAO,CACnB,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,wBAAwB,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACpF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAAE,KAAK,IAAI,EAAE,CAAC"}
|
|
@@ -12,11 +12,18 @@ export interface CLIOptions {
|
|
|
12
12
|
validate?: boolean;
|
|
13
13
|
skipGitCheck?: boolean;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Declare this apply a package-manager install lifecycle.
|
|
16
16
|
*
|
|
17
|
-
* The
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* The only thing that selects the reduced `postinstall-safe` subset. Every
|
|
18
|
+
* Lisa-written postinstall invocation carries it, in this spelling or as
|
|
19
|
+
* `LISA_POSTINSTALL=1` (CodySwannGT/lisa#3066).
|
|
20
|
+
*/
|
|
21
|
+
postinstallSafe?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Run the FULL apply even inside a declared postinstall.
|
|
24
|
+
*
|
|
25
|
+
* The override of last resort, for an operator forcing the complete apply
|
|
26
|
+
* from inside a lifecycle script.
|
|
20
27
|
*/
|
|
21
28
|
fullApply?: boolean;
|
|
22
29
|
/** Bare `--refresh-templates` yields true; with a value, the raw path list. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-options.d.ts","sourceRoot":"","sources":["../../src/cli/shared-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAwB,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOzD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAClC,gBAAgB,GAAG,SAAS,CAW9B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"shared-options.d.ts","sourceRoot":"","sources":["../../src/cli/shared-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAwB,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOzD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAClC,gBAAgB,GAAG,SAAS,CAW9B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAuC1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GACpB,gBAAgB,CAYlB"}
|
|
@@ -52,14 +52,14 @@ export function addSharedOptions(command) {
|
|
|
52
52
|
.option("-n, --dry-run", "Show what would be done without making changes")
|
|
53
53
|
.option("-y, --yes", "Non-interactive mode (auto-accept defaults, overwrite on conflict)")
|
|
54
54
|
.option("-v, --validate", "Validate project compatibility without applying changes")
|
|
55
|
-
.option("--skip-git-check", "Skip dirty git working directory check
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
55
|
+
.option("--skip-git-check", "Skip the dirty git working directory check. Means only that: the apply " +
|
|
56
|
+
"still runs in full, including every agent emit (CodySwannGT/lisa#3066).")
|
|
57
|
+
.option("--postinstall-safe", "Declare this apply a package-manager install lifecycle, which runs the " +
|
|
58
|
+
"reduced postinstall-safe subset: no agent emit (Codex, Claude, agy, " +
|
|
59
|
+
"Copilot, OpenCode) and no Sonar integration, so an install never " +
|
|
60
|
+
"regenerates committed agent trees. Equivalent to LISA_POSTINSTALL=1.")
|
|
61
|
+
.option("--full-apply", "Run the FULL apply even inside a declared postinstall. Overrides " +
|
|
62
|
+
"--postinstall-safe and LISA_POSTINSTALL=1.")
|
|
63
63
|
.option("--refresh-templates [paths]", "Let a non-interactive apply replace managed files it would otherwise report as out of date. " +
|
|
64
64
|
"Optionally scope to a comma-separated list of repo-relative paths " +
|
|
65
65
|
"(e.g. --refresh-templates=scripts/lisa-hooks). Backs up before replacing.")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-options.js","sourceRoot":"","sources":["../../src/cli/shared-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"shared-options.js","sourceRoot":"","sources":["../../src/cli/shared-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA+B9C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAmC;IAEnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,2EAA2E;IAC3E,uEAAuE;IACvE,6BAA6B;IAC7B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,oBAAoB,CAC5B,YAAY,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACpD,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,OAAO;SACX,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CACL,WAAW,EACX,oEAAoE,CACrE;SACA,MAAM,CACL,gBAAgB,EAChB,yDAAyD,CAC1D;SACA,MAAM,CACL,kBAAkB,EAClB,yEAAyE;QACvE,yEAAyE,CAC5E;SACA,MAAM,CACL,oBAAoB,EACpB,yEAAyE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,sEAAsE,CACzE;SACA,MAAM,CACL,cAAc,EACd,mEAAmE;QACjE,4CAA4C,CAC/C;SACA,MAAM,CACL,6BAA6B,EAC7B,8FAA8F;QAC5F,oEAAoE;QACpE,2EAA2E,CAC9E;SACA,MAAM,CACL,qBAAqB,EACrB,yCAAyC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,qDAAqD,EACjI,eAAe,CAChB,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAe,EACf,OAAgB,EAChB,MAAqB;IAErB,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC;QACjC,aAAa,EAAE,MAAM;YACnB,CAAC,CAAC,IAAI,mBAAmB,EAAE;YAC3B,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;QAC7B,gBAAgB,EAAE,IAAI,gBAAgB,EAAE;QACxC,gBAAgB,EAAE,IAAI,gBAAgB,EAAE;QACxC,UAAU,EAAE,IAAI,UAAU,EAAE;QAC5B,iBAAiB,EAAE,IAAI,iBAAiB,EAAE;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/base.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,8DAA8D;AAC9D,KAAK,UAAU,GAAG,cAAc,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAO/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAatD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAItD;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/configs/vitest/base.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,8DAA8D;AAC9D,KAAK,UAAU,GAAG,cAAc,CAAC;AAEjC;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,kBAO/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAatD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAItD;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAKrD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GACxB,YAAY,kBAAkB,KAC7B,gBAaD,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,kBAAkB,EAC5B,WAAW,kBAAkB,KAC5B,kBAiBF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,SAAS,UAAU,EAAE,KAAG,UA4C7D,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* project-specific vitest.config.ts files. Reduces duplication between
|
|
6
6
|
* typescript, nestjs, and other project type configurations.
|
|
7
7
|
*
|
|
8
|
-
* Published as part of the
|
|
8
|
+
* Published as part of the `@codyswann/lisa` npm package so downstream
|
|
9
9
|
* projects can import these utilities directly from the package.
|
|
10
10
|
* @see https://vitest.dev/config/
|
|
11
11
|
* @module configs/vitest/base
|
|
@@ -112,7 +112,10 @@ const resolveScratchModule = (basename) => {
|
|
|
112
112
|
* @see {@link module:configs/vitest/scratch} for the measurements behind this
|
|
113
113
|
*/
|
|
114
114
|
export function scratchSetupFiles() {
|
|
115
|
-
return [
|
|
115
|
+
return [
|
|
116
|
+
resolveScratchModule("scratch-setup"),
|
|
117
|
+
resolveScratchModule("scratch-leak-setup"),
|
|
118
|
+
];
|
|
116
119
|
}
|
|
117
120
|
/**
|
|
118
121
|
* Global setup that reclaims residue before a run and audits the namespace after it.
|