@codyswann/lisa 4.22.12 → 4.22.14
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/all/copy-overwrite/scripts/lib/gate-failure-diagnosis.mjs +4 -2
- package/all/copy-overwrite/scripts/lib/process-tree-runner.mjs +95 -14
- package/all/copy-overwrite/scripts/lisa-environment-prepare.mjs +10 -1
- package/all/copy-overwrite/scripts/lisa-floor-collisions.mjs +1 -0
- package/all/copy-overwrite/scripts/lisa-hooks/block-no-verify.sh +43 -2
- package/all/copy-overwrite/scripts/lisa-hooks/parity-safety-net.sh +19 -5
- package/all/copy-overwrite/scripts/lisa-reconcile-policy.mjs +13 -1
- package/all/copy-overwrite/scripts/lisa-schema-validate.mjs +2 -2
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +30 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.d.ts +5 -0
- package/dist/core/nightly-e2e-guard-behavior-certificate.d.ts.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +8 -2
- package/dist/core/nightly-e2e-guard-behavior-certificate.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +33 -32
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/opencode/plugin-templates/block-no-verify.sh +43 -2
- package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +4 -3
- package/dist/opencode/plugin-templates/lisa-block-no-verify.ts +11 -2
- package/dist/opencode/plugin-templates/parity-safety-net.sh +19 -5
- package/expo/create-only/.github/workflows/nightly-e2e-report.yml +1 -0
- package/package.json +3 -3
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/lisa/.codex-plugin/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/lisa/.codex-plugin/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-tracker-sync/SKILL.md +2 -2
- package/plugins/lisa/hooks/block-no-verify.sh +43 -2
- package/plugins/lisa/hooks/parity-safety-net.sh +19 -5
- package/plugins/lisa/hooks/threshold-ratchet-families.mjs +10 -1
- package/plugins/lisa/rules/reference/config-resolution.md +0 -4
- package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa/scripts/resolve-lifecycle-role.mjs +15 -3
- package/plugins/lisa/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/lisa/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/lisa/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/lisa/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/lisa/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/lisa/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/lisa/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/lisa/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/lisa/skills/lisa-tracker-sync/SKILL.md +2 -2
- package/plugins/lisa-agy/hooks/parity-safety-net.sh +19 -5
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/resolve-lifecycle-role.mjs +15 -3
- package/plugins/lisa-agy/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/lisa-agy/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/lisa-agy/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/lisa-agy/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/lisa-agy/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/lisa-agy/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/lisa-agy/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/lisa-agy/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/lisa-agy/skills/lisa-tracker-sync/SKILL.md +2 -2
- 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/block-no-verify.sh +43 -2
- package/plugins/lisa-copilot/hooks/parity-safety-net.sh +19 -5
- package/plugins/lisa-copilot/hooks/threshold-ratchet-families.mjs +10 -1
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +0 -4
- package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/lisa-copilot/scripts/resolve-lifecycle-role.mjs +15 -3
- package/plugins/lisa-copilot/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/lisa-copilot/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/lisa-copilot/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/lisa-copilot/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/lisa-copilot/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/lisa-copilot/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/lisa-copilot/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/lisa-copilot/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/lisa-copilot/skills/lisa-tracker-sync/SKILL.md +2 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-no-verify.sh +43 -2
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +19 -5
- package/plugins/lisa-cursor/hooks/threshold-ratchet-families.mjs +10 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +0 -4
- package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +1 -1
- package/plugins/lisa-cursor/scripts/resolve-lifecycle-role.mjs +15 -3
- package/plugins/lisa-cursor/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/lisa-cursor/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/lisa-cursor/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/lisa-cursor/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/lisa-cursor/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/lisa-cursor/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/lisa-cursor/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/lisa-cursor/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/lisa-cursor/skills/lisa-tracker-sync/SKILL.md +2 -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/block-no-verify.sh +43 -2
- package/plugins/src/base/hooks/parity-safety-net.sh +19 -5
- package/plugins/src/base/hooks/threshold-ratchet-families.mjs +10 -1
- package/plugins/src/base/rules/reference/config-resolution.md +0 -4
- package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +1 -1
- package/plugins/src/base/scripts/resolve-lifecycle-role.mjs +15 -3
- package/plugins/src/base/skills/lisa-github-build-intake/SKILL.md +7 -8
- package/plugins/src/base/skills/lisa-github-prd-intake/SKILL.md +10 -11
- package/plugins/src/base/skills/lisa-github-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-github-write-prd/SKILL.md +14 -12
- package/plugins/src/base/skills/lisa-jira-build-intake/SKILL.md +7 -8
- package/plugins/src/base/skills/lisa-jira-journey/scripts/parse-plan.py +54 -12
- package/plugins/src/base/skills/lisa-linear-build-intake/SKILL.md +9 -10
- package/plugins/src/base/skills/lisa-linear-evidence/SKILL.md +14 -4
- package/plugins/src/base/skills/lisa-linear-sync/SKILL.md +1 -1
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +2 -1
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +4 -3
- package/plugins/src/base/skills/lisa-tracker-sync/SKILL.md +2 -2
- package/rails/copy-overwrite/scripts/threshold-ratchet-families.mjs +10 -1
- package/typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs +10 -13
- package/typescript/copy-overwrite/scripts/check-skipped-required-checks.mjs +34 -3
- package/typescript/copy-overwrite/scripts/lisa-mutation.mjs +17 -1
- package/typescript/copy-overwrite/scripts/threshold-ratchet-families.mjs +10 -1
|
@@ -488,8 +488,10 @@ function classify(output, code) {
|
|
|
488
488
|
return {
|
|
489
489
|
kind: DIAGNOSIS.UNCAPTURED,
|
|
490
490
|
summary:
|
|
491
|
-
"no output was captured, so this failure has no diagnosis " +
|
|
492
|
-
"
|
|
491
|
+
"no output was captured, so this failure has no diagnosis. Capture " +
|
|
492
|
+
"is on by default; it is off when LISA_GATES_CAPTURE=0 is set, when " +
|
|
493
|
+
"the shell has no `tee`, or when a temporary directory could not be " +
|
|
494
|
+
"created. Restore capture capability before re-running",
|
|
493
495
|
evidence: [],
|
|
494
496
|
};
|
|
495
497
|
}
|
|
@@ -19,6 +19,16 @@ import { spawn, spawnSync } from "node:child_process";
|
|
|
19
19
|
import { invokedAsScript } from "./invoked-as-script.mjs";
|
|
20
20
|
|
|
21
21
|
const KILL_GRACE_MS = 750;
|
|
22
|
+
const REAP_POLL_MS = 25;
|
|
23
|
+
const WINDOWS_TIMEOUT_EXIT_CODE = 255;
|
|
24
|
+
const TERMINATING_SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
25
|
+
const DEFAULT_REAP_CONTROLS = Object.freeze({
|
|
26
|
+
kill: killTree,
|
|
27
|
+
exists: treeExists,
|
|
28
|
+
now: Date.now,
|
|
29
|
+
wait: milliseconds =>
|
|
30
|
+
new Promise(resolve => setTimeout(resolve, milliseconds)),
|
|
31
|
+
});
|
|
22
32
|
|
|
23
33
|
function parseArguments(argv) {
|
|
24
34
|
const timeoutArg = argv.find(value => value.startsWith("--timeout-ms="));
|
|
@@ -49,6 +59,36 @@ function killTree(pid, signal) {
|
|
|
49
59
|
}
|
|
50
60
|
}
|
|
51
61
|
|
|
62
|
+
function treeExists(pid) {
|
|
63
|
+
if (process.platform === "win32") return false;
|
|
64
|
+
try {
|
|
65
|
+
process.kill(-pid, 0);
|
|
66
|
+
return true;
|
|
67
|
+
} catch {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function waitForTreeExit(pid, deadline, controls) {
|
|
73
|
+
while (controls.exists(pid)) {
|
|
74
|
+
if (controls.now() >= deadline) return false;
|
|
75
|
+
await controls.wait(REAP_POLL_MS);
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export async function reapTree(pid, controls = DEFAULT_REAP_CONTROLS) {
|
|
81
|
+
controls.kill(pid, "SIGTERM");
|
|
82
|
+
if (await waitForTreeExit(pid, controls.now() + KILL_GRACE_MS, controls)) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
controls.kill(pid, "SIGKILL");
|
|
87
|
+
if (!(await waitForTreeExit(pid, controls.now() + KILL_GRACE_MS, controls))) {
|
|
88
|
+
throw new Error(`gate process tree ${pid} survived SIGKILL`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
52
92
|
export function supervise(command, timeoutMs) {
|
|
53
93
|
return new Promise((resolve, reject) => {
|
|
54
94
|
const shell =
|
|
@@ -72,42 +112,83 @@ export function supervise(command, timeoutMs) {
|
|
|
72
112
|
|
|
73
113
|
let timedOut = false;
|
|
74
114
|
let settled = false;
|
|
75
|
-
|
|
115
|
+
let terminating = false;
|
|
116
|
+
const signalHandlers = new Map();
|
|
117
|
+
const cleanup = () => {
|
|
118
|
+
clearTimeout(deadline);
|
|
119
|
+
for (const [signal, handler] of signalHandlers) {
|
|
120
|
+
process.off(signal, handler);
|
|
121
|
+
}
|
|
122
|
+
signalHandlers.clear();
|
|
123
|
+
};
|
|
124
|
+
const finish = async (code, signal) => {
|
|
76
125
|
if (settled) return;
|
|
77
126
|
settled = true;
|
|
78
|
-
|
|
127
|
+
cleanup();
|
|
79
128
|
// A command may leave a background descendant after its direct shell
|
|
80
|
-
// exits. Reap that residue before returning a verdict too.
|
|
81
|
-
|
|
82
|
-
|
|
129
|
+
// exits. Reap that residue fully before returning a verdict too.
|
|
130
|
+
try {
|
|
131
|
+
await reapTree(pid);
|
|
132
|
+
resolve({ code, signal });
|
|
133
|
+
} catch (error) {
|
|
134
|
+
reject(error);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const reportReapFailure = error => {
|
|
139
|
+
console.error(
|
|
140
|
+
`gate process-tree supervisor failed: ${error instanceof Error ? error.message : String(error)}`
|
|
141
|
+
);
|
|
142
|
+
process.exitCode = 1;
|
|
83
143
|
};
|
|
84
144
|
|
|
145
|
+
const relaySignal = signal => {
|
|
146
|
+
if (terminating) return;
|
|
147
|
+
terminating = true;
|
|
148
|
+
cleanup();
|
|
149
|
+
reapTree(pid).then(() => {
|
|
150
|
+
// Restore the signal-shaped exit after the detached tree is gone.
|
|
151
|
+
process.kill(process.pid, signal);
|
|
152
|
+
}, reportReapFailure);
|
|
153
|
+
};
|
|
154
|
+
for (const signal of TERMINATING_SIGNALS) {
|
|
155
|
+
const handler = () => relaySignal(signal);
|
|
156
|
+
signalHandlers.set(signal, handler);
|
|
157
|
+
process.once(signal, handler);
|
|
158
|
+
}
|
|
159
|
+
|
|
85
160
|
const deadline = setTimeout(() => {
|
|
86
161
|
timedOut = true;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
killTree(pid, "SIGKILL");
|
|
162
|
+
cleanup();
|
|
163
|
+
reapTree(pid).then(() => {
|
|
90
164
|
// A signal-shaped result is the existing gate runner vocabulary for
|
|
91
165
|
// "no verdict". It also prevents an ordinary exit code such as 124
|
|
92
166
|
// from being confused with a user command that returned that code.
|
|
93
167
|
if (process.platform === "win32") {
|
|
94
|
-
process.
|
|
168
|
+
// Windows has no signal-shaped process result. 255 is a dedicated
|
|
169
|
+
// supervisor timeout code with a documented (but unavoidable)
|
|
170
|
+
// collision risk, well outside ordinary command exit conventions.
|
|
171
|
+
process.exit(WINDOWS_TIMEOUT_EXIT_CODE);
|
|
95
172
|
} else {
|
|
96
173
|
process.kill(process.pid, "SIGKILL");
|
|
97
174
|
}
|
|
98
|
-
},
|
|
175
|
+
}, reportReapFailure);
|
|
99
176
|
}, timeoutMs);
|
|
100
177
|
|
|
101
178
|
child.once("error", error => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
179
|
+
if (settled) return;
|
|
180
|
+
settled = true;
|
|
181
|
+
cleanup();
|
|
182
|
+
reapTree(pid).then(
|
|
183
|
+
() => reject(error),
|
|
184
|
+
reapError => reject(reapError)
|
|
185
|
+
);
|
|
105
186
|
});
|
|
106
187
|
child.once("close", (code, signal) => {
|
|
107
188
|
// On timeout, wait for the forced group reap above before this supervisor
|
|
108
189
|
// ends. Exiting on the direct shell's close is the race that used to leave
|
|
109
190
|
// its descendants alive.
|
|
110
|
-
if (!timedOut) finish(code, signal);
|
|
191
|
+
if (!timedOut) void finish(code, signal);
|
|
111
192
|
});
|
|
112
193
|
});
|
|
113
194
|
}
|
|
@@ -395,8 +395,17 @@ function readPackageScripts(cwd) {
|
|
|
395
395
|
export function runCli(argv = process.argv.slice(2), cwd = process.cwd()) {
|
|
396
396
|
const env = readFlag(argv, "env");
|
|
397
397
|
const verbsFlag = readFlag(argv, "verbs");
|
|
398
|
+
if (verbsFlag === null && argv.includes("--verbs")) {
|
|
399
|
+
console.error(
|
|
400
|
+
"❌ environment preparation refused: environment_verb_unknown"
|
|
401
|
+
);
|
|
402
|
+
console.error(
|
|
403
|
+
" --verbs takes its value with an equals sign, as --verbs=reset,reseed."
|
|
404
|
+
);
|
|
405
|
+
return 1;
|
|
406
|
+
}
|
|
398
407
|
const verbs =
|
|
399
|
-
verbsFlag === null
|
|
408
|
+
verbsFlag === null
|
|
400
409
|
? FACADE_VERBS
|
|
401
410
|
: (verbsFlag ?? "")
|
|
402
411
|
.split(",")
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
# Add a name here in the same commit that closes a vector. A hardening that
|
|
27
27
|
# forgets to is invisible to refresh, and shows up as an unexplained diff at
|
|
28
28
|
# review time instead of a named capability.
|
|
29
|
-
# lisa-guard-capabilities: no-verify-abbrev, husky-env, hookspath-allowlist, config-env, git-config-key, git-config-parameters, git-config-parameters-append, git-config-parameters-expansion, heredoc-shell-word, herestring-aware, no-verify-short
|
|
29
|
+
# lisa-guard-capabilities: no-verify-abbrev, husky-env, hookspath-allowlist, config-env, git-config-key, git-config-parameters, git-config-parameters-append, git-config-parameters-expansion, heredoc-shell-word, herestring-aware, no-verify-short, nested-shell-no-verify
|
|
30
30
|
#
|
|
31
31
|
# Shell-token matching avoids false positives from issue bodies, heredocs, and
|
|
32
32
|
# commit-message prose while still catching quoted real argv values such as
|
|
@@ -219,6 +219,9 @@ COMMAND_SEPARATORS = {
|
|
|
219
219
|
";", "|", "||", "&", "&&", "(", ")", "<", ">", ">>", "<<", "&|",
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
+
SHELL_PROGRAMS = {"bash", "dash", "ksh", "sh", "zsh"}
|
|
223
|
+
MAX_SHELL_NESTING = 8
|
|
224
|
+
|
|
222
225
|
# git's own options that take a SEPARATE value token, which therefore must be
|
|
223
226
|
# skipped when looking for the subcommand: `git -c core.hooksPath=x commit` and
|
|
224
227
|
# `git -C /repo commit` both reach `commit`.
|
|
@@ -336,6 +339,8 @@ def commit_bypasses_verification(argv):
|
|
|
336
339
|
if token.startswith("--"):
|
|
337
340
|
if token in COMMIT_LONG_SEPARATE_VALUE:
|
|
338
341
|
index += 1
|
|
342
|
+
elif disables_verification(token):
|
|
343
|
+
return True
|
|
339
344
|
continue
|
|
340
345
|
# A bare `-` is git's stdin placeholder, not an option cluster.
|
|
341
346
|
if not token.startswith("-") or token == "-":
|
|
@@ -369,11 +374,25 @@ def subcommand_after_git(tokens, start):
|
|
|
369
374
|
return None
|
|
370
375
|
|
|
371
376
|
|
|
372
|
-
def
|
|
377
|
+
def shell_starts_command(tokens, index):
|
|
378
|
+
"""Whether a recognized shell token occupies command position."""
|
|
379
|
+
start = index - 1
|
|
380
|
+
while start >= 0 and tokens[start] not in COMMAND_SEPARATORS:
|
|
381
|
+
start -= 1
|
|
382
|
+
prefix = tokens[start + 1:index]
|
|
383
|
+
if not prefix:
|
|
384
|
+
return True
|
|
385
|
+
if prefix[0] == "env":
|
|
386
|
+
prefix = prefix[1:]
|
|
387
|
+
return all("=" in token and not token.startswith("=") for token in prefix)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def git_commit_skips_verification(text, depth=0):
|
|
373
391
|
"""Whether the command runs `git commit` with the short `-n` bypass.
|
|
374
392
|
|
|
375
393
|
Args:
|
|
376
394
|
text: The command line, heredoc payloads already stripped.
|
|
395
|
+
depth: Number of recognized shell payloads already traversed.
|
|
377
396
|
|
|
378
397
|
Returns:
|
|
379
398
|
True if any `git commit` invocation on the line skips verification.
|
|
@@ -390,6 +409,28 @@ def git_commit_skips_verification(text):
|
|
|
390
409
|
found = subcommand_after_git(scoped_tokens, index + 1)
|
|
391
410
|
if found and found[0] == "commit" and commit_bypasses_verification(found[1]):
|
|
392
411
|
return True
|
|
412
|
+
if depth >= MAX_SHELL_NESTING:
|
|
413
|
+
return False
|
|
414
|
+
for index, token in enumerate(scoped_tokens):
|
|
415
|
+
program = token.rsplit("/", 1)[-1]
|
|
416
|
+
if program not in SHELL_PROGRAMS or not shell_starts_command(
|
|
417
|
+
scoped_tokens, index
|
|
418
|
+
):
|
|
419
|
+
continue
|
|
420
|
+
cursor = index + 1
|
|
421
|
+
while cursor < len(scoped_tokens):
|
|
422
|
+
option = scoped_tokens[cursor]
|
|
423
|
+
if option in COMMAND_SEPARATORS or not option.startswith("-"):
|
|
424
|
+
break
|
|
425
|
+
cursor += 1
|
|
426
|
+
if "c" not in option[1:]:
|
|
427
|
+
continue
|
|
428
|
+
if cursor >= len(scoped_tokens):
|
|
429
|
+
break
|
|
430
|
+
payload = scoped_tokens[cursor]
|
|
431
|
+
if git_commit_skips_verification(payload, depth + 1):
|
|
432
|
+
return True
|
|
433
|
+
break
|
|
393
434
|
return False
|
|
394
435
|
|
|
395
436
|
|
|
@@ -727,6 +727,10 @@ classify_rm_target() {
|
|
|
727
727
|
set +f
|
|
728
728
|
block "recursive forced delete of the current directory (rm -rf .)"
|
|
729
729
|
;;
|
|
730
|
+
.git | .git/* | */.git | */.git/*)
|
|
731
|
+
set +f
|
|
732
|
+
block "recursive forced delete of the git control plane (.git holds every commit, branch and stash not already pushed; nothing in the working tree can rebuild it)"
|
|
733
|
+
;;
|
|
730
734
|
.. | ../* | */.. | */../*)
|
|
731
735
|
set +f
|
|
732
736
|
block "recursive forced delete of a path outside the project (.. traversal)"
|
|
@@ -1034,11 +1038,16 @@ fi
|
|
|
1034
1038
|
# purpose, and blocking those would be the collision that gets a guard switched
|
|
1035
1039
|
# off. The trailing `([/[:space:]'"$qc"']|$)` is what draws that line.
|
|
1036
1040
|
readonly GIT_CONTROL_PLANE='(^|[[:space:]='"$qc"'./])\.git([/[:space:]'"$qc"']|$)'
|
|
1037
|
-
|
|
1038
|
-
|
|
1041
|
+
while IFS= read -r git_stmt; do
|
|
1042
|
+
[ -n "$git_stmt" ] || continue
|
|
1043
|
+
if ! scan -E "$git_stmt" "$RM_RF_CLUSTER" \
|
|
1044
|
+
&& ! scan -E "$git_stmt" "$RM_RF_SPLIT"; then
|
|
1045
|
+
continue
|
|
1046
|
+
fi
|
|
1047
|
+
if scan -E "$git_stmt" "$GIT_CONTROL_PLANE"; then
|
|
1039
1048
|
block "recursive forced delete of the git control plane (.git holds every commit, branch and stash not already pushed; nothing in the working tree can rebuild it). Delete a specific ignored artifact instead, or re-clone if the checkout is genuinely to be discarded."
|
|
1040
1049
|
fi
|
|
1041
|
-
|
|
1050
|
+
done <<< "$(printf '%s' "$normalized_command_str" | tr '&|;' '\n')"
|
|
1042
1051
|
|
|
1043
1052
|
# 15. Credential stores. Reading one into an agent transcript is disclosure even
|
|
1044
1053
|
# when nothing is copied anywhere: the value lands in a log, a context window,
|
|
@@ -1080,14 +1089,19 @@ has_private_dotenv_path() {
|
|
|
1080
1089
|
| grep -Eio -- '(^|[[:space:]='"$qc"'./])\.env(\.[[:alnum:]_-]+)?')" \
|
|
1081
1090
|
|| dotenv_scan_status=$?
|
|
1082
1091
|
if [ "$dotenv_scan_status" -gt 1 ]; then
|
|
1083
|
-
|
|
1092
|
+
scan_failed "$dotenv_scan_status"
|
|
1084
1093
|
fi
|
|
1085
1094
|
|
|
1086
1095
|
while IFS= read -r candidate; do
|
|
1087
1096
|
[ -n "$candidate" ] || continue
|
|
1097
|
+
dotenv_normalize_status=0
|
|
1088
1098
|
candidate="$(printf '%s' "$candidate" \
|
|
1089
1099
|
| tr '[:upper:]' '[:lower:]' \
|
|
1090
|
-
| grep -Eo -- '\.env(\.[[:alnum:]_-]+)?')"
|
|
1100
|
+
| grep -Eo -- '\.env(\.[[:alnum:]_-]+)?')" \
|
|
1101
|
+
|| dotenv_normalize_status=$?
|
|
1102
|
+
if [ "$dotenv_normalize_status" -gt 1 ] || [ -z "$candidate" ]; then
|
|
1103
|
+
scan_failed "$dotenv_normalize_status"
|
|
1104
|
+
fi
|
|
1091
1105
|
case "$candidate" in
|
|
1092
1106
|
.env.example | .env.sample | .env.template | .env.dist | .env.schema | .env.defaults) ;;
|
|
1093
1107
|
*) return 0 ;;
|
|
@@ -681,10 +681,12 @@ export function reconcileContexts({
|
|
|
681
681
|
homes = {},
|
|
682
682
|
pins = {},
|
|
683
683
|
records,
|
|
684
|
+
awaited = [],
|
|
684
685
|
}) {
|
|
685
686
|
const liveContexts = live ?? [];
|
|
686
687
|
const declaredNames = new Set(declared ?? []);
|
|
687
688
|
const byName = (a, b) => a.localeCompare(b);
|
|
689
|
+
const awaitedContexts = new Set(awaited);
|
|
688
690
|
|
|
689
691
|
// The unit of declaration is a (ruleset, context) PAIR, not a name. A name
|
|
690
692
|
// set cannot hold `build` required by both `base` and `release`, so a live
|
|
@@ -723,6 +725,14 @@ export function reconcileContexts({
|
|
|
723
725
|
// and repair converge. A gate-derived record names no ruleset and remains
|
|
724
726
|
// name-only: it never declared which app may satisfy it.
|
|
725
727
|
if (record.ruleset !== undefined) {
|
|
728
|
+
if (
|
|
729
|
+
record.integration_id === undefined &&
|
|
730
|
+
awaitedContexts.has(record.context)
|
|
731
|
+
) {
|
|
732
|
+
return (
|
|
733
|
+
entry.integration_id === null || entry.integration_id === undefined
|
|
734
|
+
);
|
|
735
|
+
}
|
|
726
736
|
const expected = record.integration_id ?? ACTIONS_INTEGRATION_ID;
|
|
727
737
|
return entry.integration_id === expected;
|
|
728
738
|
}
|
|
@@ -1412,6 +1422,7 @@ export function reconcile({
|
|
|
1412
1422
|
ghMissing = false,
|
|
1413
1423
|
}) {
|
|
1414
1424
|
const configured = declaredChecks(requiredChecks);
|
|
1425
|
+
const awaited = awaitedContexts(gates, moment);
|
|
1415
1426
|
const declared = [
|
|
1416
1427
|
...new Set([
|
|
1417
1428
|
...contextsFor(gates, { moment, workflowName, previousLabels }),
|
|
@@ -1466,6 +1477,7 @@ export function reconcile({
|
|
|
1466
1477
|
homes: configured.homes,
|
|
1467
1478
|
pins: configured.pins,
|
|
1468
1479
|
records: configured.records,
|
|
1480
|
+
awaited,
|
|
1469
1481
|
});
|
|
1470
1482
|
const resolvedAwaitedHome = awaitedHome(live, rulesetName);
|
|
1471
1483
|
const settings = reconcileSettings({ policy, live });
|
|
@@ -1487,7 +1499,7 @@ export function reconcile({
|
|
|
1487
1499
|
live,
|
|
1488
1500
|
prune,
|
|
1489
1501
|
rulesetName,
|
|
1490
|
-
awaited
|
|
1502
|
+
awaited,
|
|
1491
1503
|
pins: { ...configured.pins, ...awaitedPins(gates, moment) },
|
|
1492
1504
|
// An awaited context has no ruleset in its declaration — it is declared
|
|
1493
1505
|
// on a GATE. Its home defaults to the ruleset Lisa generates from
|
|
@@ -212,7 +212,7 @@ function assertSupportedKeywords(schema, instancePath) {
|
|
|
212
212
|
* @throws {Error} When a validating keyword sits beside a `$ref`
|
|
213
213
|
*/
|
|
214
214
|
function assertNoRefSiblings(schema, where) {
|
|
215
|
-
if (!("$ref"
|
|
215
|
+
if (!Object.hasOwn(schema, "$ref")) {
|
|
216
216
|
return;
|
|
217
217
|
}
|
|
218
218
|
const siblings = Object.keys(schema).filter(
|
|
@@ -370,7 +370,7 @@ function checkObjectKeywords(value, schema, root, instancePath, errors) {
|
|
|
370
370
|
function validateNode(value, schema, root, instancePath, errors) {
|
|
371
371
|
assertSupportedKeywords(schema, instancePath);
|
|
372
372
|
|
|
373
|
-
if (typeof schema.$ref === "string") {
|
|
373
|
+
if (Object.hasOwn(schema, "$ref") && typeof schema.$ref === "string") {
|
|
374
374
|
validateNode(
|
|
375
375
|
value,
|
|
376
376
|
resolveRef(schema.$ref, root),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"lisa-owned-hash-ledger.d.ts","sourceRoot":"","sources":["../../src/core/lisa-owned-hash-ledger.ts"],"names":[],"mappings":"AACA,6EAA6E;AAE7E;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA6uBjC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAgpBjC,CAAC"}
|
|
@@ -150,6 +150,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
150
150
|
"scripts/check-nightly-e2e-health.mjs": Object.freeze([
|
|
151
151
|
"03f57b46c1611806737203980ed0991f478177f883739cc8c3df2c8f219566af",
|
|
152
152
|
"0cf6e997c623adacd198fe650b3900dce06558ebfd2637e6f6df562eee7e10f8",
|
|
153
|
+
"11608828a0ca51d4505e37742f8120102e68e081a92e054b631876b8d3a6d0bc",
|
|
153
154
|
"191608d272178a8fd3126d5b3e4923fadb50e01b699d0376625248d541b14f50",
|
|
154
155
|
"1c79ec49e5f4a3bba700bc1d97e9fc0f4f1799dec3acdf2bed5e3e5b866a0efd",
|
|
155
156
|
"1e5d6787f99af1190b465903956a90270320eeca022c3a3ab6716e1a8b3ec57f",
|
|
@@ -219,6 +220,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
219
220
|
"c04a78cb52beaa2e852846e03f42172a4e4a180222dcd54f4c305911249b68b1",
|
|
220
221
|
"d386d621db2538ab7c5dfaa73f927c9ea87692d1a9e0ac02330a960c64af206e",
|
|
221
222
|
"d649aaf3abf584272bb886b1a722afe16ea861186214284ac61f96b3386e63d7",
|
|
223
|
+
"da2e191a8fbfa4042b3bfff331bc2ee19077acb972b5cfc9cf35eba383115959",
|
|
222
224
|
"dac550c4fd908149fb579625268b16d03657b626417633d8f743875d355ab173",
|
|
223
225
|
"dc609502f848965baeee2576b4622cde502adc15f82ac282c0f30acf06342b77",
|
|
224
226
|
"df59cbee6aaa71a3ccddfcba5d9d08b29610f98fa048519ec4fc35382d698183",
|
|
@@ -274,6 +276,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
274
276
|
"503b51e9239411d07ce6b51dbe2b3079bb12e94bf7c0310e76247af19ff667e6",
|
|
275
277
|
"6742cc12ea14fc99b7bef31ff03df68d5c4610b56fad43107790372e6d777eb1",
|
|
276
278
|
"6b72a6a71078c838fdb0531e74898a5e36d942cad424b20480e2cd370b5264eb",
|
|
279
|
+
"a36a7bd7845878e5f1f991e896739ba4cc468e50f562b71a251ebe193ca151b6",
|
|
277
280
|
"b4a0b1a0df6e944313b4a197925a0003fb9aed517fbd5708deda2a2a67f53faf",
|
|
278
281
|
"d234617dc907bb563455419957f2f419702fcd1c10b9d39e19d5bab8ca962008",
|
|
279
282
|
"e07bab7dc4c4c296e2007cf26fab694b1238545dc37816e88d849606d8f9e760",
|
|
@@ -289,6 +292,10 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
289
292
|
"82191900c818a88208669a39563cfed8de1512de699a9ccf7155743e5eff859e",
|
|
290
293
|
]),
|
|
291
294
|
"scripts/lib/process-tree-runner.mjs": Object.freeze([
|
|
295
|
+
"07c78da8a8e40e28cc59a40c3d19e798ae291fae0a0d4cd13a2e5c047d8e5ac7",
|
|
296
|
+
"2444f81b8a05af19f2bdc61d75cc6baa40a19c79f60dc815cafc6746dffda714",
|
|
297
|
+
"757c74e96c16a9a51c8b099c5e5caa7a2086a9fbdc41cc41348619d993d36a5c",
|
|
298
|
+
"eb73088635fddf236fca92d1c94324a889c503843155d436835b96d3ed6fa1f1",
|
|
292
299
|
"fb68902c68b4cd156f26d2f743364f611a54b833bc445b5144b4c844f553f188",
|
|
293
300
|
]),
|
|
294
301
|
"scripts/lisa-clean-git-env.sh": Object.freeze([
|
|
@@ -333,6 +340,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
333
340
|
"63879152ebb67f289e900167daf035f2d03d7773c6e110ed5ab708c95417c55c",
|
|
334
341
|
"9f42451a38eabd69e453fbaabd34de2490dfbc8ab79b1d7a2f27f574d3314090",
|
|
335
342
|
"c765c7a44ea81d54c7820f2068c8811fb73ca3e5f063cb55a8c30391d1326323",
|
|
343
|
+
"f82f3af91663988d003d30542f96189ad65210e0aa4dcc1b42e6c7c8752d5618",
|
|
336
344
|
"f8c8e276fa6d68ed661f07882f20ee095d18a5e8a90136f78f1ed2b032ce33d4",
|
|
337
345
|
"f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
|
|
338
346
|
]),
|
|
@@ -345,6 +353,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
345
353
|
"41060648b4394d417528f4f560a52f296b4df5b6ec8a5633e08afe4588b6a088",
|
|
346
354
|
"557065f223dfc0715a20c3de76bafee0aefe22f52385c52e17cfc7b9398cce2d",
|
|
347
355
|
"8870dba7b299ddb528e01fee32ec01cd8994a72118708ea8d3255be3daedfa72",
|
|
356
|
+
"8da563431ebfeb01ff6681fe47317bad1524863289460cc6ccdc7c8e07014aa7",
|
|
348
357
|
"9cba6e0103c27850703323da25ac149c0136225172f1a1640abe3b3ac4e50a8e",
|
|
349
358
|
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
350
359
|
"ed0ded7369071c8fbb93cfa4e216177279d75d769cc78f24cce6239997e95659",
|
|
@@ -512,6 +521,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
512
521
|
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
513
522
|
"3b93a0affab6413e3c14a6f43de5acb586286ed1819ece0a66b30429b4d00490",
|
|
514
523
|
"3ff7255f395a9552366faaac34d383f4c95fecfb39882cd1d57854356422fe61",
|
|
524
|
+
"6fbfd93da39c9a1077f0e9e265fc2b2f82873ba82abdca0cd757cffd272fe9ac",
|
|
515
525
|
"759dfd7552c1a4a8bf7172ffd88671a37571155877ea2459d26f6a79c6ab57ee",
|
|
516
526
|
"7790a560850c9d38709dbaccdaa10733e632c1bd4d975cbec7e3cc5a8650b36a",
|
|
517
527
|
"83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
|
|
@@ -548,6 +558,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
548
558
|
"9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
|
|
549
559
|
"a211f1a06aecddb841851463da302f694ab0eafff6bab75ee944b0a58aac431d",
|
|
550
560
|
"a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
|
|
561
|
+
"b5505f55a5092f1d451ae5a01ada85a031e5b063d08fc0ce5527d94b67191a60",
|
|
551
562
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
552
563
|
"baf3c78b7c333735142cc1a7bc19369f953a4699f7be517bb4e3c12167d5c60b",
|
|
553
564
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
@@ -583,6 +594,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
583
594
|
"587ab62a419ca6f104f5b82a3bd89c11f04600faec1824876ba536699ad59f7e",
|
|
584
595
|
"600e0643ff88168c5bccea564cca9fcfea0005ca79bfc2206403ffcca8a4a193",
|
|
585
596
|
"660d0b833ac5ffcb93cb3c478b6b840492a0ae049ff3b6f87275f78537ef7258",
|
|
597
|
+
"6c95bb777c84908023c02d8b98ed87e4a09567e9f62cf63275673d696b7bb874",
|
|
586
598
|
"6e41817a015d5360336ca4e078fa1c787d9976b762e8d9a07d62c41a2fb52f25",
|
|
587
599
|
"7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
|
|
588
600
|
"7ea75f5ff66b71ec551b7116ef855ac1d1c48a3ce3d7b51b3aea893a017dcd0c",
|
|
@@ -611,6 +623,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
611
623
|
"3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
|
|
612
624
|
"3e67eb4b0710ec195ad7efa4a8c2fd64063897d67725ea2627cf869c7e066201",
|
|
613
625
|
"4b383ff960d7da53e0dd46e37632ef55c5a38b004fb4aabfe91a25a9fe02d88f",
|
|
626
|
+
"5408b14528557c2301b69a4d93a64d7930d3b66dc416702c9f33a72759a66c5c",
|
|
614
627
|
"5c6b8a6ff3010b11f78b70eda0e73e78e1155b634a781b8abec79e40ac286eb7",
|
|
615
628
|
"6261f7630e71bd95792083f5459a2802382cae95101c724a7311e3810af6c576",
|
|
616
629
|
"9b613888c4c1cc6cc2b1fb6e162a4c766012eab0ec4f8b7f2ac1bc3da6622c97",
|
|
@@ -663,6 +676,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
663
676
|
"8a1684f5c2b4d37fc782d2090273772814f7ad6c61e7ae5459163a1f28b7a5dc",
|
|
664
677
|
"9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
665
678
|
"bd72dc7d240509eeb4a8f10e8ff64976d8223c1a270a482ac12a0daeae68a5c7",
|
|
679
|
+
"f70ecd3712dd2ca77a8851c7505ce79f948a57e5a2e28f56c5d0ccd047712688",
|
|
666
680
|
]),
|
|
667
681
|
"scripts/lisa-test-node.mjs": Object.freeze([
|
|
668
682
|
"31b338144af00e20e3de02202982846d7333433a9bbda76a8c77d50e6fdbc47b",
|
|
@@ -736,6 +750,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
736
750
|
"39cb2fb53f1cc939675e7f8d5530a760abac420c2259fc97108d21f15c0275e9",
|
|
737
751
|
"47d44b2bca383ae395b4e415e06c97a127327ab13762ee95b8c43d0198639bbb",
|
|
738
752
|
"8fa58cc7276add0b2edf1de92bdcc32d81d840811ef0614ddc724010b59a888c",
|
|
753
|
+
"9281e995587ad2c73e15c4381ec4ecfa40fd789f171c0698cdcf8dea32539e62",
|
|
739
754
|
"93190f926689725418c1ec9eae15c55910b128cff6e3cb10185e466c7b90cc4f",
|
|
740
755
|
"db14245ed89b483912af287bdee917a7a921dc21bb29b49be37fc799c05c413f",
|
|
741
756
|
"f50e35d11295a836bd5b6d818aed6daea68ff70bdffbbdf9f67b09984a2628da",
|
|
@@ -894,6 +909,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
894
909
|
"scripts/check-nightly-e2e-health.mjs": Object.freeze([
|
|
895
910
|
"03f57b46c1611806737203980ed0991f478177f883739cc8c3df2c8f219566af",
|
|
896
911
|
"0cf6e997c623adacd198fe650b3900dce06558ebfd2637e6f6df562eee7e10f8",
|
|
912
|
+
"11608828a0ca51d4505e37742f8120102e68e081a92e054b631876b8d3a6d0bc",
|
|
897
913
|
"191608d272178a8fd3126d5b3e4923fadb50e01b699d0376625248d541b14f50",
|
|
898
914
|
"1c79ec49e5f4a3bba700bc1d97e9fc0f4f1799dec3acdf2bed5e3e5b866a0efd",
|
|
899
915
|
"1e5d6787f99af1190b465903956a90270320eeca022c3a3ab6716e1a8b3ec57f",
|
|
@@ -950,6 +966,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
950
966
|
"c04a78cb52beaa2e852846e03f42172a4e4a180222dcd54f4c305911249b68b1",
|
|
951
967
|
"d386d621db2538ab7c5dfaa73f927c9ea87692d1a9e0ac02330a960c64af206e",
|
|
952
968
|
"d649aaf3abf584272bb886b1a722afe16ea861186214284ac61f96b3386e63d7",
|
|
969
|
+
"da2e191a8fbfa4042b3bfff331bc2ee19077acb972b5cfc9cf35eba383115959",
|
|
953
970
|
"dac550c4fd908149fb579625268b16d03657b626417633d8f743875d355ab173",
|
|
954
971
|
"dc609502f848965baeee2576b4622cde502adc15f82ac282c0f30acf06342b77",
|
|
955
972
|
"df59cbee6aaa71a3ccddfcba5d9d08b29610f98fa048519ec4fc35382d698183",
|
|
@@ -1002,6 +1019,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1002
1019
|
"4503ddbe7bd54cd553db2b5952972d5319d6b6eb39a258b7c58577b61c7e7ce7",
|
|
1003
1020
|
"503b51e9239411d07ce6b51dbe2b3079bb12e94bf7c0310e76247af19ff667e6",
|
|
1004
1021
|
"6742cc12ea14fc99b7bef31ff03df68d5c4610b56fad43107790372e6d777eb1",
|
|
1022
|
+
"a36a7bd7845878e5f1f991e896739ba4cc468e50f562b71a251ebe193ca151b6",
|
|
1005
1023
|
"b4a0b1a0df6e944313b4a197925a0003fb9aed517fbd5708deda2a2a67f53faf",
|
|
1006
1024
|
"d234617dc907bb563455419957f2f419702fcd1c10b9d39e19d5bab8ca962008",
|
|
1007
1025
|
"e07bab7dc4c4c296e2007cf26fab694b1238545dc37816e88d849606d8f9e760",
|
|
@@ -1017,6 +1035,10 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1017
1035
|
"82191900c818a88208669a39563cfed8de1512de699a9ccf7155743e5eff859e",
|
|
1018
1036
|
]),
|
|
1019
1037
|
"scripts/lib/process-tree-runner.mjs": Object.freeze([
|
|
1038
|
+
"07c78da8a8e40e28cc59a40c3d19e798ae291fae0a0d4cd13a2e5c047d8e5ac7",
|
|
1039
|
+
"2444f81b8a05af19f2bdc61d75cc6baa40a19c79f60dc815cafc6746dffda714",
|
|
1040
|
+
"757c74e96c16a9a51c8b099c5e5caa7a2086a9fbdc41cc41348619d993d36a5c",
|
|
1041
|
+
"eb73088635fddf236fca92d1c94324a889c503843155d436835b96d3ed6fa1f1",
|
|
1020
1042
|
"fb68902c68b4cd156f26d2f743364f611a54b833bc445b5144b4c844f553f188",
|
|
1021
1043
|
]),
|
|
1022
1044
|
"scripts/lisa-clean-git-env.sh": Object.freeze([
|
|
@@ -1060,6 +1082,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1060
1082
|
"63879152ebb67f289e900167daf035f2d03d7773c6e110ed5ab708c95417c55c",
|
|
1061
1083
|
"9f42451a38eabd69e453fbaabd34de2490dfbc8ab79b1d7a2f27f574d3314090",
|
|
1062
1084
|
"c765c7a44ea81d54c7820f2068c8811fb73ca3e5f063cb55a8c30391d1326323",
|
|
1085
|
+
"f82f3af91663988d003d30542f96189ad65210e0aa4dcc1b42e6c7c8752d5618",
|
|
1063
1086
|
"f8c8e276fa6d68ed661f07882f20ee095d18a5e8a90136f78f1ed2b032ce33d4",
|
|
1064
1087
|
"f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
|
|
1065
1088
|
]),
|
|
@@ -1071,6 +1094,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1071
1094
|
"41060648b4394d417528f4f560a52f296b4df5b6ec8a5633e08afe4588b6a088",
|
|
1072
1095
|
"557065f223dfc0715a20c3de76bafee0aefe22f52385c52e17cfc7b9398cce2d",
|
|
1073
1096
|
"8870dba7b299ddb528e01fee32ec01cd8994a72118708ea8d3255be3daedfa72",
|
|
1097
|
+
"8da563431ebfeb01ff6681fe47317bad1524863289460cc6ccdc7c8e07014aa7",
|
|
1074
1098
|
"9cba6e0103c27850703323da25ac149c0136225172f1a1640abe3b3ac4e50a8e",
|
|
1075
1099
|
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
1076
1100
|
"ed0ded7369071c8fbb93cfa4e216177279d75d769cc78f24cce6239997e95659",
|
|
@@ -1195,6 +1219,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1195
1219
|
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
1196
1220
|
"3b93a0affab6413e3c14a6f43de5acb586286ed1819ece0a66b30429b4d00490",
|
|
1197
1221
|
"3ff7255f395a9552366faaac34d383f4c95fecfb39882cd1d57854356422fe61",
|
|
1222
|
+
"6fbfd93da39c9a1077f0e9e265fc2b2f82873ba82abdca0cd757cffd272fe9ac",
|
|
1198
1223
|
"759dfd7552c1a4a8bf7172ffd88671a37571155877ea2459d26f6a79c6ab57ee",
|
|
1199
1224
|
"7790a560850c9d38709dbaccdaa10733e632c1bd4d975cbec7e3cc5a8650b36a",
|
|
1200
1225
|
"83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
|
|
@@ -1230,6 +1255,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1230
1255
|
"9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
|
|
1231
1256
|
"a211f1a06aecddb841851463da302f694ab0eafff6bab75ee944b0a58aac431d",
|
|
1232
1257
|
"a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
|
|
1258
|
+
"b5505f55a5092f1d451ae5a01ada85a031e5b063d08fc0ce5527d94b67191a60",
|
|
1233
1259
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
1234
1260
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
1235
1261
|
"c57b70eed03b74e7c8335c40b0c2b1102e217e507337b71fcf3d2bec5a450bf8",
|
|
@@ -1258,6 +1284,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1258
1284
|
"4ba3e8b081a4eb115d2da9e73b8a763a38ab8feb2646def7412dfd00ed18b4b0",
|
|
1259
1285
|
"587ab62a419ca6f104f5b82a3bd89c11f04600faec1824876ba536699ad59f7e",
|
|
1260
1286
|
"660d0b833ac5ffcb93cb3c478b6b840492a0ae049ff3b6f87275f78537ef7258",
|
|
1287
|
+
"6c95bb777c84908023c02d8b98ed87e4a09567e9f62cf63275673d696b7bb874",
|
|
1261
1288
|
"6e41817a015d5360336ca4e078fa1c787d9976b762e8d9a07d62c41a2fb52f25",
|
|
1262
1289
|
"7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
|
|
1263
1290
|
"86fd0c6f6b8106a10af937bfbce94927603ffa8adcb188e350a659c96e3fc502",
|
|
@@ -1280,6 +1307,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1280
1307
|
"395897d1dc3f0ac92d7c892eaa9b9ddf12078181bb9f5b228965478190b09a91",
|
|
1281
1308
|
"3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
|
|
1282
1309
|
"3e67eb4b0710ec195ad7efa4a8c2fd64063897d67725ea2627cf869c7e066201",
|
|
1310
|
+
"5408b14528557c2301b69a4d93a64d7930d3b66dc416702c9f33a72759a66c5c",
|
|
1283
1311
|
"5c6b8a6ff3010b11f78b70eda0e73e78e1155b634a781b8abec79e40ac286eb7",
|
|
1284
1312
|
"6261f7630e71bd95792083f5459a2802382cae95101c724a7311e3810af6c576",
|
|
1285
1313
|
"9b613888c4c1cc6cc2b1fb6e162a4c766012eab0ec4f8b7f2ac1bc3da6622c97",
|
|
@@ -1324,6 +1352,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1324
1352
|
"8a1684f5c2b4d37fc782d2090273772814f7ad6c61e7ae5459163a1f28b7a5dc",
|
|
1325
1353
|
"9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
1326
1354
|
"bd72dc7d240509eeb4a8f10e8ff64976d8223c1a270a482ac12a0daeae68a5c7",
|
|
1355
|
+
"f70ecd3712dd2ca77a8851c7505ce79f948a57e5a2e28f56c5d0ccd047712688",
|
|
1327
1356
|
]),
|
|
1328
1357
|
"scripts/lisa-test-node.mjs": Object.freeze([
|
|
1329
1358
|
"31b338144af00e20e3de02202982846d7333433a9bbda76a8c77d50e6fdbc47b",
|
|
@@ -1393,6 +1422,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1393
1422
|
"39cb2fb53f1cc939675e7f8d5530a760abac420c2259fc97108d21f15c0275e9",
|
|
1394
1423
|
"47d44b2bca383ae395b4e415e06c97a127327ab13762ee95b8c43d0198639bbb",
|
|
1395
1424
|
"8fa58cc7276add0b2edf1de92bdcc32d81d840811ef0614ddc724010b59a888c",
|
|
1425
|
+
"9281e995587ad2c73e15c4381ec4ecfa40fd789f171c0698cdcf8dea32539e62",
|
|
1396
1426
|
"93190f926689725418c1ec9eae15c55910b128cff6e3cb10185e466c7b90cc4f",
|
|
1397
1427
|
"db14245ed89b483912af287bdee917a7a921dc21bb29b49be37fc799c05c413f",
|
|
1398
1428
|
"f50e35d11295a836bd5b6d818aed6daea68ff70bdffbbdf9f67b09984a2628da",
|