@codyswann/lisa 4.22.12 → 4.22.13
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 +62 -11
- 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 +24 -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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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,9 @@ 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"];
|
|
22
25
|
|
|
23
26
|
function parseArguments(argv) {
|
|
24
27
|
const timeoutArg = argv.find(value => value.startsWith("--timeout-ms="));
|
|
@@ -49,6 +52,26 @@ function killTree(pid, signal) {
|
|
|
49
52
|
}
|
|
50
53
|
}
|
|
51
54
|
|
|
55
|
+
function treeExists(pid) {
|
|
56
|
+
if (process.platform === "win32") return false;
|
|
57
|
+
try {
|
|
58
|
+
process.kill(-pid, 0);
|
|
59
|
+
return true;
|
|
60
|
+
} catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function reapTree(pid) {
|
|
66
|
+
killTree(pid, "SIGTERM");
|
|
67
|
+
if (!treeExists(pid)) return;
|
|
68
|
+
const deadline = Date.now() + KILL_GRACE_MS;
|
|
69
|
+
while (treeExists(pid) && Date.now() < deadline) {
|
|
70
|
+
await new Promise(resolve => setTimeout(resolve, REAP_POLL_MS));
|
|
71
|
+
}
|
|
72
|
+
if (treeExists(pid)) killTree(pid, "SIGKILL");
|
|
73
|
+
}
|
|
74
|
+
|
|
52
75
|
export function supervise(command, timeoutMs) {
|
|
53
76
|
return new Promise((resolve, reject) => {
|
|
54
77
|
const shell =
|
|
@@ -72,34 +95,62 @@ export function supervise(command, timeoutMs) {
|
|
|
72
95
|
|
|
73
96
|
let timedOut = false;
|
|
74
97
|
let settled = false;
|
|
75
|
-
|
|
98
|
+
let terminating = false;
|
|
99
|
+
const signalHandlers = new Map();
|
|
100
|
+
const cleanup = () => {
|
|
101
|
+
clearTimeout(deadline);
|
|
102
|
+
for (const [signal, handler] of signalHandlers) {
|
|
103
|
+
process.off(signal, handler);
|
|
104
|
+
}
|
|
105
|
+
signalHandlers.clear();
|
|
106
|
+
};
|
|
107
|
+
const finish = async (code, signal) => {
|
|
76
108
|
if (settled) return;
|
|
77
109
|
settled = true;
|
|
78
|
-
|
|
110
|
+
cleanup();
|
|
79
111
|
// A command may leave a background descendant after its direct shell
|
|
80
|
-
// exits. Reap that residue before returning a verdict too.
|
|
81
|
-
|
|
112
|
+
// exits. Reap that residue fully before returning a verdict too.
|
|
113
|
+
await reapTree(pid);
|
|
82
114
|
resolve({ code, signal });
|
|
83
115
|
};
|
|
84
116
|
|
|
117
|
+
const relaySignal = signal => {
|
|
118
|
+
if (terminating) return;
|
|
119
|
+
terminating = true;
|
|
120
|
+
cleanup();
|
|
121
|
+
reapTree(pid).finally(() => {
|
|
122
|
+
// Restore the signal-shaped exit after the detached tree is gone.
|
|
123
|
+
process.kill(process.pid, signal);
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
for (const signal of TERMINATING_SIGNALS) {
|
|
127
|
+
const handler = () => relaySignal(signal);
|
|
128
|
+
signalHandlers.set(signal, handler);
|
|
129
|
+
process.once(signal, handler);
|
|
130
|
+
}
|
|
131
|
+
|
|
85
132
|
const deadline = setTimeout(() => {
|
|
86
133
|
timedOut = true;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
killTree(pid, "SIGKILL");
|
|
134
|
+
cleanup();
|
|
135
|
+
reapTree(pid).finally(() => {
|
|
90
136
|
// A signal-shaped result is the existing gate runner vocabulary for
|
|
91
137
|
// "no verdict". It also prevents an ordinary exit code such as 124
|
|
92
138
|
// from being confused with a user command that returned that code.
|
|
93
139
|
if (process.platform === "win32") {
|
|
94
|
-
process.
|
|
140
|
+
// Windows has no signal-shaped process result. 255 is a dedicated
|
|
141
|
+
// supervisor timeout code with a documented (but unavoidable)
|
|
142
|
+
// collision risk, well outside ordinary command exit conventions.
|
|
143
|
+
process.exit(WINDOWS_TIMEOUT_EXIT_CODE);
|
|
95
144
|
} else {
|
|
96
145
|
process.kill(process.pid, "SIGKILL");
|
|
97
146
|
}
|
|
98
|
-
}
|
|
147
|
+
});
|
|
99
148
|
}, timeoutMs);
|
|
100
149
|
|
|
101
150
|
child.once("error", error => {
|
|
102
|
-
|
|
151
|
+
if (settled) return;
|
|
152
|
+
settled = true;
|
|
153
|
+
cleanup();
|
|
103
154
|
killTree(pid, "SIGKILL");
|
|
104
155
|
reject(error);
|
|
105
156
|
});
|
|
@@ -107,7 +158,7 @@ export function supervise(command, timeoutMs) {
|
|
|
107
158
|
// On timeout, wait for the forced group reap above before this supervisor
|
|
108
159
|
// ends. Exiting on the direct shell's close is the race that used to leave
|
|
109
160
|
// its descendants alive.
|
|
110
|
-
if (!timedOut) finish(code, signal);
|
|
161
|
+
if (!timedOut) void finish(code, signal);
|
|
111
162
|
});
|
|
112
163
|
});
|
|
113
164
|
}
|
|
@@ -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,CA0uBjC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CA6oBjC,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,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
289
292
|
"82191900c818a88208669a39563cfed8de1512de699a9ccf7155743e5eff859e",
|
|
290
293
|
]),
|
|
291
294
|
"scripts/lib/process-tree-runner.mjs": Object.freeze([
|
|
295
|
+
"757c74e96c16a9a51c8b099c5e5caa7a2086a9fbdc41cc41348619d993d36a5c",
|
|
292
296
|
"fb68902c68b4cd156f26d2f743364f611a54b833bc445b5144b4c844f553f188",
|
|
293
297
|
]),
|
|
294
298
|
"scripts/lisa-clean-git-env.sh": Object.freeze([
|
|
@@ -333,6 +337,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
333
337
|
"63879152ebb67f289e900167daf035f2d03d7773c6e110ed5ab708c95417c55c",
|
|
334
338
|
"9f42451a38eabd69e453fbaabd34de2490dfbc8ab79b1d7a2f27f574d3314090",
|
|
335
339
|
"c765c7a44ea81d54c7820f2068c8811fb73ca3e5f063cb55a8c30391d1326323",
|
|
340
|
+
"f82f3af91663988d003d30542f96189ad65210e0aa4dcc1b42e6c7c8752d5618",
|
|
336
341
|
"f8c8e276fa6d68ed661f07882f20ee095d18a5e8a90136f78f1ed2b032ce33d4",
|
|
337
342
|
"f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
|
|
338
343
|
]),
|
|
@@ -345,6 +350,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
345
350
|
"41060648b4394d417528f4f560a52f296b4df5b6ec8a5633e08afe4588b6a088",
|
|
346
351
|
"557065f223dfc0715a20c3de76bafee0aefe22f52385c52e17cfc7b9398cce2d",
|
|
347
352
|
"8870dba7b299ddb528e01fee32ec01cd8994a72118708ea8d3255be3daedfa72",
|
|
353
|
+
"8da563431ebfeb01ff6681fe47317bad1524863289460cc6ccdc7c8e07014aa7",
|
|
348
354
|
"9cba6e0103c27850703323da25ac149c0136225172f1a1640abe3b3ac4e50a8e",
|
|
349
355
|
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
350
356
|
"ed0ded7369071c8fbb93cfa4e216177279d75d769cc78f24cce6239997e95659",
|
|
@@ -512,6 +518,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
512
518
|
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
513
519
|
"3b93a0affab6413e3c14a6f43de5acb586286ed1819ece0a66b30429b4d00490",
|
|
514
520
|
"3ff7255f395a9552366faaac34d383f4c95fecfb39882cd1d57854356422fe61",
|
|
521
|
+
"6fbfd93da39c9a1077f0e9e265fc2b2f82873ba82abdca0cd757cffd272fe9ac",
|
|
515
522
|
"759dfd7552c1a4a8bf7172ffd88671a37571155877ea2459d26f6a79c6ab57ee",
|
|
516
523
|
"7790a560850c9d38709dbaccdaa10733e632c1bd4d975cbec7e3cc5a8650b36a",
|
|
517
524
|
"83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
|
|
@@ -548,6 +555,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
548
555
|
"9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
|
|
549
556
|
"a211f1a06aecddb841851463da302f694ab0eafff6bab75ee944b0a58aac431d",
|
|
550
557
|
"a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
|
|
558
|
+
"b5505f55a5092f1d451ae5a01ada85a031e5b063d08fc0ce5527d94b67191a60",
|
|
551
559
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
552
560
|
"baf3c78b7c333735142cc1a7bc19369f953a4699f7be517bb4e3c12167d5c60b",
|
|
553
561
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
@@ -583,6 +591,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
583
591
|
"587ab62a419ca6f104f5b82a3bd89c11f04600faec1824876ba536699ad59f7e",
|
|
584
592
|
"600e0643ff88168c5bccea564cca9fcfea0005ca79bfc2206403ffcca8a4a193",
|
|
585
593
|
"660d0b833ac5ffcb93cb3c478b6b840492a0ae049ff3b6f87275f78537ef7258",
|
|
594
|
+
"6c95bb777c84908023c02d8b98ed87e4a09567e9f62cf63275673d696b7bb874",
|
|
586
595
|
"6e41817a015d5360336ca4e078fa1c787d9976b762e8d9a07d62c41a2fb52f25",
|
|
587
596
|
"7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
|
|
588
597
|
"7ea75f5ff66b71ec551b7116ef855ac1d1c48a3ce3d7b51b3aea893a017dcd0c",
|
|
@@ -611,6 +620,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
611
620
|
"3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
|
|
612
621
|
"3e67eb4b0710ec195ad7efa4a8c2fd64063897d67725ea2627cf869c7e066201",
|
|
613
622
|
"4b383ff960d7da53e0dd46e37632ef55c5a38b004fb4aabfe91a25a9fe02d88f",
|
|
623
|
+
"5408b14528557c2301b69a4d93a64d7930d3b66dc416702c9f33a72759a66c5c",
|
|
614
624
|
"5c6b8a6ff3010b11f78b70eda0e73e78e1155b634a781b8abec79e40ac286eb7",
|
|
615
625
|
"6261f7630e71bd95792083f5459a2802382cae95101c724a7311e3810af6c576",
|
|
616
626
|
"9b613888c4c1cc6cc2b1fb6e162a4c766012eab0ec4f8b7f2ac1bc3da6622c97",
|
|
@@ -663,6 +673,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
663
673
|
"8a1684f5c2b4d37fc782d2090273772814f7ad6c61e7ae5459163a1f28b7a5dc",
|
|
664
674
|
"9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
665
675
|
"bd72dc7d240509eeb4a8f10e8ff64976d8223c1a270a482ac12a0daeae68a5c7",
|
|
676
|
+
"f70ecd3712dd2ca77a8851c7505ce79f948a57e5a2e28f56c5d0ccd047712688",
|
|
666
677
|
]),
|
|
667
678
|
"scripts/lisa-test-node.mjs": Object.freeze([
|
|
668
679
|
"31b338144af00e20e3de02202982846d7333433a9bbda76a8c77d50e6fdbc47b",
|
|
@@ -736,6 +747,7 @@ export const LISA_OWNED_HASH_LEDGER = Object.freeze({
|
|
|
736
747
|
"39cb2fb53f1cc939675e7f8d5530a760abac420c2259fc97108d21f15c0275e9",
|
|
737
748
|
"47d44b2bca383ae395b4e415e06c97a127327ab13762ee95b8c43d0198639bbb",
|
|
738
749
|
"8fa58cc7276add0b2edf1de92bdcc32d81d840811ef0614ddc724010b59a888c",
|
|
750
|
+
"9281e995587ad2c73e15c4381ec4ecfa40fd789f171c0698cdcf8dea32539e62",
|
|
739
751
|
"93190f926689725418c1ec9eae15c55910b128cff6e3cb10185e466c7b90cc4f",
|
|
740
752
|
"db14245ed89b483912af287bdee917a7a921dc21bb29b49be37fc799c05c413f",
|
|
741
753
|
"f50e35d11295a836bd5b6d818aed6daea68ff70bdffbbdf9f67b09984a2628da",
|
|
@@ -894,6 +906,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
894
906
|
"scripts/check-nightly-e2e-health.mjs": Object.freeze([
|
|
895
907
|
"03f57b46c1611806737203980ed0991f478177f883739cc8c3df2c8f219566af",
|
|
896
908
|
"0cf6e997c623adacd198fe650b3900dce06558ebfd2637e6f6df562eee7e10f8",
|
|
909
|
+
"11608828a0ca51d4505e37742f8120102e68e081a92e054b631876b8d3a6d0bc",
|
|
897
910
|
"191608d272178a8fd3126d5b3e4923fadb50e01b699d0376625248d541b14f50",
|
|
898
911
|
"1c79ec49e5f4a3bba700bc1d97e9fc0f4f1799dec3acdf2bed5e3e5b866a0efd",
|
|
899
912
|
"1e5d6787f99af1190b465903956a90270320eeca022c3a3ab6716e1a8b3ec57f",
|
|
@@ -950,6 +963,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
950
963
|
"c04a78cb52beaa2e852846e03f42172a4e4a180222dcd54f4c305911249b68b1",
|
|
951
964
|
"d386d621db2538ab7c5dfaa73f927c9ea87692d1a9e0ac02330a960c64af206e",
|
|
952
965
|
"d649aaf3abf584272bb886b1a722afe16ea861186214284ac61f96b3386e63d7",
|
|
966
|
+
"da2e191a8fbfa4042b3bfff331bc2ee19077acb972b5cfc9cf35eba383115959",
|
|
953
967
|
"dac550c4fd908149fb579625268b16d03657b626417633d8f743875d355ab173",
|
|
954
968
|
"dc609502f848965baeee2576b4622cde502adc15f82ac282c0f30acf06342b77",
|
|
955
969
|
"df59cbee6aaa71a3ccddfcba5d9d08b29610f98fa048519ec4fc35382d698183",
|
|
@@ -1002,6 +1016,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1002
1016
|
"4503ddbe7bd54cd553db2b5952972d5319d6b6eb39a258b7c58577b61c7e7ce7",
|
|
1003
1017
|
"503b51e9239411d07ce6b51dbe2b3079bb12e94bf7c0310e76247af19ff667e6",
|
|
1004
1018
|
"6742cc12ea14fc99b7bef31ff03df68d5c4610b56fad43107790372e6d777eb1",
|
|
1019
|
+
"a36a7bd7845878e5f1f991e896739ba4cc468e50f562b71a251ebe193ca151b6",
|
|
1005
1020
|
"b4a0b1a0df6e944313b4a197925a0003fb9aed517fbd5708deda2a2a67f53faf",
|
|
1006
1021
|
"d234617dc907bb563455419957f2f419702fcd1c10b9d39e19d5bab8ca962008",
|
|
1007
1022
|
"e07bab7dc4c4c296e2007cf26fab694b1238545dc37816e88d849606d8f9e760",
|
|
@@ -1017,6 +1032,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1017
1032
|
"82191900c818a88208669a39563cfed8de1512de699a9ccf7155743e5eff859e",
|
|
1018
1033
|
]),
|
|
1019
1034
|
"scripts/lib/process-tree-runner.mjs": Object.freeze([
|
|
1035
|
+
"757c74e96c16a9a51c8b099c5e5caa7a2086a9fbdc41cc41348619d993d36a5c",
|
|
1020
1036
|
"fb68902c68b4cd156f26d2f743364f611a54b833bc445b5144b4c844f553f188",
|
|
1021
1037
|
]),
|
|
1022
1038
|
"scripts/lisa-clean-git-env.sh": Object.freeze([
|
|
@@ -1060,6 +1076,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1060
1076
|
"63879152ebb67f289e900167daf035f2d03d7773c6e110ed5ab708c95417c55c",
|
|
1061
1077
|
"9f42451a38eabd69e453fbaabd34de2490dfbc8ab79b1d7a2f27f574d3314090",
|
|
1062
1078
|
"c765c7a44ea81d54c7820f2068c8811fb73ca3e5f063cb55a8c30391d1326323",
|
|
1079
|
+
"f82f3af91663988d003d30542f96189ad65210e0aa4dcc1b42e6c7c8752d5618",
|
|
1063
1080
|
"f8c8e276fa6d68ed661f07882f20ee095d18a5e8a90136f78f1ed2b032ce33d4",
|
|
1064
1081
|
"f936bc8a038a7901ade1ba58cc52e5f5a8b8b2a52a9f0c1516567cc80eb02ccb",
|
|
1065
1082
|
]),
|
|
@@ -1071,6 +1088,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1071
1088
|
"41060648b4394d417528f4f560a52f296b4df5b6ec8a5633e08afe4588b6a088",
|
|
1072
1089
|
"557065f223dfc0715a20c3de76bafee0aefe22f52385c52e17cfc7b9398cce2d",
|
|
1073
1090
|
"8870dba7b299ddb528e01fee32ec01cd8994a72118708ea8d3255be3daedfa72",
|
|
1091
|
+
"8da563431ebfeb01ff6681fe47317bad1524863289460cc6ccdc7c8e07014aa7",
|
|
1074
1092
|
"9cba6e0103c27850703323da25ac149c0136225172f1a1640abe3b3ac4e50a8e",
|
|
1075
1093
|
"a612f172282d13ba9318fe5e03689d7c6ff42a0122d0c9d5d39051e1967b93dc",
|
|
1076
1094
|
"ed0ded7369071c8fbb93cfa4e216177279d75d769cc78f24cce6239997e95659",
|
|
@@ -1195,6 +1213,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1195
1213
|
"33e2bd341eb992036059b0c4606db35a218adcfeca7e44d174fedf8ebdff29d2",
|
|
1196
1214
|
"3b93a0affab6413e3c14a6f43de5acb586286ed1819ece0a66b30429b4d00490",
|
|
1197
1215
|
"3ff7255f395a9552366faaac34d383f4c95fecfb39882cd1d57854356422fe61",
|
|
1216
|
+
"6fbfd93da39c9a1077f0e9e265fc2b2f82873ba82abdca0cd757cffd272fe9ac",
|
|
1198
1217
|
"759dfd7552c1a4a8bf7172ffd88671a37571155877ea2459d26f6a79c6ab57ee",
|
|
1199
1218
|
"7790a560850c9d38709dbaccdaa10733e632c1bd4d975cbec7e3cc5a8650b36a",
|
|
1200
1219
|
"83a8b8108654086afb6a6f23a8f09f9f041eb2cd4094c5531fa7ab1f75e873dc",
|
|
@@ -1230,6 +1249,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1230
1249
|
"9404c374cbd90a0860410080f1044d087c51d84bb4c0a37343c2b632c3a9d03b",
|
|
1231
1250
|
"a211f1a06aecddb841851463da302f694ab0eafff6bab75ee944b0a58aac431d",
|
|
1232
1251
|
"a22fd1b7c483f1a538202353ee85c82be17a8910e03c0a930635ce8cb3595c64",
|
|
1252
|
+
"b5505f55a5092f1d451ae5a01ada85a031e5b063d08fc0ce5527d94b67191a60",
|
|
1233
1253
|
"b83c5043a0f29b2d8851258acfe6906aab7922cd80f486e25220e55f26a8c0a5",
|
|
1234
1254
|
"c4a51de3f1512e7e18935612137e4ddaf548db68f878d8239fcc85436b0f27c7",
|
|
1235
1255
|
"c57b70eed03b74e7c8335c40b0c2b1102e217e507337b71fcf3d2bec5a450bf8",
|
|
@@ -1258,6 +1278,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1258
1278
|
"4ba3e8b081a4eb115d2da9e73b8a763a38ab8feb2646def7412dfd00ed18b4b0",
|
|
1259
1279
|
"587ab62a419ca6f104f5b82a3bd89c11f04600faec1824876ba536699ad59f7e",
|
|
1260
1280
|
"660d0b833ac5ffcb93cb3c478b6b840492a0ae049ff3b6f87275f78537ef7258",
|
|
1281
|
+
"6c95bb777c84908023c02d8b98ed87e4a09567e9f62cf63275673d696b7bb874",
|
|
1261
1282
|
"6e41817a015d5360336ca4e078fa1c787d9976b762e8d9a07d62c41a2fb52f25",
|
|
1262
1283
|
"7d8d24dea151ef2178807046e97aea7ebfadd9c88eb50347feb7bb4bb190227d",
|
|
1263
1284
|
"86fd0c6f6b8106a10af937bfbce94927603ffa8adcb188e350a659c96e3fc502",
|
|
@@ -1280,6 +1301,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1280
1301
|
"395897d1dc3f0ac92d7c892eaa9b9ddf12078181bb9f5b228965478190b09a91",
|
|
1281
1302
|
"3c062d0b79961a9a93a822507e893dcdaa71d65d735557727d20464c2489d812",
|
|
1282
1303
|
"3e67eb4b0710ec195ad7efa4a8c2fd64063897d67725ea2627cf869c7e066201",
|
|
1304
|
+
"5408b14528557c2301b69a4d93a64d7930d3b66dc416702c9f33a72759a66c5c",
|
|
1283
1305
|
"5c6b8a6ff3010b11f78b70eda0e73e78e1155b634a781b8abec79e40ac286eb7",
|
|
1284
1306
|
"6261f7630e71bd95792083f5459a2802382cae95101c724a7311e3810af6c576",
|
|
1285
1307
|
"9b613888c4c1cc6cc2b1fb6e162a4c766012eab0ec4f8b7f2ac1bc3da6622c97",
|
|
@@ -1324,6 +1346,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1324
1346
|
"8a1684f5c2b4d37fc782d2090273772814f7ad6c61e7ae5459163a1f28b7a5dc",
|
|
1325
1347
|
"9dd145c0f9dac6ed252b13d32e130dbab964da6cd357981b58541780ecb2f981",
|
|
1326
1348
|
"bd72dc7d240509eeb4a8f10e8ff64976d8223c1a270a482ac12a0daeae68a5c7",
|
|
1349
|
+
"f70ecd3712dd2ca77a8851c7505ce79f948a57e5a2e28f56c5d0ccd047712688",
|
|
1327
1350
|
]),
|
|
1328
1351
|
"scripts/lisa-test-node.mjs": Object.freeze([
|
|
1329
1352
|
"31b338144af00e20e3de02202982846d7333433a9bbda76a8c77d50e6fdbc47b",
|
|
@@ -1393,6 +1416,7 @@ export const LISA_OWNED_HASH_HISTORY_DERIVED = Object.freeze({
|
|
|
1393
1416
|
"39cb2fb53f1cc939675e7f8d5530a760abac420c2259fc97108d21f15c0275e9",
|
|
1394
1417
|
"47d44b2bca383ae395b4e415e06c97a127327ab13762ee95b8c43d0198639bbb",
|
|
1395
1418
|
"8fa58cc7276add0b2edf1de92bdcc32d81d840811ef0614ddc724010b59a888c",
|
|
1419
|
+
"9281e995587ad2c73e15c4381ec4ecfa40fd789f171c0698cdcf8dea32539e62",
|
|
1396
1420
|
"93190f926689725418c1ec9eae15c55910b128cff6e3cb10185e466c7b90cc4f",
|
|
1397
1421
|
"db14245ed89b483912af287bdee917a7a921dc21bb29b49be37fc799c05c413f",
|
|
1398
1422
|
"f50e35d11295a836bd5b6d818aed6daea68ff70bdffbbdf9f67b09984a2628da",
|